Androidボタンセレクター


115

これはボタンセレクタで、通常の場合は赤く表示され、押すと灰色に表示されます。

PRESSEDを押したときにテキストのサイズと色も変更されるように、コードをさらに直接変更する方法を教えてください。どうもありがとう!

<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>

回答:


217

あなただけのセットに必要なselectorbuttonレイアウトファイルに。

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

そして完了。

編集する

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

<?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


押された状態と押されていない状態を設定する方法について詳しく説明してもらえますか?(丸い色、ストロークなど、上記のすべてのコンポーネントを使用)。どうもありがとう!
pearmak

セレクタを実施するための最良の方法は、XMLは、この参照してください使用しているblazin.in/2016/03/how-to-use-selectors-for-botton.html このあたりとその作業として実装I
BhushanのShirsath

こんにちは、この投稿を書いて久しぶりですが、私が何を欠いているのかわかるでしょう。私はあなたのコードを使用し、私のボタンは常に緑です、そして押された= trueと選択された= trueの場合、ドロアブルは灰色に変わりますが、他のアクティビティが開かれる前のセコドはデフォルトのAndroidスタイルを持っています。私が見逃している状態は何ですか?
volfk

27

状態リストドローアブルでは、テキストサイズを変更できません。テキストの色とサイズを変更するには、次の操作を行います。

テキストの色

テキストの色を変更するには、色状態リストリソースを作成します。これは、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()、それに応じてupおよびdownイベントを利用して処理することです。このようなものを使用してください:

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)メソッドをオーバーライドすることです。このメソッドは、押された状態の変更が発生したときに内部的に呼び出されます。次に、メソッド呼び出しでテキストのサイズを適宜変更します(スーパーを呼び出すことを忘れないでください)。


14

ドローアブルフォルダーに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>

描画可能なフォルダに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>

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


2

セレクターを実装する最善の方法は、プログラム的な方法を使用する代わりに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

レイアウト.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>


1

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

<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>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.