これはボタンセレクターで、通常は赤で表示され、押されると灰色で表示されます。
押されたときにテキストのサイズと色も変更できるように、コードをさらに直接変更するにはどうすればよいですか?どうもありがとう!
<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>
レイアウトファイルでselector
のbutton
を設定するだけです。
<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_name
をbutton_effect
に置き換えるだけです。
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)
メソッドをオーバーライドすることです。このメソッドは、押された状態の変更が発生すると内部的に呼び出されます。次に、メソッド呼び出しでテキストのサイズを適宜変更します(スーパーを呼び出すことを忘れないでください)。
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>
あなたはここから完全なソリューションを確認できます
レイアウト.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>
セレクターを実装する最良の方法は、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
次のコードを使用できます。
<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>