一些Android手机在底部和底部切断UI屏幕权利

时间:2015-05-25 19:09:51

标签: java android user-interface samsung-mobile

我已经在其他几个设备上测试过,我的用户界面看起来还不错。

然而,在三星Note 3上,用户界面正在被截断。

我已经记录了系统规格并完成了数学计算。我的设备屏幕高度为1920.

我有一个尺寸为108 x 108的按钮。

我希望该按钮位于屏幕底部(我不使用XML,我使用的是Java)。

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

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

这里发生了什么?

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

你知道如果屏幕的实际显示高度超出报告的值,我怎能得到屏幕的实际显示高度?

如果我使用layoutparams并对齐到底部,它确实可以正常工作,但我需要它来处理像素数据。

2 个答案:

答案 0 :(得分:1)

为什么你在那里硬编码尺寸?仅仅因为屏幕高度为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
    }
}

答案 1 :(得分:0)

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

仅在某些手机而不是其他手机上“出现”的原因是向下和向上采样。如果资产的密度可以放在按钮内,那么它看起来很正常。但在三星3(在这种特殊情况下),可绘制资产的尺寸为136 x 136,按钮无法将其调整为更小。当我将adjustsBounds设置为true时,允许将其缩小到正确的大小。