动态加载布局,margin属性无效
有时候我们写好了一个布局文件的模板,然后在代码里面利用LayoutInflate进行动态加载的时候,我们会发现模板里面原来写好的margin的一些参数全都不起作用,下面举一个例子,比如说我的模板文件如下
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
android:layout_marginTop="10dp"
android:background="@drawable/item_unselected">
<TextView
android:id="@+id/reminder_entity_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentStart="true"
android:layout_marginStart="@dimen/activity_horizontal_margin"
android:text="Bring Utensil"
android:textColor="@color/text_black_high"
android:textSize="@dimen/shortcut_detail_text_size_small"
android:gravity="center_vertical"/>
<ImageView
android:id="@+id/reminder_action_where"
android:layout_width="@dimen/medium_icon_size"
android:layout_height="@dimen/medium_icon_size"
android:layout_marginEnd="@dimen/activity_horizontal_margin"
android:padding="5dp"
android:layout_alignParentEnd="true"
android:scaleType="fitCenter"
android:src="@drawable/location_black"
android:visibility="gone"/>
</RelativeLayout>
就是很简单的一个Relativelayout包住了一个TextView和一个Imageview,然后重点在于Relativelayout我设置了marginStart/End/Top三个margin相关的属性。在MainActivity里面动态加载这个布局文件
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout layout = findViewById(R.id.container);
for (int i = 0; i < 5; i++){
RelativeLayout entity = (RelativeLayout) this.getLayoutInflater().inflate(R.layout.reminder_entity_template, null);
layout.addView(entity);
}
}
}
什么鬼?这是什么效果??
查阅资料后发现,原来在加载这个布局的时候只有指定了其父布局,他的margin属性才会生效
将原来的这行代码
RelativeLayout entity = (RelativeLayout) this.getLayoutInflater().inflate(R.layout.reminder_entity_template, null);
改为
RelativeLayout entity = (RelativeLayout) this.getLayoutInflater().inflate(R.layout.reminder_entity_template, layout, false);
然后再试一次,大功告成!