指定视图的高度宽度以支持多种屏幕尺寸?
我用一个按钮创建了该活动。我需要像下面那样指定按钮的高度和宽度。指定视图的高度宽度以支持多种屏幕尺寸?
Button btn=new Button(this);
btn.setWidth(100);
btn.setHeight(100);
对于多屏幕支持,它是指定视图大小的正确方法。指导我设置视图的高度和宽度。
@Karthick如果你的按钮没有在xml的android布局中使用,那么你可以做下面的事情设置按钮的宽度和高度。
使用下面的代码可以知道设备的高度和宽度。
int public static int LDPI_BUTTONSIZE=100;
int device_height;
int device_width;
WindowManager wm=getWindowManager();;
DisplayMetrics dm=new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(dm);
device_width=dm.widthPixels;
device_height=dm.heightPixels;
从上面的代码,你将决定在你的Android设备的屏幕,例如,你可以参考开发click here的这个环节。在参考表3中。
现在,如果您的设备是LDPI,那么您可以像这样设置Button值。
Button btn=new Button(this);
btn.setWidth(LDPI_BUTTONSIZE);
btn.setHeight(LDPI_BUTTONSIZE);
为此,您需要将像素转换为dp。你可以用TypedValue
来做到这一点。
例子:
int buttonWidthInPixels = 100;
float buttonWIdthInDp = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
buttonWidthInPixels, getResources().getDisplayMetrics());
button.setWidth((int) buttonWidthInDp);
相反,如果你想转换为SP(文本),使用TypedValue.COMPLEX_UNIT_SP
为applyDimension()
第一个参数。见this page on the Android dev guide。
这实际上取决于你想如何确定按钮的大小。基本上,你有两个选择
- 常量像
FILL_PARENT
或WRAP_CONTENT
- 一些
如果选择第二个方法,你还必须选择一个策略,例如
- 30%的屏幕/父宽度(所以它缩小/增长取决于屏幕的实际尺寸)
- 1英寸的所有scre ENS
前者是简单的:刚刚得到的目标元素的宽度(通过DisplayMetrics
如果它是整个显示器,或getWidth()
如果它是一个View
),并通过您的系数相乘。
后者需要您知道密度显示屏,即有多大装置上的一个像素。例如,通过容量增加一倍,在像素宽度将减半
DENSITY PIXEL SIZE
100 dpi 1/100 in
200 dpi 1/200 in
所以,如果你希望你的按钮为1英寸宽在所有可能的设备,你可以使用
button.setWidth(1 * (int) metrics.xdpi); //1 inch * DisplayMetrics.xdpi
有一个如果您知道MDPI设备上的像素大小,即在大约160 dpi的屏幕上,其中一个DIP是一个像素的设备,则可以使用小型变体。在这种情况下,你可以使用下面的
button.setWidth(100 * metrics.density);
这是DisplayMetrics.density
的Javadoc:
显示的逻辑密度。这是 密度无关像素单位的比例因子,其中一个DIP是 大约160 dpi屏幕上的一个像素(例如,240x320,1.5“x2”屏幕), 提供系统显示的基线。因此,在160dpi的 屏幕上,此密度值将为1;在120 dpi屏幕上,它将是 .75;等等。这个值并不完全遵循真实的屏幕大小(如由xdpi和ydpi给出的 ,而是用于基于显示dpi的总体变化逐步缩放整个UI的大小。对于 示例,即使其宽度为 为1.8“,1.3”等,但是,如果屏幕分辨率增加到 320x480但屏幕尺寸保持为1.5“x2”,则密度将增加为 (大概为1.5)