0

Horizo​​ntalScrollView とそれに含まれる ImageButton (ImageView も) に問題があります。Horizo​​ntalScrollView にデータが入力されると、ドローアブル セレクターを動的に割り当てました。

OnClickListenerをクリックして起動できるので、すべて問題ありません。問題は商品の状態です。ImageButton がクリックされると (タッチされた画面)、正しいドローアブルが表示されますが、指を離すと (タッチされない画面)、押されたイメージではなくデフォルトのイメージが表示されます。静的な描画可能なセレクター (xml セレクター) を割り当てると、同じ問題が発生します。

これは、動的セレクターのコードです。

public static StateListDrawable setStateListDrawable(Context context, TypedArray images){

    StateListDrawable states = new StateListDrawable();

    try{
        states.addState(new int[] {android.R.attr.state_pressed},images.getDrawable(1));
        states.addState(new int[] {android.R.attr.state_focused},images.getDrawable(1));
        states.addState(new int[] { },images.getDrawable(0));
    }catch(Exception e){
        int id = context.getResources().getIdentifier("ID1", "array", context.getPackageName());
        images = context.getResources().obtainTypedArray(id);

        states.addState(new int[] {android.R.attr.state_pressed},images.getDrawable(1));
        states.addState(new int[] {android.R.attr.state_focused},images.getDrawable(1));
        states.addState(new int[] { },images.getDrawable(0));
    }

    return states;
}

これは Horizo​​ntalScrollView xml です。

<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/horizontalScrollSports"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="#ffffff" 
    android:scrollbars="none"
    android:descendantFocusability="blocksDescendants">

    <LinearLayout 
        android:id="@+id/iwm_sports_container" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content">

    </LinearLayout>

</HorizontalScrollView>

よろしくお願いします。私の英語でお詫び申し上げます。

4

1 に答える 1

1

わかりました、解決しました。信じられない!!!

動的セレクターに「選択された状態」を配置しました。

public static StateListDrawable setStateListDrawable(Context context, TypedArray images){

        StateListDrawable states = new StateListDrawable();

        try{
            states.addState(new int[] {android.R.attr.state_pressed},images.getDrawable(1));
            states.addState(new int[] {android.R.attr.state_focused},images.getDrawable(1));
            **states.addState(new int[] {android.R.attr.state_selected},images.getDrawable(1));**
            states.addState(new int[] { },images.getDrawable(0));
        }catch(Exception e){
            int id = context.getResources().getIdentifier("ID1", "array", context.getPackageName());
            images = context.getResources().obtainTypedArray(id);

            states.addState(new int[] {android.R.attr.state_pressed},images.getDrawable(1));
            states.addState(new int[] {android.R.attr.state_focused},images.getDrawable(1));
            **states.addState(new int[] {android.R.attr.state_selected},images.getDrawable(1));**
            states.addState(new int[] { },images.getDrawable(0));
        }

        return states;
    }

そして、LinearLayout の属性 descendantFocusability を変更しました。

<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/horizontalScrollSports"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="#ffffff" 
    android:scrollbars="none"
    android:layout_gravity="center_horizontal">

    <LinearLayout 
        android:id="@+id/iwm_sports_container" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        **android:descendantFocusability="blocksDescendants"**>

    </LinearLayout>

</HorizontalScrollView>

乾杯!!!

PD: 私の英語でごめんなさい!!!

于 2012-10-01T22:44:54.300 に答える