web-dev-qa-db-ja.com

androidボタンセレクター

これはボタンセレクターで、通常は赤で表示され、押されると灰色で表示されます。

押されたときにテキストのサイズと色も変更できるように、コードをさらに直接変更するにはどうすればよいですか?どうもありがとう!

<item Android:state_pressed="true" >         
    <shape xmlns:Android="http://schemas.Android.com/apk/res/Android"> 
        <stroke Android:width="2dp" Android:color="@color/black" />
        <solid Android:color="@color/grey"/>
        <padding Android:left="5dp" Android:top="2dp" 
            Android:right="5dp" Android:bottom="2dp" /> 
        <corners Android:radius="5dp" /> 
    </shape>    
</item>

<item>
    <shape xmlns:Android="http://schemas.Android.com/apk/res/Android"> 
        <stroke Android:width="2dp" Android:color="@color/black" />
        <solid Android:color="#FF6699"/>
        <padding Android:left="5dp" Android:top="2dp" 
            Android:right="5dp" Android:bottom="2dp" /> 
        <corners Android:radius="5dp" /> 
    </shape>
</item>
107
pearmak

レイアウトファイルでselectorbuttonを設定するだけです。

<Button
     Android:id="@+id/button1"
     Android:background="@drawable/selector_xml_name"
     Android:layout_width="200dp"
     Android:layout_height="126dp"
     Android:text="Hello" />

完了しました。

編集

以下は、drawableディレクトリのbutton_effect.xmlファイルです

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">

    <item Android:drawable="@drawable/numpad_button_bg_selected" Android:state_selected="true"></item>
    <item Android:drawable="@drawable/numpad_button_bg_pressed" Android:state_pressed="true"></item>
    <item Android:drawable="@drawable/numpad_button_bg_normal"></item>

</selector>

これで、3つのドロウアブルがあることがわかります。上で書いたように、このbutton_effectスタイルをbuttonに配置するだけです。 selector_xml_namebutton_effectに置き換えるだけです。

202
Chintan Rathod

state list drawable を使用してテキストサイズを変更することはできません。テキストの色とサイズを変更するには、次の操作を行います。

テキストの色

テキストの色を変更するには、 color state list resource を作成できます。これは、res/color/ディレクトリーにある別個のリソースになります。レイアウトxmlでは、Android:textColor属性の値として設定する必要があります。カラーセレクタには、次のようなものが含まれます。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_pressed="true" Android:color="@color/text_pressed" />
    <item Android:color="@color/text_normal" />
</selector>

テキストサイズ

リソースだけでテキストのサイズを変更することはできません。 「ディメンセレクター」はありません。あなたはコードでそれをしなければなりません。そして、簡単な解決策はありません。

おそらく最も簡単な解決策は、 View.onTouchListener() を利用し、それに応じてアップイベントとダウンイベントを処理することです。次のようなものを使用します。

view.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                // change text size to the "pressed value"
                return true;
            case MotionEvent.ACTION_UP:
                // change text size to the "normal value"
                return true;
            default:
                return false;
            }
        }
});

別の解決策は、ビューを拡張してsetPressed(Boolean)メソッドをオーバーライドすることです。このメソッドは、押された状態の変更が発生すると内部的に呼び出されます。次に、メソッド呼び出しでテキストのサイズを適宜変更します(スーパーを呼び出すことを忘れないでください)。

23
Tomik

Drawableフォルダーにcustom_selector.xmlを作成します

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
   <item Android:drawable="@drawable/unselected" Android:state_pressed="true" />
   <item Android:drawable="@drawable/selected" />
</selector>

Drawableフォルダーにselected.xmlシェイプを作成します

<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:shape="rectangle" Android:padding="90dp">
   <solid Android:color="@color/selected"/>
   <padding />
   <stroke Android:color="#000" Android:width="1dp"/>
   <corners Android:bottomRightRadius="15dp" Android:bottomLeftRadius="15dp" Android:topLeftRadius="15dp" Android:topRightRadius="15dp"/>
</shape>

描画可能なフォルダーにunselected.xmlシェイプを作成します

<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:shape="rectangle" Android:padding="90dp">
   <solid Android:color="@color/unselected"/>
   <padding />
   <stroke Android:color="#000" Android:width="1dp"/>
   <corners Android:bottomRightRadius="15dp" Android:bottomLeftRadius="15dp" Android:topLeftRadius="15dp" Android:topRightRadius="15dp"/>
</shape>

値フォルダーのcolor.xmlで選択/非選択状態に次の色を追加します

<color name="selected">#a8cf45</color>
<color name="unselected">#ff8cae3b</color>

あなたはここから完全なソリューションを確認できます

12
nirav kalola

レイアウト.xmlファイル内

<Button
 Android:id="@+id/button1"
 Android:background="@drawable/btn_selector"
 Android:layout_width="100dp"
 Android:layout_height="50dp"
 Android:text="press" />

btn_selector.xml

<?xml version="1.0" encoding="utf-8"?>
 <item Android:drawable="@drawable/btn_bg_selected" Android:state_selected="true"></item>
<item Android:drawable="@drawable/btn_bg_pressed" Android:state_pressed="true"></item>
<item Android:drawable="@drawable/btn_bg_normal"></item>
2
Vishal G. Gohel

セレクターを実装する最良の方法は、xmlを使用する方がプログラミングが簡単なため、xmlを使用することです。

    <?xml version="1.0" encoding="utf-8"?>    
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
        <item Android:drawable="@drawable/button_bg_selected" Android:state_selected="true"></item>
        <item Android:drawable="@drawable/button_bg_pressed" Android:state_pressed="true"></item>
        <item Android:drawable="@drawable/button_bg_normal"></item>

    </selector>

詳細については、このリンクを使用して実装しました http://www.blazin.in/2016/03/how-to-use-selectors-for-botton.html

2

次のコードを使用できます。

<Button
Android:id="@+id/img_sublist_carat"
Android:layout_width="70dp"
Android:layout_height="68dp"
Android:layout_centerVertical="true"
Android:layout_marginLeft="625dp"
Android:contentDescription=""
Android:background="@drawable/img_sublist_carat_selector"
Android:visibility="visible" />

(セレクタファイル)img_sublist_carat_selector.xml:

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
 <item Android:state_focused="true" 
       Android:state_pressed="true"        
       Android:drawable="@drawable/img_sublist_carat_highlight" />
 <item Android:state_pressed="true" 
       Android:drawable="@drawable/img_sublist_carat_highlight" />
 <item Android:drawable="@drawable/img_sublist_carat_normal" />
</selector>
1