最后接触到一个任务,做一个工厂设置,在我看来工厂设置不需要多美观,但是一定要方便修改,添加功能,再就是使用方便,我就想到了用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. iOS UI、Xcode、调试、代码等常见问题总汇(持续更新中)

    以前比较懒,遇到问题解决了就完事了,有些问题再次遇到时忘记了当初是怎么解决的,又要查各种资料来解决.好记忆不如烂笔头,不管简单还是复杂都记一下吧,所以决定写一篇常见问题总结,方便以后查阅.现在有点忙, ...

  2. linux命令详解:jobs命令

    转:http://www.cnblogs.com/lwgdream/p/3413571.html 前言 我们可以将一个程序放到后台执行,这样它就不占用当前终端,我们可以做其他事情.而jobs命令用来查 ...

  3. zookeeper 学习笔记2

    ephemeral 英[ɪˈfemərəl]美[ɪˈfɛmərəl]adj. 朝生暮死; 短暂的,瞬息的; 朝露; 一年生; ZooKeeper Watcher 机制 集群状态监控示例 为了确保集群能 ...

  4. [置顶] kubernetes资源类型--RC和RS

    Replication Controller(RC) RC是K8S中的另一个核心概念,应用托管在K8S后,K8S需要保证应用能够持续运行,这是RC的工作内容. 主要功能 确保pod数量:RC用来管理正 ...

  5. ubuntu配置无密码登录

    1 本地生成ssh公钥和私钥, 2将公钥拷贝到ubuntu上的.ssh/authorized_keys 中

  6. ylbtech-WelfareSystem(福利发放管理系统)-数据库设计

    ylbtech-DatabaseDesgin:ylbtech-WelfareSystem(福利发放管理系统)-数据库设计 1.A,数据库关系图(Database Diagram) 1.B,数据库设计脚 ...

  7. 利用Python,四步掌握机器学习

    为了理解和应用机器学习技术,你需要学习 Python 或者 R.这两者都是与 C.Java.PHP 相类似的编程语言.但是,因为 Python 与 R 都比较年轻,而且更加“远离”CPU,所以它们显得 ...

  8. Android Activity之间经典切换动画

    package com.iteye.androidtoast; import java.util.ArrayList; import java.util.List; import android.ap ...

  9. 通过Navicat for MySQL远程连接的时候报错mysql 1130 的解决方法

    用Navicat连接远程MYSQL,提示如下错误,我以为是自己的防火墙问题,但是关了,依然不行. ERROR 1130: Host '192.168.1.3' is not allowed to co ...

  10. jquery技术揭秘静态工具函数源码重构

    1.调用页面 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...