如何使用对所有设备看起来都相同的边距定位视图?
How to position the view with margin that will look same for all devices?
我试图通过以编程方式添加 130(顶部边距)来将视图放置在中心以使其看起来不错,但是,我不确定如何给其他 android 设备,例如平板电脑看起来一样吗?在正常 android phone 上,将 margin-top 添加 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();
我的处理方法如下:
1).获取设备高度。还要检查 this 答案。
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int height = displayMetrics.heightPixels;
2).计算比例。
我假设您设置了 130dp
的上边距。使用 pixplicity 我设法将其转换为 px
.
您的 phone 分辨率高度 x 重量(以像素为单位)。让我们将高度定义为 phoneHeight
.
这里对我来说也有点棘手。如您所见,130dp 对 ldpi、mdpi 等具有不同的像素值。我个人不知道应该使用哪个,您可以尝试使用 mdpi。 (我会尝试进行更多研究并返回答案)。
LE:
您可以使用此方法根据您的phone将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 - convertedPx
.
3).上边距值的公式。
如果我们使用 table 中的 130dp 值作为 mdpi,我们将得到 130px。所以公式是:
margin_top = (convertedPx / phoneHeight) * height
phoneHeight
您当前正在测试的 phone 的高度和 height
使用 displayMetrics
的设备的高度。
注意: convertedPx
将是一个常量。您只需 运行 在 phone 上使用此方法 (convertDpToPixel
) 即可找出 130dp 的像素数。
我试图通过以编程方式添加 130(顶部边距)来将视图放置在中心以使其看起来不错,但是,我不确定如何给其他 android 设备,例如平板电脑看起来一样吗?在正常 android phone 上,将 margin-top 添加 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();
我的处理方法如下:
1).获取设备高度。还要检查 this 答案。
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int height = displayMetrics.heightPixels;
2).计算比例。
我假设您设置了 130dp
的上边距。使用 pixplicity 我设法将其转换为 px
.
您的 phone 分辨率高度 x 重量(以像素为单位)。让我们将高度定义为 phoneHeight
.
这里对我来说也有点棘手。如您所见,130dp 对 ldpi、mdpi 等具有不同的像素值。我个人不知道应该使用哪个,您可以尝试使用 mdpi。 (我会尝试进行更多研究并返回答案)。
LE:
您可以使用此方法根据您的phone将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 - convertedPx
.
3).上边距值的公式。
如果我们使用 table 中的 130dp 值作为 mdpi,我们将得到 130px。所以公式是:
margin_top = (convertedPx / phoneHeight) * height
phoneHeight
您当前正在测试的 phone 的高度和 height
使用 displayMetrics
的设备的高度。
注意: convertedPx
将是一个常量。您只需 运行 在 phone 上使用此方法 (convertDpToPixel
) 即可找出 130dp 的像素数。