底部的导航按钮有一个非常奇怪的问题。由于我们未知的原因,我们的设备在设备属性列表中设置了ro.sf.hwrotation=270
。有了此设置,一切都将按预期的肖像模式工作(启动徽标/动画,系统活动,我们的应用程序...)。您可能已经猜到了,Miracast显示无法正常旋转,这是行不通的。
因此,我决定更仔细地研究它,并且第一步是将该属性更改为ro.sf.hwrotation=0
。幸运的是,这已修复了Miracast问题,所有系统活动仍处于纵向状态,除了这个奇怪的问题,我们的应用程序也是如此:
按钮不见了。再次旋转到横向时,除了按钮(现在甚至粘在右侧)之外,其他所有东西都应该保持原样:
有人可以提示我去哪里看看吗?我在日志中看不到任何可疑的东西,没有崩溃或异常。
按钮很可能也以某种方式怪异地旋转了,但是又为什么只按钮?有针对他们的东西吗?如果恢复设置,一切恢复正常。
答案 0 :(得分:0)
尽管这几乎不是通用解决方案,但将来可能会有所帮助:我们的设备不仅调整了旋转设置,还调整了ro.sf.lcd_density
(从160更改为188)。
在进行实验时,我注意到“概览(最近的应用程序)”按钮仍然可以正常工作,但几乎无法访问(并且不可见)。所以按钮在那里。
经过又一轮实验后,我注意到密度设置发生了无害的变化-猜猜怎么回事,将值恢复为160后,它又可以工作了!由于某种原因,我们已经以这种方式减小了LCD的宽度/高度。
当然,它是有代价的-既然我们提高了LCD分辨率,该设备将显示一个按钮,甚至以不同的顺序显示。
偶然地,当我即将开始使用不同的DPI /按钮排列时,我发现了这篇文章:https://community.nxp.com/thread/384348#comment-831065。作者只处理显示的一侧,所以这是可以处理所有四个显示的版本:
--- a/android4.2/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
+++ b/android4.2/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
@@ -415,7 +415,20 @@ public class NavigationBarView extends LinearLayout {
for (int i=0; i<4; i++) {
mRotatedViews[i].setVisibility(View.GONE);
}
- mCurrentView = mRotatedViews[rot];
+ //mCurrentView = mRotatedViews[rot];
+
+ if (rot == Surface.ROTATION_0 && mVertical) {
+ mCurrentView = mRotatedViews[Surface.ROTATION_90];
+ } else if (rot == Surface.ROTATION_90 && !mVertical) {
+ mCurrentView = mRotatedViews[Surface.ROTATION_180];
+ } else if (rot == Surface.ROTATION_180 && mVertical) {
+ mCurrentView = mRotatedViews[Surface.ROTATION_270];
+ } else if (rot == Surface.ROTATION_270 && !mVertical) {
+ mCurrentView = mRotatedViews[Surface.ROTATION_0];
+ } else {
+ mCurrentView = mRotatedViews[rot];
+ }
+
mCurrentView.setVisibility(View.VISIBLE);
mDeadZone = (DeadZone) mCurrentView.findViewById(R.id.deadzone);
应用此补丁后,我终于有了一个很好的解决方案-DPI保持不变(即188),按钮可见,HDMI固定,一切正常。