【问题标题】:Setting Margin to LinearLayout without setting width and height将 Margin 设置为 LinearLayout 而不设置宽度和高度
【发布时间】:2014-09-18 12:26:47
【问题描述】:

我遇到了一个小问题,我坚持了很长时间。

我有一个 Android 应用程序,有一个 LinearLayout,我根据用户输入在我的代码中动态地用其他元素填充这个线性布局。我添加的元素,获取一个可绘制资源作为背景,其中定义了宽度和高度。

我的问题:
当我想通过LinearLayout.LayoutParams 为这些元素设置边距时,我必须在构造函数中传递宽度和高度值,这将覆盖我的可绘制对象的宽度和高度值。

我尝试过这样的事情:

    this.setBackgroundResource(R.drawable.board_element) ;
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(this.getWidth(), this.getHeight());
    params.setMargins(0, 0, 0, 10) ;
    this.setLayoutParams(mparams) ;


也试过这个:

this.setBackgroundResource(R.drawable.board_element) ;
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) this.getLayoutParams();
params.setMargins(0, 0, 0, 10) ;
    this.setLayoutParams(params) ;



我的drawble资源:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">
   <stroke
        android:width="1dp"
        android:color="@color/dark_brown" />
   <solid 
       android:color="@color/dark_brown"/>
   <corners
       android:radius="10dp" />
   <size 
       android:width="200dp"
       android:height="50dp" />
   <padding 
       android:left="5dp"
       android:top="9dp"
       android:right="10dp"
       android:bottom="5dp"/>

</shape>


但这不起作用,宽度和高度都是 0。有什么建议吗?
我的最低 API 级别是 9 最高 19。

【问题讨论】:

  • 你试过getMeasuredWidth()getMeasuredHeight()吗?
  • @ataulm 也没有用。
  • 也许可以发布您的自定义视图类,以及 XML 布局。

标签: android android-layout


【解决方案1】:

试试这个:

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);

【讨论】:

  • 这不起作用,它会从 xml 覆盖我的宽度和高度值。
  • 你到底想要什么?
【解决方案2】:
LayoutParams p = new LayoutParams(LayoutParams.MATCH_PARENT,
                    LayoutParams.WRAP_CONTENT);
            p.setMargins(7, 8, 8, 8);
            LinearLayout llp = new LinearLayout(this);
            llp.setLayoutParams(p);
            llp.setBackgroundResource(R.drawable.survey_answer_box);

【讨论】:

  • 尝试Edit你的答案,而不是在同一个question中发布另一个答案
猜你喜欢
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-12
  • 2013-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多