5

ImageView のセレクターを設定しようとしていますが、機能していません

私のレイアウト

 <LinearLayout
        android:id="@+id/actionLayout"
        android:orientation="horizontal"
        android:background="@color/orange_color"
        android:gravity="center_vertical"
        android:paddingTop="@dimen/actions_top_bottom"
        android:paddingBottom="@dimen/actions_top_bottom"

        android:focusable="false"
        android:focusableInTouchMode="false"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">

        <ImageButton
            android:layout_width="wrap_content"
            android:layout_height="@dimen/actions_height"
            android:id="@+id/btnNoRecord"
            android:scaleType="centerInside"
            android:src="@drawable/ic_action_record"
            android:onClick="onRecordSwitcherClick"
            android:layout_weight="1"
            android:background="@drawable/selector"/>
...
</LinearLayout>

私のselector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape android:shape="rectangle">
            <solid android:color="@color/dark_orange_color"/>
        </shape>
    </item>
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@color/orange_color"/>
        </shape>
    </item>
</selector>

バグはどこ?おそらく、LinearLayout プロパティ内に何かバグがありますか?

編集 LinearLayout の外で ImageButton が正常に動作していることがわかりました。しかし、私は本当にレイアウトが必要です

4

6 に答える 6

3

以下に示すようclickableに、属性を設定します。ImageButton

<ImageButton
    android:layout_width="wrap_content"
    android:layout_height="@dimen/actions_height"
    android:id="@+id/btnNoRecord"
    android:src="@drawable/ic_action_record"
    android:background="@drawable/selector"
    android:clickable="true"/>

ImageButtonから延長されImageViewます。このclickable属性はデフォルトで false であるため、手動で設定する必要があります。

于 2015-05-25T07:50:39.847 に答える
2

セレクターが正しくないようです。

状態が欠落している可能性があると思います(つまり、state_focused="true"など)。セレクターは上から下に順に分析されることを覚えておくことが重要です (そのため、状態が最初に検出された場合、セレクター内の他の項目は無視されます。つまり、順序が重要です)。

<selector
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:drawable="@drawable/btn_settings_inset_top_pressed"
        android:state_focused="true"
        android:state_pressed="true"/>
    <item
        android:drawable="@drawable/btn_settings_inset_top_pressed"
        android:state_focused="false"
        android:state_pressed="true"/>
    <item
        android:drawable="@drawable/btn_settings_inset_top"
        android:state_focused="true"
        android:state_pressed="false"/>
    <item
        android:drawable="@drawable/btn_settings_inset_top"
        android:state_focused="false"
        android:state_pressed="false"/>
</selector>
于 2013-10-17T19:45:12.400 に答える
1

私はそれを解決しました!

私のコードの中に私が持っている

btnNoRecord.setOnTouchListener(new View.OnTouchListener() {
   @Override
   public boolean onTouch(View view, MotionEvent motionEvent)
   {
       ...
       return true;
   }
});

return truereturn falseに変更しましたが、動作しています!

于 2013-10-18T06:26:07.793 に答える
1

イメージビューにパディングを入れて、背景セレクターを表示します

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="@dimen/actions_height"
        android:padding="5dp"
        android:id="@+id/btnNoRecord"
        android:scaleType="centerInside"
        android:src="@drawable/ic_action_record"
        android:onClick="onRecordSwitcherClick"
        android:layout_weight="1"
        android:background="@drawable/selector"/>

                         OR 

このようにしてみてください。背景セレクターが表示されるようにパディングを指定する必要があります。

<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_pressed="true">
       <shape android:shape="rectangle">
            <solid android:color="@color/dark_orange_color"/>
            <padding
            android:bottom="5dp"
            android:left="5dp"
            android:right="5dp"
            android:top="5dp" />
      </shape>
</item>
<item>
      <shape android:shape="rectangle">
          <solid android:color="@color/orange_color"/>
          <padding
            android:bottom="5dp"
            android:left="5dp"
            android:right="5dp"
            android:top="5dp" />
      </shape>
</item>
</selector>
于 2013-10-17T19:42:30.820 に答える