指定视图的高度宽度以支持多种屏幕尺寸?

时间:2012-03-24 10:11:19

标签: android

我用按钮创建了活动。我需要指定按钮的高度和宽度,如下所示。

 Button btn=new Button(this);
 btn.setWidth(100); 
 btn.setHeight(100);

对于多屏幕支持,它是指定视图大小的正确方法。指导我设置视图的高度和宽度。

3 个答案:

答案 0 :(得分:2)

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

  1. FILL_PARENTWRAP_CONTENT
  2. 等常量
  3. 一个数字
  4. 如果您选择第二种方式,您还必须选择策略,例如

    • 屏幕/父宽度的30%(因此它会根据屏幕实际尺寸缩小/增长)
    • 所有屏幕上
    • 1英寸

    前者是微不足道的:只需获取目标元素的宽度(如果它是整个显示,则通过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设备上的像素大小,即一个DIP是大约160 dpi屏幕上的一个像素的设备,则会有一些变体。在这种情况下,您可以使用以下

    button.setWidth(100 * metrics.density);
    

    这是DisplayMetrics.density的javadoc:

      

    显示器的逻辑密度。这是一个缩放因子   密度独立像素单位,其中一个DIP是一个像素   大约160 dpi的屏幕(例如240x320,1.5“x2”屏幕),   提供系统显示的基线。因此在160dpi   屏幕此密度值将为1;在120 dpi的屏幕上它会是   0.75;此值并不完全符合实际屏幕尺寸(如   由xdpi和ydpi给出,而是用于缩放的大小   基于显示dpi中的总体变化的整体UI步骤。对于   例如,即使宽度为240x320,屏幕的密度也为1   是1.8“,1.3”等。但是,如果屏幕分辨率增加到   320x480,但屏幕尺寸保持1.5“x2”,然后密度将是   增加(可能增加到1.5)。

答案 1 :(得分:0)

@Karthick如果您的按钮未在Android布局的xml中使用,那么您可以在下面设置按钮宽度和高度。

使用下面的代码来了解设备的高度和宽度。

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

答案 2 :(得分: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_SP作为applyDimension()的第一个参数。请参阅this page on the Android dev guide