最后接触到一个任务,做一个工厂设置,在我看来工厂设置不需要多美观,但是一定要方便修改,添加功能,再就是使用方便,我就想到了用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了。还有就是如何实现单选,怎么管理状态。下一次再说。

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

  1. 假设做一个精美的Login界面(攻克了一EditText自带clear的功能,相似iphone的UITextField)

    先上图:     XML为: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ...

  2. 【OpenWRT之旅】如何自定义一个配置文件的设置界面

    作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1. 引言 OpenWRT中采用LuCI作为它的Web interface界面框架,采用Lua语言.在本文中将以 ...

  3. Android一个大众化的设置界面

    布局代码如下: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:an ...

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

    今天准备搭一个公用后台,使用bootstrap,方便今后开发,顺便mark一下 后期列表页将使用kendo-ui,增强后台的效果 下面是代码... login页面 @{ Layout = null; ...

  5. 用 JS 做一个数独游戏(二)

    用 JS 做一个数独游戏(二) 在 上一篇博客 中,我们通过 Node 运行了我们的 JavaScript 代码,在控制台中打印出来生成好的数独终盘.为了让我们的数独游戏能有良好的体验,这篇博客将会为 ...

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

    通常app都会有一个设置界面,例如以下: 通常做法是自定义布局,然后在代码里面加入响应函数,并将结果保存到Sharedpreferences中. android给我们提供了PreferenceActi ...

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

    实现这个project,十进制度.渔网工具.Excel if/Text函数.挂接Excel表.空间连接.投影这些知识是必须的.看懂本篇博文也就意味着大概掌握了以上知识. 坐标数据设置与编号标准依据&l ...

  8. Android UI组件----用相对布局RelativeLayout做一个登陆界面

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  9. 致敬学长!J20航模遥控器开源项目计划【开局篇】 | 先做一个开机界面 | MATLAB图像二值化 | Img2Lcd图片取模 | OLED显示图片

    我们的开源宗旨:自由 协调 开放 合作 共享 拥抱开源,丰富国内开源生态,开展多人运动,欢迎加入我们哈~ 和一群志同道合的人,做自己所热爱的事! 项目开源地址:https://github.com/C ...

随机推荐

  1. 在ArcGIS Desktop中进行三参数或七参数精确投影转换

    转自 在ArcGIS Desktop中进行三参数或七参数精确投影转换     ArcGIS中定义的投影转换方法,在对数据的空间信息要求较高的工程中往往不能适用,有比较明显的偏差.在项目的前期数据准备工 ...

  2. CSS3快速浏览器前缀的方法

    在做前端开发时,经常要在css3的属性前加上各浏览器厂商的前缀:,如 Chrome(谷歌浏览器) :-webkit- Safari(苹果浏览器) :-webkit- Firefox(火狐浏览器) :- ...

  3. Glide使用详解(一)

    一. 下载 在build.gradle中添加依赖: compile 'com.github.bumptech.glide:glide:3.7.0' 需要support-v4库的支持,如果你的项目没有s ...

  4. JAVA常见算法题(十五)

    package com.xiaowu.demo; /** * * 输入三个整数x,y,z,请把这三个数由小到大输出. * * @author WQ * */ public class Demo15 { ...

  5. oracle sql试题

    转载 数据准备 create table student(  sno varchar2(10) primary key,  sname varchar2(20),  sage number(3),  ...

  6. Angularjs中的拦截器 (卧槽,好牛逼)

    $httpAngularJS 的 $http 服务允许我们通过发送 HTTP 请求方式与后台进行通信.在某些情况下,我们希望可以俘获所有的请求,并且在将其发送到服务端之前进行操作.还有一些情况是,我们 ...

  7. ElasticSearch高级查询

    ElasticSearch高级查询 https://www.imooc.com/video/15759/0 ElasticSearch查询 1,子条件查询:特定字段查询所指特定值 1.1query c ...

  8. es创建索引的格式,并初始化数据

    es创建索引的格式,并初始化数据 学习了:https://www.imooc.com/video/15759 1, 创建格式 POST 127.0.0.1:9200/book/novel/_mappi ...

  9. 倍福TwinCAT(贝福Beckhoff)基础教程5.1 TwinCAT如何执行系统命令

    TwinCAT提供了一系列的执行Windows系统命令的方法 Name 描述 NT_Shutdown 关机操作系统 NT_AbortShutdown 取消关机操作系统命令 NT_Reboot 重启操作 ...

  10. Android学习(二十)Notification通知栏

    一.通知栏的内容 1.图标 2.标题 3.内容 4.时间 5.点击后的相应 二.如何实现通知栏 1.获取NotificationManager. 2.显示通知栏:notify(id,notificat ...