layout_width和layout_height

时间:2012-02-07 17:42:54

标签: android android-layout

我有什么方法可以将layout_width和layout_height参数添加到我的自定义视图中吗?我知道有一些内置的android视图,你不必提供这些属性。

5 个答案:

答案 0 :(得分:2)

View不负责决定是否可以/应该提供这些属性。父ViewGroup指示这些属性是否是必需的。例如,TableRow使它们成为可选的。其他布局(LinearLayout,FrameLayout等)需要这些参数。

答案 1 :(得分:0)

您何时不想使用高度和宽度参数?我不确定,但我认为这会导致他们甚至没有出现在布局上?

点击此处查看参考http://developer.android.com/guide/topics/ui/declaring-layout.html#layout-params

答案 2 :(得分:0)

来自Dave所建议的Reference

  

所有视图组都包含宽度和高度(layout_width和   layout_height),每个视图都需要定义它们。许多   LayoutParams还包括可选的边距和边框。

所以看起来,你必须

答案 3 :(得分:0)

如果您想要减少常用和冗余属性,那么您应该尝试样式化。

开发者指南here

答案 4 :(得分:0)

问题在于ViewGroup.LayoutParams.setBaseAttributes()使用严格getLayoutDimension(int, String)。 您需要扩展所需的LayoutParams并覆盖setBaseAttributes。 在里面您可以手动设置宽度和高度,也可以使用更宽松的getLayoutDimension(int, int)。最后,您必须在布局类中覆盖您正在使用自己的LayoutParams。

   @Override
   public LayoutParams generateLayoutParams(AttributeSet attrs) {
       return new LayoutParams(getContext(), attrs);
   }

   public static class LayoutParams extends FrameLayout.LayoutParams {
       public LayoutParams(Context context, AttributeSet attrs) {
           super(context, attrs);
       }

      @Override
      protected void setBaseAttributes(TypedArray a, int widthAttr, int heightAttr) {
         width = a.getLayoutDimension(widthAttr, WRAP_CONTENT);
         height = a.getLayoutDimension(heightAttr, WRAP_CONTENT);
      }
  }