我想以编程方式添加LinearLayout
一些TextViews
。我想使用LayoutInflater
。我的活动布局是xml文件:
<LinearLayout
android:id="@+id/linear_layout"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:orientation="vertical"
/>
我在下面写了活动代码。
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linear_layout);
LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
TextView textView = (TextView) inflater.inflate(R.layout.scale, linearLayout, true);
textView.setText("Some text");
linearLayout.addView(textView);
我的scale.xml
文件如下:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginLeft="50dp"
android:layout_marginRight="50dp"
android:drawableTop="@drawable/unit"
/>
在第TextView textView = (TextView) inflater.inflate(R.layout.scale, linearLayout, true);
行,我有如下所示的致命异常。
java.lang.RuntimeException: Unable to start activity ComponentInfo{my.package/my.package.MyActivity}:
java.lang.ClassCastException: android.widget.LinearLayout
Caused by: java.lang.ClassCastException: android.widget.LinearLayout
当我将有问题的行linearLayout
替换为null时,我没有任何异常,但我的android:layout_marginLeft
中的android:layout_marginRight
和scale.xml
被忽略,我可以'看到添加TextView的任何边距。
我找到了问题Android: ClassCastException when adding a header view to ExpandableListView,但在我的情况下,我在第一行中有例外情况,我使用了inflater。
答案 0 :(得分:3)
在调用linearLayout
时指定根视图(inflater.inflate()
)时,膨胀视图会自动添加到视图层次结构中。因此,您无需致电addView
。另外,正如您所注意到的,返回的视图是层次结构的根视图(LinearLayout
)。要获得TextView
本身的引用,您可以使用以下命令检索它:
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linear_layout);
LayoutInflater inflater = (LayoutInflater) getApplicationContext().
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.scale, linearLayout, true);
TextView textView = (TextView) linearLayout.getChildAt(
linearLayout.getChildCount()-1);
textView.setText("Some text");
如果要在scale.xml中为视图提供android:id
属性,可以使用
TextView textView = (TextView) linearLayout.findViewById(R.id.text_id);