11

xmlに空の線形レイアウトが1つあります。そして、動的にテキストビューを追加しています。

これらのテキストビューが5を超えると、その中にもう1つの線形レイアウトを作成し、新しく作成されたレイアウトにテキストビューを追加します。そして最後に、この新しいレイアウトをメインレイアウトに追加します。

追加することはできます。つまり、エミュレーターではそのスペースを占有しますが、テキストビューに情報を表示しません。

私の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>
    </ScrollView>

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

</LinearLayout>

私のJavaファイルは次のとおりです。

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);
                }
            }

        }

    }

}

どこが間違っているのですか?

4

3 に答える 3

5

プライマリLinearLayoutはHorizo​​ntalに設定されているため、最初の5つのテキストビューとlayout2が同じ行に表示されます。Layout3をLayout2に追加すると、Layout3がプライマリリニアレイアウトの最後のテキストビューの右側から表示されるようになります。10インチのタブレットでは、LinearLayoutの最初の2つの要素のみが表示されます。おそらく、小さな画面では表示されません。使ってみてください

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

それ以外の

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

すべてのテキストビューが表示されます。

編集: あなたの場合、これでうまくいくはずです。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>

とコード:

@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);
                }
            }

        }

    }
于 2012-07-31T09:45:38.337 に答える
0

これを試してみると、コードに問題がないことがわかります。

<?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>
于 2012-07-31T07:24:50.183 に答える
0

実際、あなたは正しいことをしています。パディングを削除し、すべての線形レイアウトの向きを垂直にしました。これもxmlファイルで変更すると機能します:)))親が取得したビューに10または60のパディングを追加するだけです。

変更された Java コード:

@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);


            }
        }

    }

}
于 2012-07-31T07:36:52.497 に答える