Android:为什么layout_marginTop只能使用include标签?

时间:2011-07-14 14:02:46

标签: android android-layout

我的Android应用程序中有以下模板。当我使用android:layout_MarginTop =“20dip”运行良好时,我可以看到布局顶部的20dip空间。

<LinearLayout
android:orientation="horizontal" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content"
android:layout_marginTop="20dip"
style="@style/list_buttom_single"
xmlns:android="http://schemas.android.com/apk/res/android">

<ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content"  />
<LinearLayout android:gravity="center_vertical" android:paddingLeft="10dip" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1.0">
    <TextView android:text="Login / Register" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/title" style="@style/content_page_large_text" />
    <TextView android:text="sample text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/subtitle" android:visibility="visible" style="@style/content_page_small_text" />
</LinearLayout>
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/itemCount" android:visibility="gone" style="@style/content_page_large_count_text" />
<ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/chevron" style="@style/list_buttom_chevron" />
</LinearLayout> 

但是,当我尝试使用LayoutInflater以编程方式执行此操作时,我将丢失此20dip空间。

        View notesView = mInflater.inflate(R.layout.list_item_single, null);
    ((TextView) notesView.findViewById(R.id.title)).setText("Notes");
    ((TextView) notesView.findViewById(R.id.subtitle)).setText("102 notes");
    btnContainer.addView(notesView);

为什么我为“相同”动作获得两种不同的行为,唯一的区别是一个是包含uisng xml而另一个是使用java。

非常感谢 Ť

1 个答案:

答案 0 :(得分:2)

因为如果指定父视图,布局参数仅与视图关联。这就是你应该使用inflate()的另一个版本的原因:

View notesView = mInflater.inflate(R.layout.list_item_single, btnContainer, false);
...
btnContainer.addView(notesView);