layout linear dentro layout linear está adicionando, mas não é visível

9

Olá a todos, estou tendo um Layout Linear vazio em xml. E estou adicionando uma exibição de texto dinamicamente a ela.

uma vez que essas textviews excedam 5, então eu estou criando mais um layout linear dentro dele e adicionando views de texto ao Layout recém-criado. E finalmente adicionando esse novo layout ao layout principal.

Eu posso adicionar, ou seja, no emulador, ocupar esse espaço, mas não exibirá as informações nas textviews.

meu xml é o seguinte:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ScrollView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <LinearLayout
            android:id="@+id/dyn_layout"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:padding="10dip" >
        </LinearLayout>
    </ScrollView>

    <Button
        android:id="@+id/dyn_button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Add TextViews" />

</LinearLayout>

e meu arquivo java é o seguinte:

import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;

public class AddTextViewsDynamically extends Activity implements
        OnClickListener {

    Button button;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.add_textview_dynamically);

        button = (Button) findViewById(R.id.dyn_button1);
        button.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.dyn_button1:
            LinearLayout layout = (LinearLayout) findViewById(R.id.dyn_layout);
            LinearLayout layout2 = null;
            LinearLayout layout3 = null;
            for (int i = 0; i < 10; i++) {
                if (i > 4) {
                    if (i == 5) {
                        layout2 = new LinearLayout(this);
                        layout2.setLayoutParams(new LayoutParams(
                                LayoutParams.FILL_PARENT,
                                LayoutParams.WRAP_CONTENT));
                        layout2.setOrientation(LinearLayout.VERTICAL);
                        layout2.setPadding(10, 60, 10, 10);
                        layout3 = new LinearLayout(this);
                        layout3.setLayoutParams(new LayoutParams(
                                LayoutParams.FILL_PARENT,
                                LayoutParams.WRAP_CONTENT));
                        layout3.setOrientation(LinearLayout.HORIZONTAL);
                        layout3.setPadding(10, 10, 10, 10);
                    }
                    System.out.println("**** Adding text view " + i);
                    TextView text = new TextView(this);
                    text.setText("The Value of i is :" + i);
                    text.setTextSize(12);
                    text.setGravity(Gravity.LEFT);
                    text.setLayoutParams(new LayoutParams(155,
                            LayoutParams.WRAP_CONTENT));
                    layout3.addView(text);

                    if (i == 9) {
                        System.out
                                .println("Added second linear layout to first");
                        layout2.setVisibility(View.VISIBLE);
                        layout2.addView(layout3);
                        layout.addView(layout2);
                    }
                } else {
                    System.out.println("###### Adding text view " + i);
                    TextView text = new TextView(this);
                    text.setText("The Value of i is :" + i);
                    text.setTextSize(12);
                    text.setGravity(Gravity.LEFT);
                    text.setLayoutParams(new LayoutParams(155,
                            LayoutParams.WRAP_CONTENT));
                    layout.addView(text);
                }
            }

        }

    }

}

Alguém pode me dizer onde eu estou errado. E por favor me ajude.

Obrigado antecipadamente Mouni

    
por Mouni 31.07.2012 в 09:09
fonte

3 respostas

5

Seu LinearLayout primário é definido como Horizontal, de forma que as primeiras 5 exibições de texto e o layout2 sejam exibidos na mesma linha. Adicionar Layout3 ao Layout2 faz com que o Layout3 seja mostrado à direita da última exibição de texto do Layout Linear primário. Em um tablet de 10 polegadas, vejo apenas os dois primeiros elementos do LinearLayout. Talvez em uma tela menor você não os veja. Tente usar

text.setLayoutParams(new LayoutParams(50, LayoutParams.WRAP_CONTENT));

em vez de

text.setLayoutParams(new LayoutParams(155, LaoutParams.WRAP_CONTENT));

e você deve ver todas as suas exibições de texto.

EDITAR: No seu caso, isso deve funcionar. xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ScrollView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <LinearLayout
            android:id="@+id/dyn_layout"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:padding="10dip" >
        </LinearLayout>

        <LinearLayout
            android:id="@+id/dyn_layout2"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:visibility="gone"
            android:padding="10dip" >
        </LinearLayout>
    </ScrollView>

    <Button
        android:id="@+id/dyn_button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Add TextViews" />

</LinearLayout>

e código:

@Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.dyn_button1:
            LinearLayout layout = (LinearLayout) findViewById(R.id.dyn_layout);
            LinearLayout layout2 = (LinearLayout) findViewById(R.id.dyn_layout2);
            LinearLayout layout3 = null;
            for (int i = 0; i < 10; i++) {
                if (i > 4) {
                    if (i == 5) {
                        layout2.setPadding(10, 60, 10, 10);
                        layout3 = new LinearLayout(this);
                        layout3.setLayoutParams(new LayoutParams(
                                LayoutParams.FILL_PARENT,
                                LayoutParams.WRAP_CONTENT));
                        layout3.setOrientation(LinearLayout.HORIZONTAL);
                        layout3.setPadding(10, 10, 10, 10);
                    }
                    System.out.println("**** Adding text view " + i);
                    TextView text = new TextView(this);
                    text.setText("The Value of i is :" + i);
                    text.setTextSize(12);
                    text.setGravity(Gravity.LEFT);
                    text.setLayoutParams(new LayoutParams(155,
                            LayoutParams.WRAP_CONTENT));
                    layout3.addView(text);

                    if (i == 9) {
                        System.out
                                .println("Added second linear layout to first");
                        layout2.setVisibility(View.VISIBLE);
                        layout2.addView(layout3);
                    }
                } else {
                    System.out.println("###### Adding text view " + i);
                    TextView text = new TextView(this);
                    text.setText("The Value of i is :" + i);
                    text.setTextSize(12);
                    text.setGravity(Gravity.LEFT);
                    text.setLayoutParams(new LayoutParams(155,
                            LayoutParams.WRAP_CONTENT));
                    layout.addView(text);
                }
            }

        }

    }
    
por cosmincalistru 31.07.2012 / 11:45
fonte
0

Na verdade, você está fazendo as coisas direito, eu apenas removi o preenchimento e fiz a orientação de todos os Layouts Lineares para vertical. Modifique isso no arquivo xml também e ele irá funcionar :))) É só você está adicionando um padding de 10 ou 60 que está indo do ponto de vista tomado pelo pai.

Código Java modificado:

@Override
public void onClick(View v) {

 switch (v.getId()) {
    case R.id.dyn_button1:
        LinearLayout layout = (LinearLayout) findViewById(R.id.dyn_layout);
        LinearLayout layout2 = null;
        LinearLayout layout3 = null;
        for (int i = 0; i < 10; i++) {
            if (i > 4) {
                if (i == 5) {
                    layout2 = new LinearLayout(this);
                    layout2.setLayoutParams(new LayoutParams(
                            LayoutParams.FILL_PARENT,
                            LayoutParams.WRAP_CONTENT));
                    layout2.setOrientation(LinearLayout.VERTICAL);
                 //   layout2.setPadding(10, 10, 10, 10);
                    layout3 = new LinearLayout(this);
                    layout3.setLayoutParams(new LayoutParams(
                            LayoutParams.FILL_PARENT,
                            LayoutParams.WRAP_CONTENT));
                    layout3.setOrientation(LinearLayout.VERTICAL);
               //     layout3.setPadding(10, 10, 10, 10);
                }
                System.out.println("**** Adding text view " + i);
                TextView text = new TextView(this);
                text.setText("The Value of i is :" + i);
                text.setTextSize(12);
                text.setGravity(Gravity.LEFT);
                text.setLayoutParams(new LayoutParams(155,
                        LayoutParams.WRAP_CONTENT));
                layout3.addView(text);

                if (i == 9) {
                    System.out
                            .println("Added second linear layout to first");
                    layout2.setVisibility(View.VISIBLE);
                    layout2.addView(layout3);
                    layout.addView(layout2);
                }
            } else {
                System.out.println("###### Adding text view " + i);
                TextView text = new TextView(this);
                text.setText("The Value of i is :" + i);
                text.setTextSize(12);
                text.setGravity(Gravity.LEFT);
                text.setLayoutParams(new LayoutParams(155,
                        LayoutParams.WRAP_CONTENT));
                layout.addView(text);


            }
        }

    }

}
    
por iabhi 31.07.2012 / 09:36
fonte
0

Tente este, então você verá que seu código está OK.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="100" >

<HorizontalScrollView
    android:layout_width="wrap_content"
    android:layout_height="0dp"
    android:layout_weight="80" >

    <LinearLayout
        android:id="@+id/dyn_layout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="10dip" >
    </LinearLayout>
</HorizontalScrollView>

<Button
    android:id="@+id/dyn_button1"
    android:layout_width="wrap_content"
    android:layout_height="0dp"
    android:layout_weight="20"
    android:text="Add TextViews" />

</LinearLayout>
    
por osayilgan 31.07.2012 / 09:24
fonte