gpt4 book ai didi

android - 在运行时在 Android 上复制 View

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:51:29 25 4
gpt4 key购买 nike

我已经为一个 Activity 创建了一个布局文件。在这个布局中,我创建了一个带有 textview 和 edittext 的 LinearLayout。现在我想创建额外的 LinearLayouts,它们看起来和包含与我原来的 LinearLayout 完全相同的 View ,但具有不同的文本。我还想在运行期间以编程方式执行此操作,因为这些 LinearLayout 的数量在运行之间会有所不同。我读过一些关于充气机的资料,但我对它们的了解还不足以使用它们。

我在想这样的事情,显然代码是错误的,但希望你明白我想做什么:

LinearLayout llMain = (LinearLayout)findViewById(R.id.mainLayout);
LinearLayout llToCopy = (LinearLayout)findViewById(R.id.linearLayoutToCopy);
for(int player = 0; player < size; player++)
{
LinearLayout llCopy = llToCopy.clone();
TextView tv = (TextView)llCopy.getChildAt(0);
tv.setText(players.get(player).getName());
llMain.addView(llCopy);
}

最佳答案

有几种方法可以做到这一点。
一种快速简便的方法是在循环的每次迭代中膨胀一个新布局:

LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout parent = (LinearLayout) inflater.inflate(R.layout.main, null);

for (int i = 0; i < 10; i++) {
View child = inflater.inflate(R.layout.child, null);
TextView tv = (TextView) child.findViewById(R.id.text);
tv.setText("Child No. " + i);
parent.addView(child);
}

setContentView(parent);

另一个(更优雅的)解决方案是创建一个单独的类来扩展 LinearLayout:

public class ChildView extends LinearLayout {

private TextView tv;

public ChildView(Context context) {
super(context);

View.inflate(context, R.layout.child, this);
tv = (TextView) findViewById(R.id.text);
}

public void setText(String text) {
tv.setText(text);
}
}

现在您可以在循环的每次迭代中创建一个 ChildView 并通过 setText(String text) 方法设置文本:

for (int i = 0; i < 10; i++) {
ChildView child = new ChildView( this );
child.setText("Child No. " + i);
parent.addView(child);
}

关于android - 在运行时在 Android 上复制 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14798826/

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