赞
踩
1.修改背景界面显示
系统设置中用到了Preference(偏好),使用google默认的PreferenceActiivty实现了该功能,但都是默认的背景和字体。怎么才改变它们的样式呢?PreferenceActivity继承ListActivity,所以本质上它是列表,所以可以通过得到它的ListView来设置背景或其它样式,如:
getListView().setBackgroundColor(Color.BLUE);
或
Drawable dra = getResources().getDrawable(R.drawable.tab_bg);
this.getListView().setSelector(dra);
this.getListView().setBackgroundResource(R.drawable.home_bg);
背景颜色是变了,当时当你滚动这个列表项时候,是不是会发现后面好像还有黑色背景。那怎么去掉这个黑色背景呢?只需要改变它的缓存色为透明即可,如:
getListView().setCacheColorHint(Color.TRANSPARENT);
复制代码
这样就解决了滚动黑屏的问题了。其实还有一个地方的样式不知道怎么修改。就是PreferenceCategory(偏好分类)的样式怎么修改呢?我参考了其它人的一些观点,发现都没有生效。最后看了PreferenceCategory的源码,发现了该类的注释:Used to group{@link Preference} objects * and provide a disabled title above the group.这说明这上面标题是disabled的。那怎么才可以修改呢?最后经过测试,发现自定义一个PrefereceCategory可以达到自己的要求,java代码如下:
package com.rlht.enforce.widget;
import android.content.Context;
import android.graphics.Color;
import android.graphics.Typeface;
import android.preference.PreferenceCategory;
import android.util.AttributeSet;
import android.view.View;
import android.widget.TextView;
/**
* 自定义设置Preference的category。google默认的Category无法提供修改样式的接口
* @author Zhuhanshan
*
*/
public class MyPreferenceCategory extends PreferenceCategory{
public MyPreferenceCategory(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onBindView(View view) {
super.onBindView(view);
view.setBackgroundColor(Color.GRAY);
if(view instanceof TextView){
TextView tv = (TextView) view;
tv.setTextSize(18);
}
}
}
然后在peference.xml中使用这个自定义组件即可,xml如下:
<com.rlht.enforce.widget.MyPreferenceCategory android:title="@string/base_setting">
<EditTextPreference android:key="username"
android:defaultValue="@null"
android:title="@string/username"/>
<EditTextPreference android:key="password"
android:defaultValue="@null"
android:title="@string/password" />
</com.rlht.enforce.widget.MyPreferenceCategory>
2.在PreferenceActiivty中添加其他控件
在一个集成PreferenceActivity的类中,可以通过
addPreferencesFromResource(R.xml.preference);
加载preference控件,现在想在PreferenceActivity添加一个Button或是一个checkBox如何办到呢,
1、新建一个Layout,文件名为set_preference_main.xml,文件内容如下
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Button"></Button> <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="wrap_content"></ListView> </LinearLayout>
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- addPreferencesFromResource(R.xml.preference);
- setContentView(R.layout.set_preference_main);
- }
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CustomWindowTitleBackground">
<item name="android:background">@drawable/skinpic_green</item>
</style>
<style name="CustomWindowTitleText" >
<item name="android:textSize">20dip</item>
<item name="android:textColor">#FFffffff</item>
<item name="android:paddingLeft">10dp</item>
</style>
<style name="customCheckBox" parent="@android:style/Widget.CompoundButton.CheckBox">
<item name="android:button">@drawable/selector_checkbox</item>
</style>
<!-- <style name="customRadioButton" parent="@android:style/Widget.CompoundButton.RadioButton">-->
<!-- <item name="android:button">@drawable/selector_checkbox</item>-->
<!-- </style>-->
<style name="customListView" parent="@android:style/Widget.ListView">
<item name="android:scrollbarSize">10.0dip</item>
<item name="android:scrollbarThumbVertical">@drawable/scrollbar_handle_vertical</item>
<item name="android:listSelector">@drawable/selector_list</item>
<item name="android:cacheColorHint">#00000000</item>
</style>
<!-- <style name="customEditText" parent="@android:style/Widget.EditText">-->
<!-- <item name="android:background">@drawable/selector_edit_text</item>-->
<!-- </style>-->
<!-- -->
<!-- <style name="customAutoCompleteTextView" parent="@android:style/Widget.AutoCompleteTextView">-->
<!-- <item name="android:background">@drawable/selector_edit_text</item>-->
<!-- </style>-->
<!-- -->
<!-- <style name="customExpandableListView" parent="@android:style/Widget.ExpandableListView">-->
<!-- <item name="android:scrollbarSize">10.0dip</item>-->
<!-- <item name="android:scrollbarThumbVertical">@drawable/scrollbar_handle_vertical</item>-->
<!-- <item name="android:persistentDrawingCache">all</item>-->
<!-- <item name="android:alwaysDrawnWithCache">true</item>-->
<!-- <item name="android:listSelector">@drawable/selector_list</item>-->
<!-- <item name="android:scrollingCache">true</item>-->
<!-- <item name="android:cacheColorHint">@color/window_bg</item>-->
<!-- <item name="android:childDivider">@drawable/shape_line</item>-->
<!-- <item name="android:divider">@null</item>-->
<!-- <item name="android:dividerHeight">1.0px</item>-->
<!-- </style>-->
<style name="Default.NoTitleBar" parent="@android:style/Theme.Light.NoTitleBar">
<item name="android:textColorPrimaryInverse">@android:color/black</item>
<item name="android:windowBackground">@color/window_bg</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowTitleSize">42.0dip</item>
<item name="android:windowTitleStyle">@style/CustomWindowTitleText</item>
<item name="android:windowTitleBackgroundStyle">@style/CustomWindowTitleBackground</item>
<item name="android:checkboxStyle">@style/customCheckBox</item>
<item name="android:listViewStyle">@style/customListView</item>
<!-- <item name="android:autoCompleteTextViewStyle">@style/customAutoCompleteTextView</item>-->
<!-- <item name="android:editTextStyle">@style/customEditText</item>-->
<!-- <item name="android:expandableListViewStyle">@style/customExpandableListView</item>-->
<!-- <item name="android:radioButtonStyle">@style/customRadioButton</item>-->
</style>
<style name="Default" parent="@style/Default.NoTitleBar">
<item name="android:windowNoTitle">false</item>
</style>
</resources>
<!-- item name=android:textColorPrimaryInverse preference标题文本颜色 -->
<!-- item name="android:windowBackground" 窗体背景 -->
<!-- item name=android:windowTitleBackgroundStyle 窗体标题背景风格-->
<!-- item name="android:windowTitleSize" 窗体标题栏高度-->
<!-- item name="android:listViewStyle" preference是一个LISTVIEW,这里设置该风格-->
<!-- item name="android:textColorPrimary" preference一级文本颜色-->
<!-- item name="android:textColorSecondary" preference二级文本颜色-->
并在AndroidManifest.xml文件的对应activity中添加 android:theme="@style/Default"
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。