zoukankan      html  css  js  c++  java
  • 用PreferenceActivity做一个标准的设置界面

    最后接触到一个任务,做一个工厂设置,在我看来工厂设置不需要多美观,但是一定要方便修改,添加功能,再就是使用方便,我就想到了用PreferenceActivity,android系统的settings就是由它主导的,所以功能强大,使用方便。以平板为例,不需要复杂的设计就可以得到一个settings那样,左边是功能列表,右边是某一功能的具体选项。

    public class FactorySettings extends PreferenceActivity{
    public void onBuildHeaders(List<Header> target){
            this.loadHeadersFromResource(R.xml.activity_factory_settings, target);
        }
    }

    代码部分只需要在onBuildHeaders中添加一句loadHeadersFromResource就可以了。R.xml.activity_factory_settings这个资源文件定义在你代码res/xml/下

    <?xml version="1.0" encoding="utf-8"?>
    <preference-headers xmlns:android="http://schemas.android.com/apk/res/android" >
    
        <header android:fragment="com.example.RadioZoneSettings"
            android:title="@string/radio_zone" >
            <!--android:summary="@string/radio_zone_summary" -->
        </header> 
        
        <header android:fragment="com.example.TVSettings"
            android:title="@string/tv"
             >
             <!-- android:summary="@string/tv_summary" -->
        </header> 
        
        <header android:fragment="com.example.LogoSettings"
            android:title="@string/logo"
            >
            <!-- android:summary="@string/logo_summary"  -->
        </header> 
        
        <header android:fragment="com.example.CarTypeSettings"
            android:title="@string/cartype"
             >
             <!-- android:summary="@string/cartype_summary" -->
        </header> 
        
        <header android:fragment="com.example.ApplicationSettings"
            android:title="@string/application"
             >
             <!-- android:summary="@string/application_summary" -->
        </header> 
        
        <header android:fragment="com.example.DevelopmentSettings"
            android:title="@string/development"
             >
             <!-- android:summary="@string/development_summary" -->
        </header> 
    
    </preference-headers>

    每一对<header></header>中包含一个条目,显示在左边屏上,android:fragment指定这个条目选中时右边显示的fragment,以radiozone为例,我要在这个RadioZoneSettings中显示各个国家或者地区的频段,一个国家或者地区一行,所以这个fragment这用的是ListFragment,这的内部是一个ListView,这用这个listview显示数据供用户选择。我语言表达能力差,直接上代码吧

    public class RadioZoneSettings extends ListFragment{
    
    
        protected ArrayAdapter<String> mAdapter;
        protected String mData[];
       public void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated constructor stub
            super.onCreate(savedInstanceState);
            mData = getActivity().getResources().getStringArray(R.array.contries);
            mAdapter = new ArrayAdapter<String>(getActivity(),
                    android.R.layout.simple_list_item_single_choice,mData);
    
        }
    
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            View view = inflater.inflate(R.layout.radio_tv_type, null);
            setListAdapter(mAdapter);
            return view;
        }
    
        public void onActivityCreated(Bundle savedInstanceState) {
             super.onActivityCreated(savedInstanceState);
        //在这里恢复上次设定的值
    } public void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); } }

    R.array.contries是我在res/values/strings.xml中定义的一个string-array

        <string-array name="contries">
            <item name="title_china">中国</item>
            <item name="titile_Europe">欧洲</item>
            <item name="titile_usa1">美国</item>
            <item name="titile_usa2">日本</item>
            <item name="titile_euro1">俄罗斯</item>
        </string-array>

    R.layout.radio_tv_type是整个ListFragment的布局文件,其实很简单,就一个ListView

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
    
      <ListView
        android:id="@id/android:list"
        android:choiceMode="singleChoice"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" 
        android:divider="#2f333a"
        android:dividerHeight="2dp"
        android:drawSelectorOnTop="false" />
    
    </LinearLayout>

    listview中每一个条目也是要定义一个布局文件的,本次我没有自己定义,而是使用系统提供的R.layout.simple_list_item_single_choice。

    有了这些程序就可以跑起来了。其它的做法和它原理是一样的,只有过有的选项不需要用listview展示内容和选项,就需要用其它类型的fragment了,我在选择车标这个选项就碰到这问题,就是它虽然也是用listview,但是不像这里举的例子那么简单了,需要在每一项前面添加一个车的图标文件,难点有三个,一是那么多的图片,怎么添加,二是没有使用的adapter满足我自定义的item,只能自己写adapter了。还有就是如何实现单选,怎么管理状态。下一次再说。

  • 相关阅读:
    QSetting
    类中函数前、后、参数加const
    delete指针
    自定义数组类
    手动调用构造函数
    windows和linux平台下的通用时间测试函数
    多线程编程学习
    Android 利用ImageView显示图片
    特征描述算子-sift
    opencv边界扩展
  • 原文地址:https://www.cnblogs.com/gelandesprung/p/4231980.html
Copyright © 2011-2022 走看看