在代码中向已存在的xml视图组添加视图

时间:2011-09-01 11:12:31

标签: android xml layout view viewgroup

我希望能够在代码中为已存在的xml布局添加视图:

        LinearLayout ll = (LinearLayout) findViewById(R.layout.common_list);

        TextView tv = new TextView(this);
        tv.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
        tv.setText("sample text");
        ll.addView(tv);

        setContentView(ll); 

在代码中创建一个新的LinearLayout时,它可以工作,但是当使用上面代码中的资源时,它不会。

common_list.xml:

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

    <TextView android:layout_width="fill_parent" android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:text="Quick List"/>

</LinearLayout>

1 个答案:

答案 0 :(得分:7)

尝试使用LayoutInflater

LinearLayout ll = (LinearLayout) LayoutInflater.from(this).inflate(R.layout.common_list)
TextView tv = new TextView(this);
tv.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
tv.setText("sample text");
ll.addView(tv);

setContentView(ll);

如果这不起作用,请从Logcat添加错误。

另外,你应该在common_list.xml中的你的LinearLayout中将android:layout_width =“fill_parent”的属性更改为android:layout_width =“wrap_content”,并且在common_list.xml中对你的TextView做同样的事情

为什么呢?因为您的布局是水平的,它填满整个屏幕空间。 TextEdit填充的空间与布局一样多(所以在这种情况下它是整个屏幕空间)。现在,当你添加另一个TextView时,它正确地添加到你的第一个TextEdit的右侧,所以它就像是在屏幕外。要准确了解会发生什么:

-----------------
||-------------||---------------
||| TextViev1 ||||addedTextView|
||-------------||---------------
||             ||
||             ||
||             ||
||             ||
||             ||
||LinearLayout ||
||-------------||
|    screen     |
----------------

我也多次遇到这个问题。通常,如果您将View添加到布局而您没有看到它(并且您没有错误),则问题在于宽度/高度或位置(例如,当您使用RelativeLayout时)。