Android8.1 设置-显示下添加控制屏幕显示方向的菜单

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

你可能感兴趣的:(Android8.1 设置-显示下添加控制屏幕显示方向的菜单)