如何以编程方式将多个TextView添加到RelativeLayout

时间:2014-06-23 22:33:59

标签: android relativelayout overlapping

如何通过一次点击一个按钮,以编程方式将多个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,但它们都是彼此重叠的,如何修复它?

2 个答案:

答案 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。如果您理解我的意思,您将能够自己制作代码。