我希望能够在代码中为已存在的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>
答案 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时)。