用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了。还有就是如何实现单选,怎么管理状态。下一次再说。

时间: 2024-08-14 21:40:24

用PreferenceActivity做一个标准的设置界面的相关文章

安卓入门:加深ListView学习,做一个简单的聊天界面

1,一个简单的聊天窗口也是ListView显示的 首先是Main.xml是要建立一个列ListView,下面是输入框和发送按钮 然后是单独的消息列表项的界面 接着就是要建立一个自定义的适配器,搭建列表项和ListView之间的桥梁 具体的代码如下(注意LineraLayout布局,没说方向的时候默认是水平方向的,还有关于layout_weight权重的理解): activity_main.xml <?xml version="1.0" encoding="utf-8&q

.net,mvc使用bootstrap做一个标准后台

今天准备搭一个公用后台,使用bootstrap,方便今后开发,顺便mark一下 后期列表页将使用kendo-ui,增强后台的效果 下面是代码... login页面 1 @{ 2 Layout = null; 3 } 4 5 <!DOCTYPE html> 6 7 <html lang="zh-cn"> 8 <head> 9 <meta charset="utf-8"> 10 <meta http-equiv=&q

【安卓笔记】高速的发展设置界面-----PreferenceActivity

通常app都会有一个设置界面,例如以下: 通常做法是自定义布局,然后在代码里面加入响应函数,并将结果保存到Sharedpreferences中. android给我们提供了PreferenceActivity来简化开发设置界面. 你仅仅需这样做: 1.创建一个类继承PreferenceActivity,并导入设置界面布局: package com.example.preferenceactivitydemo1; import android.os.Bundle; import android.p

【安卓笔记】快速开发设置界面-----PreferenceActivity

通常app都会有一个设置界面,如下: 通常做法是自己定义布局,然后在代码里面添加响应函数,并将结果保存到Sharedpreferences中. android给我们提供了PreferenceActivity来简化开发设置界面. 你只需这样做: 1.创建一个类继承PreferenceActivity,并导入设置界面布局: package com.example.preferenceactivitydemo1; import android.os.Bundle; import android.pre

做一个具有图片读入,写出,灰度化,黑白化的有图形界面的小软件

我们这一次的树莓基础的作业是做一个做一个具有图片读入,写出,灰度化,黑白化的小软件,我采用的是java,因为java有大量性能非常好的接口可用,譬如在图片这块,ImageIO,BufferedImage都是非常好用的,而我这一次作业也是使用这两个包. 首先我们要解决的是界面,界面可以直接用JFrame来打, 非常简单,我的界面有一个菜单栏和一个图片显示区,菜单栏有三个选项:文件,转换,保存,文件菜单有一个子菜单:打开文件,转换菜单有两个子菜单:变成灰度和变成黑白,保存菜单有三个子菜单:jpg,

用IOS做一个界面切换的效果(登录界面和注册界面和找回密码界面的切换)(用封装好的lable和textf创建界面)

创建一个类封装uitextfield和UIlabel (源代码.m文件) #import "TLView.h" @interface TLView () { UILabel *_desLabel;    //左边的lable UITextField *_textField;//右边的 } @end @implementation TLView //改写父类的初始化方法,处理相同的性能 - (id)initWithFrame:(CGRect)frame { self = [super i

使用ArcMap做一个1:5000标准分幅图并编号

实现这个project,十进制度.渔网工具.Excel if/Text函数.挂接Excel表.空间连接.投影这些知识是必须的.看懂本篇博文也就意味着大概掌握了以上知识. 坐标数据设置与编号标准依据<国家基本比例尺地形图分幅和编号>GB/T 13989-2012. 有人问起,网络未寻得现成方法,自行根据GB/T 13989-2012试制,欢迎指正各种错误. 一.数据确定 区域范围:目的是做一个覆盖海南岛的1:5000比例尺标准分幅图.根据1:1000000地形图编号标准,海南岛主体所在图幅的编号

做一个好看的可翻转登录注册界面

做一个好看的登录注册界面 前言 最近在尝试做网盘,使用的技术栈大概是 .net core + MVC + Mysql + Layui,主要目的是通过这个具体的项目,熟悉熟悉 .net core 开发,.net 的未来就是他了! 我的设想 在完成后端的一部分 建设 之后,我把目光投向了前端--登陆注册,由于这个网盘是用来试手的个人项目,我并不想用曾经用过的制作方式--登录和注册界面分开来做.我试图讲这两个功能合到一个页面上,并且以一种不是很 "Low" 的方式呈现出来. 你也可以认为我只

使用react-native做一个简单的应用-03欢迎界面

Android和iOS的欢迎界面是不一样的,在iOS中有一个默认的欢迎界面,而Android则需要自己写.因此我就分开说一下这两个平台的欢迎界面的搭建.下面先看一下实现效果: Android: iOS: 一.iOS欢迎界面的实现: 它的实现跟React-Native是没有半毛钱的关系的.你需要在Xcode中去实现这个界面.也就是去设计LaunchScreen.xib,如图所示: 由于不是iOS的开发人员,对iOS也不是很懂,所以我就拖拖拽拽,最后将图片设置为居中就行啦. 二.Android欢迎界