Android偏好设置摘要默认颜色?

时间:2010-11-02 20:46:43

标签: android colors preferences summary

我已经在真正的手机中安装了我的应用程序,即使在模拟器中所有的文本也是如此 偏好摘要似乎是相同颜色,在真实手机中颜色不同(某种蓝色......但我想这取决于手机的型号)。

如何将此颜色设置为自定义首选项组件? (我已经实现了自己的搜索栏,其摘要文本颜色与所有其他组件文本颜色不同......)。

谢谢!

6 个答案:

答案 0 :(得分:4)

Preference pUpdate = findPreference("sys_setting_update");
pUpdate.setSummary(Html.fromHtml("<font color=\"#B0C4DE\">This is content</font>"));

Html.fromHtml("<font color=\"#B0C4DE\">This is content</font>")用于setSummary

答案 1 :(得分:3)

我找到了一种方法来检索运行应用程序的Android设备所使用的默认颜色。有一点很棘手,并且需要检索从您的活动的另一个“首选项摘要”视图中显示的颜色并存储它在运行时。

然后您可以在其他偏好的其他视图中使用相同的颜色代码,确保您将始终获得Android分配给标准首选项的相同颜色代码。我是这样做的:

我的偏好设施活动有一个普通的CheckBoxPreference,用于激活或停用服务。我已经扩展了CheckBoxPreference,如下所示,所以我的扩展在rutime中检索Android最终给出的CheckBoxPreference摘要的默认颜色:

public class MyCheckBoxPreference extends android.preference.CheckBoxPreference {

    private static int sSummaryColor = Color.WHITE;
    private static boolean sInitialized = false;

    public MyCheckBoxPreference(Context context) {
        super(context);
    }

    public MyCheckBoxPreference(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyCheckBoxPreference(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override    
    public void onBindView(View view) {
        super.onBindView(view);
        if (!sInitialized) {
            sSummaryColor = getSummaryColor(view);
            sInitialized = true;
        }
    }

    private int getSummaryColor(View view) {

       int color = Color.WHITE;

        // Gets the color android gave to the summary by default
        TextView summaryView = (TextView) view.findViewById(android.R.id.summary); 
        if (summaryView != null) {
           ColorStateList list = summaryView.getTextColors();
            if (list != null) {
                color = list.getDefaultColor();
            }
        }
        return color;
    }

    public static int getSummaryColor() {
        return sSummaryColor;
    }
}

在我的preferences.xml中,我将该首选项实例化为MyCheckBoxPreference而不仅仅是CheckBoxPreference:

<org.yourpackage.MyCheckBoxPreference
                android:title="@string/preference_title_activate" 
                android:defaultValue="false" 
                android:summary="@string/preference_summary_activate_off" 
                android:summaryOff="@string/preference_summary_activate_off"
                android:key="preference_activate">
</org.yourpackage.MyCheckBoxPreference>

在使用MyCheckBoxPreference.getSummaryColor()检索摘要颜色之前,必须对MyCheckBoxPreference进行一次实例化。

现在您可以从onBindView(View)设置其他自定义首选项的颜色:

public class MyCustmizedPreference extends Preference {
    public MyCustmizedPreference (Context context) {
        super(context);
        setLayoutResource(R.layout.my_customized_preference);
    }

    @Override
    public void onBindView(View view) {
        super.onBindView(view);

        TextView summaryView = (TextView) view.findViewById(android.R.id.summary);
        if (summaryView != null) {
            summaryView.setTextColor(MyCheckBoxPreference.getSummaryColor());
        }        
    }
}

它实际上可以在三星Galaxy S下运行。我还测试过它在仿真器下没有破坏任何东西。

答案 2 :(得分:2)

我找到了这些:android:textAppearance="?android:attr/textAppearanceLarge" 并且android:textAppearance="?android:attr/textAppearanceSmall" 似乎可以解决问题。

答案 3 :(得分:2)

三星Galaxy S手机拥有自己的首选项布局,并为摘要行指定了文本颜色。即使指定了TextAppearance.Small,布局的textColor属性也会覆盖文本外观。

答案 4 :(得分:1)

我不认为这是可能的。我可以更改背景颜色和标题文字颜色,但不能更改摘要颜色。

背景:

getListView().setBackgroundColor(Color.TRANSPARENT);

标题文字:

Preference yourpreference = findPreference("yourpreference");
TextView tv = (TextView)yourpreference.getView(null, getListView());
tv.setTextColor(...);

抱歉,我忍不住了......

答案 5 :(得分:0)

我遇到了同样的问题,而且我一直在试验我的自定义搜索栏偏好风格。最后onCreateView seekBarPreference.java方法中的这些行以默认文字颜色显示偏好摘要:

TextView summaryText = new TextView(getContext());
summaryText.setText(getSummary());
summaryText.setTextAppearance(getContext(), android.R.style.TextAppearance_Small);

我在preference_screen.xml

上使用它
<com.asdasf.SeekBarPreferencias
        android:key="@string/pref_seekBar_distance_key"
        android:id="@+id/mySeekBarPreference"
        android:title="@string/pref_seekBar_distance_title"
        android:summary="@string/pref_seekBar_distance_summary"        
        android:max="50"
        android:defaultValue="12"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

我希望它会有用......(而且我已经写好了我的第一个答案) 方面!