8

背景色を赤、緑、青に個別に設定したボタンがいくつかあります。ボタンを押すとクリックイベントが発生しますが、ボタンが押されたことをユーザーが知るためのGUIの変更はありません。Android ボタンのデフォルトの背景の灰色がかった色がオレンジ色に変わり、押した状態を離すと灰色がかった色に戻ります。色付きのボタンにこれを実装する方法は?

4

3 に答える 3

26

これは、XMLStateListDrawableで表されるを介して実装されます。参照: http://developer.android.com/guide/topics/resources/drawable-resource.html#StateListselector

以下は、デフォルトで白、押されると黒になるドローアブルの例です:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:drawable="@android:color/black" /> <!-- pressed -->
    <item android:drawable="@android:color/white" /> <!-- default -->
</selector>
于 2013-01-02T05:09:37.973 に答える
8

K-Ballo が述べたように、StateListDrawable を使用して、状態に応じてさまざまなグラフィックスを持つビューを実装できます。あなたの場合、ボタンは、ボタンが押された状態とボタンが押されていない状態の2つの状態のビューです。

drawable フォルダーに buttonselector.xml ファイルを作成する必要があります。

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

    <item android:drawable="@drawable/button_not_pressed" android:state_pressed="false" android:state_selected="false"/>
    <item android:drawable="@drawable/button_pressed" android:state_pressed="true"/>

</selector>

ボタンの状態用に 2 つの個別の xml ファイルを作成する

button_not_pressed.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
  <gradient
      android:startColor="#FFFFFF"
      android:centerColor="#FFFFFF"
      android:endColor="#FFFFFF"
      android:angle="270" />
</shape>

button_pressed.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
  <gradient
      android:startColor="#FF0000"
      android:centerColor="#FF0000"
      android:endColor="#FF0000"
      android:angle="270" />
</shape>

状態に応じてボタンの背景色を表す 2 つの html カラーコード #FF0000 と #FFFFFF に気付くでしょう。

カスタムボタンのスタイルを設定する main.xml で

<Button
        android:id="@+id/customButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/buttonselector"
        android:text="test"
        android:textColor="#000000" />

アクティビティ クラスに次の 2 行を追加します。

Button customButton = (Button) findViewById(R.id.customButton);
customButton.setBackground(getResources().getDrawable(R.drawable.buttonselector));

それが役に立てば幸い

于 2013-01-02T06:45:19.390 に答える
2

この方法を試してください:

<?xml version="1.0" encoding="utf-8"?>   
<selector xmlns:android="http://schemas.android.com/apk/res/android" >   
    <item android:state_pressed="true" >
        <shape>
            <solid
                android:color="#1E669B" />
            <stroke
                android:width="2dp"
                android:color="#1B5E91" />
            <corners
                android:radius="6dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />            
        </shape>
    </item>
    <item>
        <shape>
            <gradient
                android:startColor="#1E669B"
                android:endColor="#1E669B"
                android:angle="270" />
            <stroke
                android:width="4dp"
                android:color="#1B5E91" />
            <corners
                android:radius="7dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>
</selector>
于 2013-01-02T05:24:05.273 に答える