

以下のように、Color State Listを使うことでtextColorだけは実装できました。  
同じように、textや、BackgroundColorも状態によって変化させる方法は無いでしょうか。

res/color/button_text_color.xml

[code]

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_focused="true" android:state_pressed="false" android:color="#ffffff" />
        <item android:state_focused="true" android:state_pressed="true" android:color="#000000" />
        <item android:state_focused="false" android:state_pressed="true" android:color="#000000" />
        <item android:color="#ffffff" />
    </selector>
    
[/code]

res/layout/exsample.xml

[code]

    ...
    <Button
        android:textColor="@color/button_text_color" />
    ...
    
[/code]


CC BY-SA 3.0
2015-04-07T03:22:05.583
8845
2015-04-07T05:50:59.963
427
question
android
Buttonの状態に応じて、text,textColor,BackgroundColorを変えるには


初めまして。  
backgroundの場合はちょっとやり方が変わります。

これをbackground属性に定義すれば反映されると思います。

[code]

    <selector xmlns:android="http://schemas.android.com/apk/res/android">  
    <item android:state_selected="true" >  
        <color android:color="#ff0000" />  
    </item>  
    <item android:state_selected="false">  
        <color android:color="#00ff00" />  
    </item>  
    </selector> 
    
[/code]


CC BY-SA 3.0
2015-04-07T05:38:44.923
8852
2015-04-07T05:38:44.923
297
8845
answer


ボタン状態によってtextを変更させる方法はちょっと分かりません。

背景色の場合は、文字色と同じように`selector`のxmlを作成し、`background`に設定します。

res/drawable/bg_button.xml

[code]

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_enabled="true" android:state_window_focused="false">
            <color android:color="#ff8888"/>
        </item>
        ・・・省略
    </selector>
    
[/code]

res/layout/example.xml

[code]

    <Button
        android:background="@drawable/bg_button"/>
    
[/code]

ただし、色だけを指定した場合、単にベタ塗りとなってしまい、ボタンっぽくないです。  
ボタンっぽくした上で色を指定する場合、お好みの色や形で画像を用意するか、`shape`を利用すると綺麗に表示されると思います。

画像を指定する例（sdkのbtn_default.xmlなどを参考にするといいと思います）

[code]

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_window_focused="false" android:state_enabled="true"
            android:drawable="@drawable/btn_default_normal" />
        ・・・省略
    </selector>
    
[/code]

`shape`で指定する例

[code]

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_window_focused="false" android:state_enabled="true">
            <shape android:shape="rectangle">
                <solid android:color="#ff9999"/>
                <corners android:radius="4dp"/>
                <stroke
                    android:width="1dp"
                    android:color="#ff8888"/>
                <padding
                    android:left="8dp"
                    android:right="8dp"/>
            </shape>
        </item>
        ・・・省略
    </selector>
    
[/code]

`API Level21`以降で色を変更する場合、上記のように指定すると`ripple`(波紋)が表示されなくなるので、  
その場合は`<ripple>`を使用します。

画像を使う場合、`state_pressed="ture"`のときは`<ripple>`で波紋の色を指定し、その中で画像を指定します。

[code]

    <item
        android:state_pressed="true">
        <ripple android:color="#ffcccc">
            <item android:drawable="@drawable/btn" />
        </ripple>
    </item>
    
[/code]

`shape`で指定する場合は画像と同様に`<ripple>`で波紋の色を指定し、その中で`<shaple>`を定義します。

[code]

    <item
        android:state_pressed="true">
        <ripple android:color="#ffcccc">
            <item>
                <shape android:shape="rectangle">
                    <solid android:color="#ff9999"/>
                    <corners android:radius="4dp"/>
                    <stroke
                        android:width="2dp"
                        android:color="#ff8888"/>
                    <padding
                        android:left="8dp"
                        android:right="8dp"/>
                </shape>
            </item>
        </ripple>
    </item>
    
[/code]

`API Level21`以降でボタンの色だけ変えたい場合は、テーマで指定する方法もあります。

[code]

    <style name="AppTheme" parent="android:Theme.Material.Light">
        <!-- ボタン背景色 -->
        <item name="android:colorButtonNormal">#88ff88</item>
        <!-- ボタンの場合は押されたときの色になります。ボタン以外でも使われます -->
        <item name="android:colorControlHighlight">#993333</item>
    </style>
    
[/code]


CC BY-SA 3.0
2015-04-07T05:50:59.963
8854
2015-04-07T05:50:59.963
8216
8845
answer