Android Settings添加选项

在Android中,设置Settings一直都是header+fragment的形式出现。例如设置里面的“时间和日期”项,在settings_hesder.xml中其布局大概是这样:


    

 
  

这是典型的一个设置中的选项,DateTimeSettings.java 继承了Fragment。

     所以要添加一个选项,模仿即可。

     本例中以添加一个“老人模式”选项为例,为连线到一个APP中,即点击此选项将跳转到相对应的APP。只需这个应用的包名和类名,我们就可以把它嵌入到设置Settings中。

     1、首先在settings_hesder.xml中添加选项

     其中,com.hll.haolauncher是目标应用的包名。


     2、在SettingsActivity.java中添加该选项显示

// Show only these settings for restricted users
private int[] SETTINGS_FOR_RESTRICTED = {
            R.id.wireless_section,
            R.id.wifi_settings,
			 ......
            R.id.aged_mode_setting_new
    };

      3、找到updateHeaderList方法,更新Settings选项的状态,代码大概如下: 
  

private void updateHeaderList(List
target) { PDebug.Start("updateHeaderList"); int i = 0; mHeaderIndexMap.clear(); while (i < target.size()) { Header header = target.get(i); int id = (int) header.id; if (id == R.id.bluetooth_settings) { if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)) { target.remove(i); } } else if (id == R.id.battery_settings) { if (!mBatteryPresent) { target.remove(i); } } else if(id==R.id.aged_mode_setting) { if (enable){ target.remove(header); } } PDebug.End("updateHeaderList"); }
 一些选项的显示或隐藏将被写到这里面。


       4、设置Settings中的点击事件被写在onHeaderClick方法中,如下:

if (header.id ==R.id.aged_mode_setting_new)
	       {
	         Intent mIntent = new Intent();
	         mIntent.setClassName("com.hll.haolauncher","com.hll.elauncher.StartActivity");
		  mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
	         startActivity(mIntent);
             return;
        }

过程基本上是如此,由于笔者手上的代码不是原生系统的源码,不能把多一些的源码贴上,其中可能与原生代码有些出入,但大同小异,大都数地方还是相同的。




你可能感兴趣的:(android)