1

drawablesボタンのスタイルをうまく設定するために使用していますが、ボタンのテキストの色を除いて、うまく機能します。

state_enabled="false"でアイテムを定義しselector、使用するとsetEnabled適切なボタン スタイルが得られますが、テキストの色を変えるにはかなりのループをジャンプする必要があります。たとえば、次のコードは機能しません (無効の場合はテキストが表示されないか、黒のテキストが表示され、有効の場合はダークグレーが表示されます)。

public void setButtonsEnabled(boolean enable) {
    btnAccept.setEnabled(enable);
    btnDecline.setEnabled(enable);


    int color = R.color.White;
    if (!enable) {
        color = R.color.DarkGray;
    }
    btnAccept.setTextColor(color);
    btnDecline.setTextColor(color);

}
4

3 に答える 3

4

私は解決策を見つけました。

重要なのは、TextColorをinに設定することにもありselectorますres/colors

   android:textColor="@color/button_text"
   android:background="@drawable/button_selector" 

バックグラウンドセレクターには、これを使用しました。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item  android:state_enabled="true" android:state_pressed="false" android:drawable="@drawable/btn_buddy_enabled"></item>
<item  android:state_enabled="false" android:drawable="@drawable/btn_buddy_disabled"></item>
<item  android:state_enabled="true" android:state_pressed="true" android:drawable="@drawable/btn_buddy_clicked"></item>
</selector>

そして、textColorセレクターはこれです:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item  android:state_enabled="true" android:state_pressed="false" android:color="@color/White"></item>
<item  android:state_enabled="false" android:color="@color/Gray"></item>
<item  android:state_enabled="true" android:state_pressed="true" android:color="@color/White"></item>
</selector>

電話setEnabled()をかけるだけで、すべてが正常に機能します。

于 2012-10-09T19:37:53.807 に答える
1

色に間違った値を使用しています。R.color.White は、値自体ではなく、値のリソース ID を返します。Color.WHITE または getResources().getColor(R.color.White) を試してください。

于 2012-10-09T19:25:33.893 に答える
0

チェックアウトしましたColorStateListsか?彼らはかなり素晴らしいです。したがって、基本的にセレクターのこれらすべてのアイデアをDrawable一連の色に適用します。

[Your Project]/res/colors/という名前のフォルダーを作成し、そこに button_color.xml (または何でも) という名前の xml ファイルを配置します。

button_color.xml

<?xml version="1.0" encoding="utf-8"?>
<selector
    xmlns:android="http://schemas.android.com/apk/res/android"
>
    <!-- Any Enabled button, gets White Text -->
    <item
        android:color="@color/White"
        android:state_enabled="true" />

    <!-- Buttons with any other state, get DarkGray Text -->
    <item
        android:color="@color/DarkGray"/>
</selector>

そして、あなたのために、次のTextViewようなことをすることができますmTextView.setTextColor(R.color.button_color);。その時点で、if/else タイプのロジックは必要ありselectorません。ColorStateListセレクターはカラー リソースにロールアップされますが、他のドキュメントで参照されている場合に備えて、セレクターが実際に生成するクラスは a と呼ばれます。

于 2012-10-09T19:35:59.520 に答える