以编程方式膨胀TextView和LinearLayout

时间:2011-10-26 07:46:16

标签: android

这里的问题我在这两种情况下得不到相同的输出视图结果,我想修复案例1以获得与案例2相同的输出结果:

  1. 膨胀textview和linearlayout,然后以编程方式将textview添加到linearlayout。
  2. 将textview添加到xml中的linearlayout。
  3. 案例1的代码和输出:

    main.xml中

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

    text_view.xml

    <?xml version="1.0" encoding="utf-8"?>
    <TextView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:textColor="#000000"
        android:text="1"
        android:textSize="20sp"
        android:background="#AAAAAA"
        android:gravity="center"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_marginTop="2dp"
        android:layout_marginRight="2dp"
     />
    

    LayoutTestActivity.java中的onCreate方法

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LinearLayout lt = (LinearLayout) getLayoutInflater().inflate(R.layout.main, null);
        TextView tv = (TextView) getLayoutInflater().inflate(R.layout.text_view, null);
        lt.addView(tv);
        setContentView(lt);
    }
    

    输出视图(不正确)

    enter image description here

    案例2的代码和输出:

    main.xml中

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <TextView
            android:textColor="#000000"
            android:text="1"
            android:textSize="20sp"
            android:background="#AAAAAA"
            android:gravity="center"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_marginTop="2dp"
            android:layout_marginRight="2dp"
         />
    </LinearLayout>
    

    LayoutTestActivity.java中的onCreate方法

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
    

    输出视图(正确)

    enter image description here

3 个答案:

答案 0 :(得分:14)

我不确定它是否有任何区别 - 但我的建议是:

android:id="@+id/linearLayout"中为LinearLayout提供main.xml - 代码。

然后这样做:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    LinearLayout lt = (LinearLayout) findViewById( R.id.linearLayout );
    TextView tv = (TextView) getLayoutInflater().inflate(R.layout.text_view, null);
    lt.addView(tv);
}

您可能还想测试在null充气时,提供LinearLayout ltTextView作为第二个参数之间是否存在差异,例如:

TextView tv = (TextView) getLayoutInflater().inflate(R.layout.text_view, lt);

答案 1 :(得分:0)

您必须在第一种情况下设置LayoutParams。在第二个中,这是自动完成的,因为TextView在xml中。希望这有帮助!

答案 2 :(得分:0)

我认为首先你必须直接在setContentView()方法中设置主要布局,然后再进行膨胀。

setContentView(R.layout.main);
   LinearLayout mainLayout = (Linearlayout) findViewbyId(R.id.mainLayoutId);

   TextView tv = (TextView) getLayoutInflater().inflate(R.layout.text_view, mainLayout, false);
   mainLayout.addView(tv);

我认为这应该有效。 要保留xml布局参数,必须将最后两个参数传递给inflate()方法。