gpt4 book ai didi

android - 以编程方式将多个自定义 View 添加到布局

转载 作者:IT老高 更新时间:2023-10-28 22:05:27 25 4
gpt4 key购买 nike

如果我有这样的空布局:

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.xmllayout1.xml以编程方式。我需要有多个不同的版本 layout2.xml我会在需要时添加。每个人在 TextView 上都有不同的文本和 Button秒。

如果是普通的 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);
}

如果我没有像 TextView 这样简单的东西怎么办?或 Button ,如果我定义了自己的 XML View ?

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

最佳答案

您可以扩充 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);
}
}

您可能希望将 layout2.xml Root View 的 android:layout_height 更改为 wrap_content

如果您使用 ViewBinding,以下是 addLayout 函数的外观:

MyLayoutBinding binding = MyLayoutBinding.inflate(getLayoutInflater(), mLinearLayout, false);
binding.getTextView1().setText(textViewText);
binding.getButton1().setText(buttonText1);
binding.getButton2().setText(buttonText2);

mLinearLayout.addView(binding.getRoot());

关于android - 以编程方式将多个自定义 View 添加到布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27128425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com