我已经在其他几个设备上测试过,我的用户界面看起来还不错。
然而,在三星Note 3上,用户界面正在被截断。
我已经记录了系统规格并完成了数学计算。我的设备屏幕高度为1920.
我有一个尺寸为108 x 108的按钮。
我希望该按钮位于屏幕底部(我不使用XML,我使用的是Java)。
_button.setMinimumHeight(buttonDimension);
_button.setMaxHeight(buttonDimension);
_button.setY(1920 - 108);
然而,这个结果(仅限三星Note 3)在按钮底部被切断。此外,如果我尝试右对齐,那里也有轻微的切断。看起来它的底部约有25个像素。
这里发生了什么?
看起来三星认为实际渲染窗口下方和右侧的较小区域是“屏幕高度”的一部分。
你知道如果屏幕的实际显示高度超出报告的值,我怎能得到屏幕的实际显示高度?
如果我使用layoutparams并对齐到底部,它确实可以正常工作,但我需要它来处理像素数据。
答案 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_centerHorizontal
和layout_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时,允许将其缩小到正确的大小。