【问题标题】:What unit of measure does LayoutParams use?LayoutParams 使用什么度量单位?
【发布时间】:2013-06-27 07:46:01
【问题描述】:

p我正在使用线性布局并希望设置视图的最大高度。在“正常”情况下,我希望视图使用“wrap_content”。但是,有时情况可能会将布局推到不希望的大小。发生这种情况时,我想将高度限制为最大 300dp。

当布局中的列表超过 4 个列表项时,我使用以下方法设置了视图的大小:

LinearLayout listLayout = (LinearLayout) dialog.findViewById(R.id.listLayout);
if(list.size() > 4){
    LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 300);                           
    listLayout.setLayoutParams(params);
}

查看documentation 让我对所应用的计量单位一无所知。这种情况下的度量单位是什么(dp、sp、px、...)?

运行测试,即使将值设置为 100,列表也会超出所需的高度。

请指教

【问题讨论】:

    标签: android android-linearlayout layoutparams


    【解决方案1】:

    根据您链接的文档:像素。见this function

    宽度,可以是 MATCH_PARENT、WRAP_CONTENT 或以像素

    为单位的固定大小

    即使您使用的函数没有任何明确的文档,也暗示它使用与具有最多参数的函数相同的文档。函数本身可能看起来像:

    LinearLayout.LayoutParams(int width, int height) {
        this(width, height, /*some default value*/);
    }
    

    即它只是使用默认值调用 3 参数版本。

    【讨论】:

    • 因此在阅读文档时,方法 public LinearLayout.LayoutParams (int width, int height) public LinearLayout.LayoutParams (int width, int height, float weight) 使用相同的描述:创建一组新的具有指定宽度、高度和重量的布局参数。参数 width 宽度,MATCH_PARENT、WRAP_CONTENT 或以像素为单位的固定大小 height 高度,MATCH_PARENT、WRAP_CONTENT 或以像素为单位的固定大小 权重
    • 是的。 LinearLayout.LayoutParams(int width, int height) 函数是 3 参数版本的重载,可能看起来像这样:(编辑:添加到帖子,因为 cmets 不格式化代码)
    【解决方案2】:

    正如大卫所说,通过代码设置 LayoutParams 是以像素为单位设置的。 您可以使用this thread中的代码将所需的dp转换为px。

    【讨论】:

      【解决方案3】:

      如果您遇到问题,这里是完整的进口课程 - @Pierre.Vriens

      //usage: int 300dpInPixels = util.convertDpToPixel(300);
      
      import android.content.res.Resources;
      import android.util.DisplayMetrics;
      
      public class utils {
          public static int convertDpToPixel(float dp){
              DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
              float px = dp * (metrics.densityDpi / 160f);
              return Math.round(px);
          }
      }
      

      【讨论】:

      • int 300dpInPixels = convertDpToPixel(300);
      猜你喜欢
      • 2014-07-31
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      • 2016-10-27
      • 2012-09-11
      • 2015-12-09
      • 1970-01-01
      • 2011-12-10
      相关资源
      最近更新 更多