【问题标题】:Screen orientation made bottom buttons disappear屏幕方向使底部按钮消失
【发布时间】:2018-08-27 10:17:10
【问题描述】:

底部导航按钮有一个非常奇怪的问题。由于我们未知的原因,我们的设备在设备属性列表中设置了ro.sf.hwrotation=270。使用此设置,一切都按预期在纵向模式下工作(启动徽标/动画、系统活动、我们的应用程序......)。不起作用的是 Miracast 显示,正如您可能已经猜到的那样,它旋转不正确。

所以我决定更仔细地查看它,第一步将属性更改为ro.sf.hwrotation=0。幸运的是,这已经修复了 Miracast 问题,所有系统活动仍然是纵向的,我们的应用程序同上,除了这个奇怪的问题:

按钮不见了。再次旋转到横向时,除了按钮(现在甚至粘在右侧)之外,一切都正常:

谁能给我一个提示在哪里看?我在日志中看不到任何可疑内容,没有崩溃或异常。

很可能按钮也以某种方式奇怪地旋转了,但话说回来,为什么只有按钮?他们有什么特别的吗?如果我恢复设置,一切都会恢复正常。

【问题讨论】:

    标签: android screen-orientation screen-rotation


    【解决方案1】:

    虽然这不是一个通用的解决方案,但它可能会在未来对某人有所帮助:我们的设备不仅调整了旋转设置,还调整了 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 固定,一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-16
      • 1970-01-01
      • 1970-01-01
      • 2013-07-14
      • 1970-01-01
      • 2012-03-08
      • 2013-01-24
      • 2021-07-15
      相关资源
      最近更新 更多