如何定位具有对所有设备看起来相同的边距的视图?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何定位具有对所有设备看起来相同的边距的视图?相关的知识,希望对你有一定的参考价值。

我试图通过以编程方式添加130(margin-top)来在中心放置一个视图以使其看起来很好,但是,我不确定如何让其他android设备(如平板电脑)看起来一样?在正常的Android手机上添加130到margin-top看起来不错,但在平板电脑上看起来会有所不同。我如何制作一个逻辑来提供一个在所有设备上提供相同外观的margin-top?一些例子或提示会很棒!我很乐意听到你的消息!

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();
答案

我的方法如下:

1)。获取设备高度。还检查this答案。

DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int height = displayMetrics.heightPixels;

2)。计算比率。

你设定了130dp的上限。使用pixplicity我设法将其转换为px

dp to 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的平均值(以像素为单位)。

以上是关于如何定位具有对所有设备看起来相同的边距的视图?的主要内容,如果未能解决你的问题,请参考以下文章

带有自动边距的网格 - Windows Phone 8.1 Silverlight

打印html页面时的边距

DIV 内有边距的子元素

绝对定位和负边距的应用

iOS Autolayout:如何显示/隐藏包含边距的视图?

如何删除不希望保留超级视图继承边距的 tableView 单元格的顶部和左侧边距?