在 设置/显示 中增加是否一直显示状态栏的选项
2012-12-19 21:04
661 查看
源码:2.3.4
知识点:禁止所有应用使用全屏功能。这个改动很简单,只需要在frameworks\base\core\java\android\view\Window.java 这个类中的 public void setFlags(int flags, int mask) 函数,判断一下 flags 和 mask是不是都是 WindowManager.LayoutParams.FLAG_FULLSCREEN,如果是,则直接退出。
然后正式开始:
一。在 设置/选项中增加一个 CheckBoxPreference,选中的时候状态栏一直存在,不选中的时候正常状态(全屏程序时,会自动隐藏)
过程:
1。packages\apps\Settings\res\xml\display_settings.xml 中增加如下:
[html] view
plaincopy
<CheckBoxPreference
android:key="statusbar_show_setting"
android:title="Always show StatusBar"/>
2。packages\apps\Settings\src\com\android\settings\DisplaySettings.java 中增加如下:
声明一个变量:
// 被充一下,重新做的时候发现忘记写这个了,还要声明一个常量字符串
KEY_STATUSBAR_SHOW = = "statusbar_show_setting"
[java] view
plaincopy
private CheckBoxPreference mStatusBarShow;
在onCreate中初始化变量:
[java] view
plaincopy
mStatusBarShow = (CheckBoxPreference) findPreference(KEY_STATUSBAR_SHOW);
mStatusBarShow.setPersistent(false);
mStatusBarShow.setOnPreferenceClickListener(new CheckBoxPreference.OnPreferenceClickListener(){
@Override
public boolean onPreferenceClick(Preference preference) {
if (mStatusBarShow.isChecked()) {
Settings.System.putInt(getContentResolver(), Settings.System.STATUSBAR_SHOW,1);
}
else {
Settings.System.putInt(getContentResolver(), Settings.System.STATUSBAR_SHOW,0);
}
return false;
}
});
注意这里使用了Settings.System.STATUSBAR_SHOW,这个系统属性是我自已加的,在后面会讲到怎么增加。
在onResume()中增加初始化选中状态的代码(我这里在onResume中调用了另一个函数,所以我写在另一个函数里,但意思一样,就是显示前判断一下是否为选中)
[java] view
plaincopy
mStatusBarShow.setChecked(Settings.System.getInt(
getContentResolver(),
Settings.System.STATUSBAR_SHOW, 0) != 0);
三。在frameworks\base\core\java\android\view\Window.java 中增加判断是否可以全屏的代码,这个类中的函数修改如下:
[java] view
plaincopy
public void setFlags(int flags, int mask) {
if (Settings.System.getInt(mContext.getContentResolver(), Settings.System.STATUSBAR_SHOW,1) == 1) {
if (flags == mask && flags == WindowManager.LayoutParams.FLAG_FULLSCREEN) {
return;
}
}
final WindowManager.LayoutParams attrs = getAttributes();
attrs.flags = (attrs.flags&~mask) | (flags&mask);
mForcedWindowFlags |= mask;
if (mCallback != null) {
mCallback.onWindowAttributesChanged(attrs);
}
}
做到这里,设置/显示这部份的内容就完成了,不过由于我使用了自已增加的一个系统属性来记录是否总是显示状态栏,所以下面写怎么实现这个功能。
一。在frameworks\base\packages\SettingsProvider\res\values\defaults.xml 中增加自定义系统属性的初始值
[html] view
plaincopy
<integer name="def_statusbar_show_setting">1</integer>
二。在frameworks\base\core\java\android\provider\Settings.java 中增加自定义的系统变量
我是在1580多行写入这个:
[javascript] view
plaincopy
public static final String STATUSBAR_SHOW = "statusbar_show_setting";
然后在1772行这个数组中加入这个成员:(要注意,好像有个同名的数组在下面,它是删除的,不要写到那里面去)
[java] view
plaincopy
public static final String[] SETTINGS_TO_BACKUP = {
STATUSBAR_SHOW,
三。在frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\DatabaseHelper.java 中,初始化数据库的时候,加入我们自定义的系统变量。
[java] view
plaincopy
private void loadSystemSettings(SQLiteDatabase db) {
SQLiteStatement stmt = null;
try {
stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
+ " VALUES(?,?);");
// cj
loadIntegerSetting(stmt, Settings.System.STATUSBAR_SHOW,
R.integer.def_statusbar_show_setting);
好了,全部完成。主要是三方面,一个在设置中增加一个选择框,二是在window中增加一个判断是否可以全屏的步骤,三是增加自定义的系统属性。(为了保存设置,下次启动时读取)
知识点:禁止所有应用使用全屏功能。这个改动很简单,只需要在frameworks\base\core\java\android\view\Window.java 这个类中的 public void setFlags(int flags, int mask) 函数,判断一下 flags 和 mask是不是都是 WindowManager.LayoutParams.FLAG_FULLSCREEN,如果是,则直接退出。
然后正式开始:
一。在 设置/选项中增加一个 CheckBoxPreference,选中的时候状态栏一直存在,不选中的时候正常状态(全屏程序时,会自动隐藏)
过程:
1。packages\apps\Settings\res\xml\display_settings.xml 中增加如下:
[html] view
plaincopy
<CheckBoxPreference
android:key="statusbar_show_setting"
android:title="Always show StatusBar"/>
2。packages\apps\Settings\src\com\android\settings\DisplaySettings.java 中增加如下:
声明一个变量:
// 被充一下,重新做的时候发现忘记写这个了,还要声明一个常量字符串
KEY_STATUSBAR_SHOW = = "statusbar_show_setting"
[java] view
plaincopy
private CheckBoxPreference mStatusBarShow;
在onCreate中初始化变量:
[java] view
plaincopy
mStatusBarShow = (CheckBoxPreference) findPreference(KEY_STATUSBAR_SHOW);
mStatusBarShow.setPersistent(false);
mStatusBarShow.setOnPreferenceClickListener(new CheckBoxPreference.OnPreferenceClickListener(){
@Override
public boolean onPreferenceClick(Preference preference) {
if (mStatusBarShow.isChecked()) {
Settings.System.putInt(getContentResolver(), Settings.System.STATUSBAR_SHOW,1);
}
else {
Settings.System.putInt(getContentResolver(), Settings.System.STATUSBAR_SHOW,0);
}
return false;
}
});
注意这里使用了Settings.System.STATUSBAR_SHOW,这个系统属性是我自已加的,在后面会讲到怎么增加。
在onResume()中增加初始化选中状态的代码(我这里在onResume中调用了另一个函数,所以我写在另一个函数里,但意思一样,就是显示前判断一下是否为选中)
[java] view
plaincopy
mStatusBarShow.setChecked(Settings.System.getInt(
getContentResolver(),
Settings.System.STATUSBAR_SHOW, 0) != 0);
三。在frameworks\base\core\java\android\view\Window.java 中增加判断是否可以全屏的代码,这个类中的函数修改如下:
[java] view
plaincopy
public void setFlags(int flags, int mask) {
if (Settings.System.getInt(mContext.getContentResolver(), Settings.System.STATUSBAR_SHOW,1) == 1) {
if (flags == mask && flags == WindowManager.LayoutParams.FLAG_FULLSCREEN) {
return;
}
}
final WindowManager.LayoutParams attrs = getAttributes();
attrs.flags = (attrs.flags&~mask) | (flags&mask);
mForcedWindowFlags |= mask;
if (mCallback != null) {
mCallback.onWindowAttributesChanged(attrs);
}
}
做到这里,设置/显示这部份的内容就完成了,不过由于我使用了自已增加的一个系统属性来记录是否总是显示状态栏,所以下面写怎么实现这个功能。
一。在frameworks\base\packages\SettingsProvider\res\values\defaults.xml 中增加自定义系统属性的初始值
[html] view
plaincopy
<integer name="def_statusbar_show_setting">1</integer>
二。在frameworks\base\core\java\android\provider\Settings.java 中增加自定义的系统变量
我是在1580多行写入这个:
[javascript] view
plaincopy
public static final String STATUSBAR_SHOW = "statusbar_show_setting";
然后在1772行这个数组中加入这个成员:(要注意,好像有个同名的数组在下面,它是删除的,不要写到那里面去)
[java] view
plaincopy
public static final String[] SETTINGS_TO_BACKUP = {
STATUSBAR_SHOW,
三。在frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\DatabaseHelper.java 中,初始化数据库的时候,加入我们自定义的系统变量。
[java] view
plaincopy
private void loadSystemSettings(SQLiteDatabase db) {
SQLiteStatement stmt = null;
try {
stmt = db.compileStatement("INSERT OR IGNORE INTO system(name,value)"
+ " VALUES(?,?);");
// cj
loadIntegerSetting(stmt, Settings.System.STATUSBAR_SHOW,
R.integer.def_statusbar_show_setting);
好了,全部完成。主要是三方面,一个在设置中增加一个选择框,二是在window中增加一个判断是否可以全屏的步骤,三是增加自定义的系统属性。(为了保存设置,下次启动时读取)
相关文章推荐
- 增加工具栏提示&修改程序字体&设置文档标题&控制窗口显示&更新菜单选中/不选中状态
- Android GridView 滑动条设置一直显示状态
- 设置-wifi-高级设置,选择仅充电时保持WLAN开启/睡眠期间不保持wlan的开启状态,手机锁屏休眠几分钟后,再点亮屏幕,wifi一直显示开启状态
- Android GridView 滑动条设置一直显示状态(推荐)
- 五种情况下会刷新控件状态(刷新所有子FWinControls的显示)——从DFM读取数据时、新增加子控件时、重新创建当前控件的句柄时、设置父控件时、显示状态被改变时
- 不用设置selector也能更改View的显示状态
- 网络连接是否正常,不正常跳转去设置网络连接再显示数据
- useHandCursor当鼠标滑过其 buttonMode 属性设置为 true 的 Sprite 时是否显示手指形(手形光标)。
- excel 2013如何设置某几行几列在滚动滚动条时一直显示
- 单纯的使用一张图片,设置为 SplashScreen 的方式我已经使用过了,是有效果的,但是现在我想更进一步的显示出当前程序的状态,如正在初始化设备,这类的状态
- Android4.0中判断WIFI P2P选项是否显示的源码分析
- Activity Indicator View菊花圈圈,勾选 Hides When Stopped 就无需再设置它是否显示
- visual studio 调试状态下,局部变量窗口不显示某些变量的设置
- 动态设置Button、ImageView等组件在不同状态下的背景/前景显示效果。 扩展下的话可以前景/背景的显示效果可以使用网络图片。
- Microsoft Dynamics CRM4.0 控制是否显示 '设置Setting’ 区域
- ajax设置是否显示
- 设置自定义的Edittext的光标是否显示和被选中文字的背景色
- 安卓7.0显示设置界面休眠菜单添加“永不灭屏”选项
- UITableViewCell 设置单元格选中后只显示一个打勾的状态
- android 设置状态栏显示或者隐藏