2012-03-24 47 views

回答

0

@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); 
0

为此,您需要将像素转换为dp。你可以用TypedValue来做到这一点。

例子:

int buttonWidthInPixels = 100; 
float buttonWIdthInDp = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 
         buttonWidthInPixels, getResources().getDisplayMetrics()); 
button.setWidth((int) buttonWidthInDp); 

相反,如果你想转换为SP(文本),使用TypedValue.COMPLEX_UNIT_SPapplyDimension()第一个参数。见this page on the Android dev guide

2

这实际上取决于你想如何确定按钮的大小。基本上,你有两个选择

  1. 常量像FILL_PARENTWRAP_CONTENT
  2. 一些

如果选择第二个方法,你还必须选择一个策略,例如

  • 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)