由于分辨率的原因,android4.0默认的存在的UI分辨率是不能满足我们需求的。这就会有一种需求,按照我们屏幕的分辨率修改UI的定制显示。
这里首先声明bluetoothUI使用Preference来动态加载所有的bluetooh项,如果对Preference不是很熟,可以先简单了解一下。
附上我当时学习用的而一个preference的帖子,个人认为还不错。
http://blog.csdn.net/plussoft/article/details/9993759
http://blog.csdn.net/chenzheng_java/article/details/6285966
接下来继续我们的学习:首先我们先看一下谷歌原生的bluetoothUI如下图:
这个和我们对比比较明显的就是分辨率越低的display,它显示actionbar所占的屏幕大小会越大。这回严重影响我们的操作。
所以我们要做的第一条就是要把actionbar移除掉。(actionbar的移除是在themes.xml文件中奥)
然后开始把具体的代码部分在packages/app/Settings/src/com/android/bluetooth/BluetoothSettings.java
@Override
void addPreferencesForActivity() {
addPreferencesFromResource(R.xml.bluetooth_settings);
Activity activity = getActivity();
if(activity.getActionBar() != null){
Switch actionBarSwitch = new Switch(activity);
if (activity instanceof PreferenceActivity) {
PreferenceActivity preferenceActivity = (PreferenceActivity) activity;
if (preferenceActivity.onIsHidingHeaders() || !preferenceActivity.onIsMultiPane()) {
final int padding = activity.getResources().getDimensionPixelSize(
R.dimen.action_bar_switch_padding);
actionBarSwitch.setPadding(0, 0, padding, 0);
activity.getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM,
ActionBar.DISPLAY_SHOW_CUSTOM);
activity.getActionBar().setCustomView(actionBarSwitch, new ActionBar.LayoutParams(
ActionBar.LayoutParams.WRAP_CONTENT,
ActionBar.LayoutParams.WRAP_CONTENT,
Gravity.CENTER_VERTICAL | Gravity.RIGHT));
}
}
mBluetoothEnabler = new BluetoothEnabler(activity, actionBarSwitch);
}
setHasOptionsMenu(true);
}
把actionbar拿掉后,bluetoothsettings.java是编译不过的,因为蓝牙的switch开关是放在actionbar上的,所以把action拿掉后需要给上面加一个判断就可以了。
但是这样就会存在下一个问题,就是没有蓝牙的开关了,那接下来我们要做的就是重新加一个新的开关但不在actionbar上。
代码如下:
else
{
checkboxpreference = (CheckBoxPreference) findPreference("checkbox_add");
mBluetoothEnabler = new BluetoothEnabler(activity,checkboxpreference);
}
这个else是接在上一段代码和if是并列的奥。
这里面有三个地方需要注意。
1.我已经修改完bluetooth_settings.xml。谷歌默认的bluetooth_settings.xml实际并没有任何preference或者控件。所以我把checkboxpreference加上,代码如下:
android:key= "checkbox_screen" >
<CheckBoxPreference
android:key="checkbox_add"
android:summaryOff="Turn off Bluetooth"
android:summaryOn="Turn on Bluetooth"
android:title="bluetooth"
></CheckBoxPreference>
添加如上的xml就会在跳转大bluetooth界面时出现打开和关闭的checkboxpreference的画面。(如果你对checkboxpreference和checkbox分不清,可以百度一下奥)
2.你加上这个视窗开关了,发现你不管怎么点,bluetooth并没有进行开关的操作。对的,因为你并没有进行checkboxPreference和bluetooth enble的关联。
在BluetoothEnabler.java是需要重写方法的,这个我们放到后面在去详细讲解。
3.第三个地方就是setHasOptionsMenu(true);这一句代码。这个是使能menubutton是否有效的,我们的search for device、rename、timeout time和show reviced files这四条功能都是放到menu里去做的奥。
既然这里已经改完,接下来要改的就是可见性的UI了。
待续