添加多个自定义视图以编程方式进行布局

问题描述 投票:26回答:3

例如,如果我有这样的空布局:

layout1.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

</LinearLayout>

以及其他一些这样的布局:

layout2.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView 1" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button 2" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button 3" 
        android:layout_weight="1"/>

</LinearLayout>

我想以编程方式将layout2.xml添加到layout1.xml。我需要有多个不同的版本layout2.xml,需要时可以添加。每个人在TextViewButton上都有不同的文字。

[对于普通的Android View,我通常会使用addView来类似地这样做:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    TextView tv1 = new TextView(this);
    tv1.setText("HELLO");
    my_linear_layout.addView(tv1);

    Button btn2 = new Button(this);
    bt2.setText("WORLD");
    my_linear_layout.addView(btn2);
}

如果没有简单的内容,例如TextViewButton,并且我定义了自己的XML View,该怎么办?

是否有可能以某种方式将所有视图放入适配器中,例如ListView,然后在需要时获取它,然后仅在那些addView上调用View

android xml android-layout android-custom-view
3个回答
47
投票

您可以给layout2.xml文件充气,编辑文本并将其添加到第一个布局:

public class MyActivity extends Activity {

    private ViewGroup mLinearLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout1);
        mLinearLayout = (ViewGroup) findViewById(R.id.linear_layout);
        addLayout("This is text 1", "This is first button", "This is second Button");
    }

    private void addLayout(String textViewText, String buttonText1, String buttonText2) {
        View layout2 = LayoutInflater.from(this).inflate(R.layout.layout2, mLinearLayout, false);

        TextView textView = (TextView) layout2.findViewById(R.id.button1);
        Button button1 = (Button) layout2.findViewById(R.id.button2);
        Button button2 = (Button) layout2.findViewById(R.id.button3);

        textView1.setText(textViewText);
        button1.setText(buttonText1);
        button2.setText(buttonText2);

        mLinearLayout.addView(layout2);
    }
}

您可能想将android:layout_height根视图的layout2.xml更改为wrap_content


13
投票

[layout1.xml包含ScrollView作为父级布局,而主LinearLayout包含子级,如果没有更多行大小的屏幕尺寸ScrollView使用滚动处理溢出项目:

layout1.xml

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:id="@+id/my_linear_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

    </LinearLayout>
</ScrollView>

使用LayoutInflater将行项目添加到父项LayoutInflater

LinearLayout

4
投票

尝试此方法

private LinearLayout my_linear_layout; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout1); my_linear_layout = (LinearLayout) findViewById(R.id.my_linear_layout); for (int i = 1; i <= 5; i++) { View view = LayoutInflater.from(this).inflate(R.layout.layout2, null); TextView button1 = (TextView) view.findViewById(R.id.button1); Button button2 = (Button) view.findViewById(R.id.button2); TextView button3 = (TextView) view.findViewById(R.id.button3); button1.setText("HELLO " + i); button2.setText("HELLO " + i); button3.setText("HELLO " + i); my_linear_layout.addView(view); } } 添加到id“ layout1.xml”:

LinearLayout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/firstlayout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> </LinearLayout> 中:

onCreate
© www.soinside.com 2019 - 2024. All rights reserved.