Android8.1 设置-显示下添加控制屏幕显示方向的菜单
参考博文:在Android的 设置->显示 中增加控制屏幕旋转方向的选项
参考的博文是在Android5.1实现的,所以是5.1的早期版本的话,直接参考他的博文做就好了。
背景:
但是我的sdk是Android8.1的,由于settings里的一些框架有电不一样了,特别是DisplaySettings.java里的代码处理方式跟5.1版本完全不一样了。
由于本人平时注意是搞Linux底层和驱动的,很少搞Java应用层的东西,但是客户提了这个要求,咱们硬着头皮也得搞呀,对于之前没搞过的还是有点难度的。但是对于熟悉Android Java的工程师来说,应该是是比较简单了。客户自己是开发app,我一直不理解为啥客户自己不去搞这个,我已经在系统代码里给第三方APP开放的su权限,客户在自己的app里应该可以处理的。
实现:
第一部分:资源文件配置,把菜单显示出来:
配置string的质资源文件:packages/apps/Settings/res/values/strings.xml
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -30,6 +30,15 @@
Switch
+
+ Screen rotate
+
+ Control screen orientation
+
配置选项名称以及选项值:packages/apps/Settings/res/values/arrays.xml
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
old mode 100644
new mode 100755
index 5e1a468..a2cc007
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -136,6 +136,27 @@
- 1800000
+
+
+ - 0
+ - 90
+ - 180
+ - 270
+
+
+
+
+
+ - 0
+
+ - 90
+
+ - 180
+
+ - 270
+
+
+
- Small
- Default
中文字符串我没有配置,有需要的按照推荐的参考博文操作即可。
在display里显示:packages/apps/Settings/res/xml/display_settings.xml
--- a/res/xml/display_settings.xml
+++ b/res/xml/display_settings.xml
@@ -27,6 +27,15 @@
+
这样添加之后,ui上就会有显示了,在settings里mm之后,直接adb push到系统后重启,你会发现settings---display下已经有Screen rotate这个菜单选项了。
第二部分:
主要是Java代码实现。添加src/com/android/settings/display/AwScreenPreferenceController.java文件。
执行部分代码:
public boolean onPreferenceChange(Preference preference, Object newValue) {
int value = Integer.parseInt((String) newValue);
Log.w(LOG_TAG, " ---------value =" + value);
setScreenRotation(value);
return true;
}
public void setScreenRotation(int value) {
int rotation = 0;
if (value == 0) {
rotation = Surface.ROTATION_0;
Log.w(LOG_TAG, " ---------rotation =" + rotation);
} else if (value == 90) {
rotation = Surface.ROTATION_90;
} else if (value == 180) {
rotation = Surface.ROTATION_180;
} else if (value == 270) {
rotation = Surface.ROTATION_270;
}
Settings.System.putInt(mContext.getContentResolver(), Settings.System.USER_ROTATION, rotation);
}
然后注册这个Java文件到DisplaySettings.java
import com.android.settings.display.AwColorTemperaturePreferenceController;
+import com.android.settings.display.AwScreenPreferenceController;
import com.android.settings.display.BrightnessLevelPreferenceController;
import com.android.settings.display.CameraGesturePreferenceController;
@@ -114,6 +115,7 @@ public class DisplaySettings extends DashboardFragment {
controllers.add(new BrightnessLevelPreferenceController(context, lifecycle));
controllers.add(new ColorModePreferenceController(context));
controllers.add(new AwHdmiPreferenceController(context));
+ controllers.add(new AwScreenPreferenceController(context));
然后编译运行,搞定,一切OK。
Java源码我已经上传,下载链接:https://download.csdn.net/download/coolchen66/12292268