web-dev-qa-db-ja.com

Android:テーマ/スタイルを使用して無効なテキストの色を変更しますか?

Color.xmlで次の色を定義しています。

<color name="gold">#d49e43</color>
<color name="gold_disabled">#80d49e43</color>

そして次のテーマ:

<style name="Theme.Example" parent="@style/Theme.Sherlock">       
    <item name="Android:textColor">@color/gold</item>
</style>

SettingsActivityには、CheckBoxPreferenceとそれに依存するPreferenceがあります。 CheckBoxPreferenceのチェックを外すと、設定は無効になりますが、設定したカスタムのゴールドテキストの色のため、デフォルトの色のように「グレー表示」されません。これをXMLで変更するにはどうすればよいですか?私は設定を試みました:

    <item name="Android:textColorPrimaryDisableOnly">@color/gold_disabled</item>
    <item name="Android:textColorPrimaryInverseDisableOnly">@color/gold_disabled</item>
    <item name="Android:textColorPrimaryNoDisable">@color/gold_disabled</item>
    <item name="Android:textColorSecondaryNoDisable">@color/gold_disabled</item>
    <item name="Android:textColorPrimaryInverseNoDisable">@color/gold_disabled</item>
    <item name="Android:textColorSecondaryInverseNoDisable">@color/gold_disabled</item>

しかし、何も機能していないようです。

17
Android Noob

私はこれを多かれ少なかれ偶然に理解しましたが、Preferenceをサブクラス化し、onBindView()をオーバーライドすると、設定が無効になっているときに「グレー表示」効果を実現できます。

@Override
protected void onBindView(View view) {
    // TODO Auto-generated method stub
    super.onBindView(view);
    TextView title = (TextView)view.findViewById(Android.R.id.title);
    TextView summary = (TextView)view.findViewById(Android.R.id.summary);

    if (title.isEnabled()) {
        title.setTextColor(getContext().getResources().getColor(R.color.gold));
    }
    else {
        title.setTextColor(getContext().getResources().getColor(R.color.gold_disabled));
    }

    if (summary.isEnabled()) {
        summary.setTextColor(getContext().getResources().getColor(R.color.orange));
    }
    else {
        summary.setTextColor(getContext().getResources().getColor(R.color.orange_disabled));
    }
}
3
Android Noob

私は遅れていることを知っています。しかし、まったく同じ問題が発生し、今すぐ修正しました。

リソースファイルのみを使用して修正する方法を見つけました。私はここで答えを見つけました: https://stackoverflow.com/a/17123161/486051

基本的に、res/color /の下にカラーセレクターを作成できます。

注:フォルダーの色が存在しない場合は、作成する必要があります。

私にとって、私はそれをしました:

res\color\primary_text_color_selector.xml(タイトル用)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android" >
    <item Android:state_enabled="false" Android:color="#80000000"/>
    <item Android:color="#FF000000"/>
</selector>

res\color\secondary_text_color_selector.xml(要約用)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android" >
    <item Android:state_enabled="false" Android:color="#80000000"/>
    <item Android:color="#C0000000"/>
</selector>

次に、私の好みのスタイルで、私はしました:

res\values\styles.xml

<!-- Preference Screen Theme --> 
<style name="AppTheme_PreferenceScreenStyle">
    <item name="Android:textColorPrimary">@color/primary_text_color_selector</item>
    <item name="Android:textColorSecondary">@color/secondary_text_color_selector</item>
</style>

SettingsFragmentActivity.Java

public class SettingsFragmentActivity extends PreferenceFragment {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        addPreferencesFromResource(R.xml.settings);
        PreferenceScreen preferenceScreen = getPreferenceScreen();

        mContext = preferenceScreen.getContext();
        mContext.setTheme(R.style.AppTheme_PreferenceScreenStyle);

        ...
    }
}

このように、オプションが無効になっている場合、タイトルと概要はグレー表示されます。

私は同じ問題を抱えており、誰かを助けるかもしれないので、私はこの解決策を共有しています

33
W0rmH0le