一些Android手机在屏幕底部和右侧切断了UI



我已经在其他几个设备上测试了,我的UI看起来很好。

然而,在三星Note 3上,UI从底部被切断了。

我已经记录了系统规格并做了计算。我把设备的屏幕高度设置为1920。

我有一个按钮,大小为108 × 108。

我想要那个按钮在屏幕的底部休息(我不使用XML,我使用Java)。

    _button.setMinimumHeight(buttonDimension);
    _button.setMaxHeight(buttonDimension);
    _button.setY(1920 - 108);

然而,这导致(仅在三星Note 3上)按钮底部被切断。另外,如果我尝试右对齐,那里也有一个轻微的切断。看起来它的底部有25个像素的偏差

这是怎么回事?

看起来三星认为实际渲染窗口下方和右侧的较小区域是"屏幕高度"的一部分。

你知道我怎么能得到屏幕的实际显示高度的情况下,它从报告值关闭?

如果我使用layoutparams和align to bottom,它确实工作得很好,但我需要它与像素数据工作

为什么要硬编码尺寸呢?仅仅因为屏幕高度是1920x1080并不意味着你的应用程序实际上有那么多像素可用(除非你使用沉浸式全屏模式)。

你的按钮是什么类型的布局?如果它在FrameLayout中,只需将按钮的layout_gravity设置为bottom|center_horizontal。在Java中,它看起来像:

FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) _button.getLayoutParams();
params.gravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM;
_button.requestLayout();

RelativeLayout ?只使用layout_centerHorizontallayout_alignParentBottom:

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) _button.getLayoutParams();
params.addRule(RelativeLayout.CENTER_HORIZONTAL);
params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
_button.requestLayout();

编辑:看看你最近的编辑,你应该只使用父元素的实际尺寸来确定定位。您可以添加OnGlobalLayoutListener到父布局,以确定其大小:

parent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        parent.getViewTreeObserver().removeGlobalOnLayoutListener(this);
        int parentHeight = parent.getHeight();
        // do your positioning
    }
}

我的按钮高度没有调整其视图边界,因此有错误的高度。设置setAdjustViewBounds(true)解决了这个问题。

它只"似乎"发生在一些手机上而不是其他手机上的原因是上下采样。如果资源的密度能够容纳按钮,那么它看起来就会很正常。但在三星3上(在这个特殊的例子中),可绘制资产的大小是136 x 136,而按钮无法将其调整到更小的大小。当我将adjustsBounds设置为true时,它可以将其缩小到合适的大小。

相关内容

  • 没有找到相关文章

最新更新