以编程方式膨胀TextView和LinearLayout

tha*_*rif 10 android

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

  1. 膨胀textview和linearlayout,然后以编程方式将textview添加到linearlayout.
  2. 将textview添加到xml中的linearlayout.

案例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>
Run Code Online (Sandbox Code Playgroud)

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"
 />
Run Code Online (Sandbox Code Playgroud)

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);
}
Run Code Online (Sandbox Code Playgroud)

输出视图(不正确)

在此输入图像描述

案例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>
Run Code Online (Sandbox Code Playgroud)

LayoutTestActivity.java中的onCreate方法

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}
Run Code Online (Sandbox Code Playgroud)

输出视图(正确)

在此输入图像描述

kas*_*rch 14

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

为您提供android:id="@+id/linearLayout"-tag标签.LinearLayoutmain.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);
}
Run Code Online (Sandbox Code Playgroud)

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

TextView tv = (TextView) getLayoutInflater().inflate(R.layout.text_view, lt);
Run Code Online (Sandbox Code Playgroud)


Dim*_*ris 0

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