如何通过一次点击一个按钮,以编程方式将多个TextView添加到现有RelativeLayout ,而不将TextViews重叠到另一个上。
我正在尝试这样的事情 - onCreate()方法中存在以下代码:
TextView textViewToSeeFirst = (TextView) findViewById(R.id.textView1);
RelativeLayout rLayout1 = (RelativeLayout) findViewById(R.id.relativeLayout1);
Button button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RelativeLayout.LayoutParams lparams = new RelativeLayout.LayoutParams
(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
TextView newTextView = new TextView(TheActivityYouAreUsingActivity.this);
newTextView.setText("text you want");
rLayout1.addView(newTextView, lparams);
}
TextViews正被添加到RelativeLayout,但它们都是彼此重叠的,如何修复它?
答案 0 :(得分:1)
目标是以编程方式,通过一次单击一次按钮,将多个TextView添加到现有RelativeLayout,并且TextView不会相互重叠。
这是我最终得到的,这是有效的,但我不确定它是否是最好的方式(或者甚至是好方法)。
onCreate()方法中存在以下代码:
// Creates a variable to keep track of the amount of TextViews, the
// first TextView, an array, and then stores the TextView in the Array
int numberOfTextViews = 1;
TextView[] textViewArray = new TextView[20];
TextView textViewToSeeFirst = (TextView) findViewById(R.id.textView1);
textViewArray[numberOfTextViews - 1] = textViewToSeeFirst;
// Also need to reference the RelativeLayout we are putting TextViews in
RelativeLayout rLayout1 = (RelativeLayout) findViewById(R.id.relativeLayout1);
Button button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RelativeLayout.LayoutParams lparams = new RelativeLayout.LayoutParams
(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lparams.addRule(RelativeLayout.RIGHT_OF, textViewArray[numberOfTextViews - 1].getId());
lparams.addRule(RelativeLayout.ALIGN_TOP, textViewArray[numberOfTextViews - 1].getId());
TextView newTextView = new TextView(TheActivityYouAreUsingActivity.this);
newTextView.setText("text you want");
newTextView.setId(numberOfTextViews);
textViewArray[numberOfTextViews] = newTextView;
rLayout1.addView(textViewArray[numberOfTextViews], lparams);
numberOfTextViews = numberOfTextViews + 1;
}
要记住的一些事情:
RelativeLayout.LayoutParams的参数很重要,请参阅developer material on these parameters。 WRAP_CONTENT是根据我的需要选择的,因为它导致TextViews只占用文本的大小,而不是整个父文件......在我更改之前重叠已经发生。
如果稍后要为新布局参数引用,则必须设置每个新TextView的ID
id必须是正数,零不是正数
RelativeLayout持有TextViews并处理它们,textViewArray就是这样,如果需要,可以存储和引用每个TextView的ID
相应的XML在主要父级中使用它:
<RelativeLayout
android:id="@+id/relativeLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight=".2" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/die_one" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/name_a_button" />
</RelativeLayout>
请注意,第一个RelativeLayout和TextView都有一个id,这是活动中的addRule()方法可以引用它们。
此代码允许用户单击按钮并将新TextView添加到RelativeLayout而不会重叠。
答案 1 :(得分:0)
为什么不在运行app之前在xml文件中添加所有文本视图(尽可能多地添加)。只需将您最初想要显示的文本视图的可见性设置为&#34; GONE&#34;然后在按钮单击监听器中,只需将textview的可见性更改为&#34; View.Visible&#34; 。 如果您希望每次按下按钮时都显示新的文本视图,则将计数器设置为按钮,每次计数器递增时,您都可以将所需的文本视图的可见性更改为View.Visible。如果您理解我的意思,您将能够自己制作代码。