我正在尝试通过以编程方式添加130(顶部)来将视图放置在中央,以使其看起来不错,但是,我不确定如何使其他Android设备(例如平板电脑)看起来一样吗?在普通Android手机上将130添加到页边距顶部看起来不错,但在平板电脑上看起来会有所不同。我将如何制定逻辑以提供可以在所有设备上提供相同外观的页边空白?一些例子或技巧会很棒!我希望收到您的来信!
margin_top = 130 // How to make this look good on all devices?
ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
p.setMargins(0, margin_top, 0, 0);
v.requestLayout();
答案 0 :(得分:1)
我的处理方法如下:
1)。获取设备高度。还要检查this答案。
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int height = displayMetrics.heightPixels;
2)。计算比率。
我假设您已将最高边距设置为130dp
。使用pixplicity,我设法将其转换为px
。
您的手机的分辨率高度为 x ,以像素为单位。让我们将高度定义为phoneHeight
。
在这里我也变得有些棘手。如您所见,130dp对于ldpi,mdpi等具有不同的像素值。我个人不知道应该使用哪一种,您可以尝试使用mdpi。 (我将尝试进行更多研究,然后再给出答案)。
LE:
您可以使用此方法根据手机将dp转换为像素。 (请参见this答案)。
public static float convertDpToPixel(float dp, Context context){
Resources resources = context.getResources();
DisplayMetrics metrics = resources.getDisplayMetrics();
float px = dp * ((float)metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT);
return px;
}
将返回的px用于以下公式。 (我们将返回的px称为-convertedPx
。
3)。上边距值的公式。
如果我们从表中将130dp的值用于mdpi,则会得到130px。因此公式为:
margin_top = (convertedPx / phoneHeight) * height
使用phoneHeight
使用您正在测试的电话的高度,使用height
使用displayMetrics
使用设备的高度。
注意: convertedPx
将是一个常数。您只需在手机上运行此方法(convertDpToPixel
)即可找出130dp的像素平均值。