addContentView和layoutInflater混合并混合内容

时间:2014-05-14 20:24:05

标签: android xml android-layout layout layout-inflater

我有两个单独的xml文件,如下所示,它们都放在布局文件夹中。其中一个名为firstlayout,另一个名为secondlayout。在活动中,我想使用layoutinflater显示两者的内容。尽管如此,firstlayout.xml其内容的方向和水平对齐,而secondlayout.xml的{​​{1}}在中心对齐,但是,当我使用relativelayout时如下所示代码,输出是放在屏幕顶部的水平混合文本。

我希望屏幕上的输出为,顶部为水平文本,中心为水平文本。请检查我的文件和下面的代码,让我知道我错过了什么。

Java_Code:

addcontentview

firstlayout.xml

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.firstlayout);

    LayoutInflater loiViewInflater = (LayoutInflater) getSystemService (Context.LAYOUT_INFLATER_SERVICE);
    loiViewInflater = LayoutInflater.from(getApplicationContext());
    View mView = loiViewInflater.inflate(R.layout.secondlayout, null);
    addContentView(mView, new LayoutParams(LayoutParams.WRAP_CONTENT, 
            LayoutParams.WRAP_CONTENT));

secondlayout.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
    <TextView
        android:id="@+id/TextView00"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="first xml file00"
        android:gravity="top">
    </TextView>
    <TextView
        android:id="@+id/TextView01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="first xml file01"
        android:layout_marginLeft="18dp"
        android:gravity="top">
    </TextView>    
</LinearLayout>

1 个答案:

答案 0 :(得分:1)

您正在为第二个布局将LayoutParams设置为WRAP_CONTENT,因此即使您将内部RelativeLayout的重力设置为居中,您的外部LinearLayout仍将在左上角对齐并调整自身大小以包装内容,所以一切都会在左上角结束。

从secondlayout.xml中删除LinearLayout,您不需要它。然后将您的代码更改为:

View mView = loiViewInflater.inflate(R.layout.secondlayout, null);

FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.CENTER;

addContentView(mView, params);