当前位置:   article > 正文

PreferenceActiivty应用_preference里实现文本scrollbar

preference里实现文本scrollbar

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代码
  1. <?xml version="1.0"encoding="utf-8"?> 
  2. <LinearLayout 
  3.   xmlns:android="http://schemas.android.com/apk/res/android" 
  4.   android:layout_width="fill_parent" 
  5.   android:layout_height="fill_parent" 
  6.   android:orientation="vertical"> 
  7.     <Button  
  8.         android:layout_width="fill_parent"  
  9.         android:layout_height="wrap_content"  
  10.         android:text="Button"></Button> 
  11.          
  12.     <ListViewandroid:id="@android:id/list" 
  13.         android:layout_width="fill_parent"  
  14.         android:layout_height="wrap_content"></ListView> 
  15. </LinearLayout> 

其中Button为自己需要添加的view, ListView会被R.xml.preference的preferences替换。
注意 其中ListView的android:id="@android:id/list"必须,且不可改变。

2、在Activity的onCreate中添加
Java代码
  1.    public void onCreate(Bundle savedInstanceState) { 
  2.        super.onCreate(savedInstanceState); 
  3.         
  4.        addPreferencesFromResource(R.xml.preference); 
  5.        setContentView(R.layout.set_preference_main); 
  1. public void onCreate(Bundle savedInstanceState) {
  2. super.onCreate(savedInstanceState);
  3. addPreferencesFromResource(R.xml.preference);
  4. setContentView(R.layout.set_preference_main);
  5. }
注意其中 setContentView(R.layout.set_preference_main);表示加载 set_preference_main.xml内容到content中
 
 
3、修改其界面
在style.xml文件中

<?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"

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/152975
推荐阅读
相关标签
  

闽ICP备14008679号