Setting添加选项方法

原生android的settings模块的样子(我的Settings截图有些改动)

这里写图片描述

接下来讨论如何在settings中添加一个类似于wlan/ethernet的模块

  • 布局文件位置(默认位置在packages/apps/Settings/res/xml/dashboard_categories.xml)
<dashboard-categories
 19         xmlns:android="http://schemas.android.com/apk/res/android">
 20
 21     <!-- WIRELESS and NETWORKS -->
 22     <dashboard-category
 23             android:id="@+id/wireless_section"
 24             android:title="@string/header_category_wireless_networks" >
 25
 26         <!-- Wifi -->
 27         <dashboard-tile
 28                 android:id="@+id/wifi_settings"
 29                 android:title="@string/wifi_settings_title"
 30                 android:fragment="com.android.settings.wifi.WifiSettings"
 31                 android:icon="@drawable/ic_settings_wireless"
 32                 />
 33
 34         <!-- Bluetooth -->
 35         <dashboard-tile
 36                 android:id="@+id/bluetooth_settings"
 37                 android:title="@string/bluetooth_settings_title"
 38                 android:fragment="com.android.settings.bluetooth.BluetoothSettings"
 39                 android:icon="@drawable/ic_settings_bluetooth2"
 40                 />
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

settings布局有一套自己的行为方式,使用dashboard-tile,其中默认点击跳转依赖于其中的android:fragmentandroid:fragment="com.android.settings.bluetooth.BluetoothSettings"
当然除了fragment还有另一种实现,类似与启动activity

<!-- Operator hook -->
 81         <dashboard-tile
 82                 android:id="@+id/operator_settings"
 83                 android:fragment="com.android.settings.WirelessSettings" >
 84             <intent android:action="com.android.settings.OPERATOR_APPLICATION_SETTING" />
 85         </dashboard-tile>
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 以上实现了布局的第一步,此时可以看到你添加的模块了,接下来配置整体,使整个流程跑通,接下来注意有两个java文件(packages/apps/Settings/src/com/android/settings)SettingsActivity.java/Settings.java
    Settings.java
public static class EthernetSettingsActivity extends SettingsActivity { /* empty */ }
  
  
  • 1

配置你要用的Activity文件;

SettingsActivity.java

private static final String[] ENTRY_FRAGMENTS = {
 298             WirelessSettings.class.getName(),
 299             WifiSettings.class.getName(),
 300             AdvancedWifiSettings.class.getName(),
 301             SavedAccessPointsWifiSettings.class.getName(),
 302             BluetoothSettings.class.getName(),
 303             /**
 304              * Date: 29 June 2016
 305              * Expand settings with Ethernet settings.
 306              */
 307             EthernetSettings.class.getName(),
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
private int[] SETTINGS_FOR_RESTRICTED = {
 226             R.id.wireless_section,
 227             R.id.wifi_settings,
 228             R.id.bluetooth_settings,
 229             /**
 230              * Date: 29 June 2016
 231              * Expand settings with Ethernet settings.
 232              */
 233             R.id.ethernet_settings,
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

以上分别为绑定fragment和id,完善此处,理论上可以invoke起你定义的fragment了

  • 接下来就是自定义你的frament,Settings中的第二层(fragment层)布局一般也是存在于res/xml中,它使用Preference布局,应用开发很少用到,到Settings里面很多,为了可以保存相应的信息
17 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
 18                   android:title="@string/security_settings_title">
 19
 20     <PreferenceCategory
 21         android:key="security_category"
 22         android:title="@string/lock_settings_title">
 23
 24         <PreferenceScreen
 25             android:key="unlock_set_or_change"
 26             android:title="@string/unlock_set_unlock_launch_picker_title"
 27             android:summary="@string/unlock_set_unlock_mode_none"
 28             android:persistent="false"/>
 29
 30         <PreferenceScreen
 31             android:key="owner_info_settings"
 32             android:fragment="com.android.settings.OwnerInfoSettings"
 33             android:title="@string/owner_info_settings_title"
 34             android:summary="@string/owner_info_settings_summary"/>
 35
 36     </PreferenceCategory>
 37
 38 </PreferenceScreen>
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

类似于这种,至于这中控件的使用方式,你可以google/baidu一下,基本语法很简单,通过此种方式,你就可以建立出自己想要的Settings模块

(function () {('pre.prettyprint code').each(function () { var lines = (this).text().split(\n).length;var numbering = $('
  • ').addClass('pre-numbering').hide(); (this).addClass(hasnumbering).parent().append( numbering); for (i = 1; i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值