1

私は Android 開発の初心者であり、Java もまだ学んでいるので、優しくしてください!

タスクに関する情報を取得し (一種の宿題プランナーに基づいています)、その情報を保存してリストに表示できるアプリを作成しています。プログラムは、バックグラウンド ファイルからリストを動的に生成できる必要があります。これまでのところすべてを管理してきましたが、LinearLayout を使用して「件名」変数と「詳細」変数を含む各タスクの基本的な出力を作成すると、それらが画面に重なって表示されます。それらはすべて正しく作成されているように見えますが、すべて同じ場所に配置されています。垂直リストに表示するために設定できる属性はありますか???

ビューグループを生成して表示するコードは次のとおりです。これは、内部ストレージ内のファイル数を見つけるプログラムの別の部分のループから呼び出されます。

    TextView subjView;
    TextView detailView;
    RelativeLayout displayLayout;

    LinearLayout taskDisplay = new LinearLayout(this);
    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.WRAP_CONTENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);


    subjView = new TextView(this);      
    detailView = new TextView(this);
    displayLayout = (RelativeLayout) findViewById(R.id.relative_display_layout);

    subjView.setText(subject);
    detailView.setText(details);

    layoutParams.setMargins(0, 0, 0, 0);
    taskDisplay.addView(subjView, layoutParams);

    layoutParams.setMargins(10, 0, 0, 0);
    taskDisplay.addView(detailView, layoutParams);

    displayLayout.addView(taskDisplay);
4

2 に答える 2

1

私が正しく理解していれば、あなたの問題は、マージンを宣言してlayoutParamsから、両方を同じに設定するマージンを変更していることだけだと思いますTextViews


編集

さて、あなたがこのすべてをどのように行っているかはまだ 100% 確信が持てないので、私の例を微調整する必要があるかもしれません. ざっくりまとめてみましたので、細かいミスはご容赦ください。

動的レイアウト用の新しいモックアップ:

TextView subjView, detailView;
RelativeLayout displayLayout, rl;

// I am assuming this is your main layout
displayLayout = (RelativeLayout) findViewById(R.id.relative_display_layout);

// Just using a for loop as an example of a loop event, not sure how you are accomplishing this
for(int i = 0; i < data.length(); i++) {

    RelativeLayout.LayoutParams rllp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, 100);

    if (i > 0) {
        int rePositionRule = i;
        rllp.addRule(RelativeLayout.BELOW, rePositionRule);
    }

    RelativeLayout taskDisplay = new RelativeLayout(this);

    taskDisplay.setLayoutParams(rllp);
    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.WRAP_CONTENT,
            LinearLayout.LayoutParams.WRAP_CONTENT);
    layoutParams.setMargins(0, 0, 0, 0);

    LinearLayout.LayoutParams layoutParams2 = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.WRAP_CONTENT,
            LinearLayout.LayoutParams.WRAP_CONTENT);
    layoutParams2.setMargins(10, 0, 0, 0);

    subjView = new TextView(this);      
    detailView = new TextView(this);


    subjView.setText(subject);
    subjView.setLayoutParams(layoutParams);
    detailView.setText(details);
    detailView.setLayoutParams(layoutParams2);


    taskDisplay.addView(subjView);
    taskDisplay.addView(detailView);

    displayLayout.addView(taskDisplay);

}
于 2012-10-24T21:46:51.640 に答える
0

あなたのdisplayLayoutはrelativeLayoutです。相対レイアウトは、名前が示すように、要素を互いに相対的に配置します。通常、「要素 A は要素 B の下に配置する必要があります」などと言うでしょう。作成しているアイテムに対してこれらのルールを提供していないため、それらはすべて相対レイアウトのデフォルトの位置に移動します (つまり、画面の上部..したがってオーバーラップ)

コードを変更して物を配置するという面倒な作業に対処したくない場合は、xml とコードで displayLayout を LinearLayout に切り替えて、その向きを垂直に設定するだけです。画面からはみ出す場合は、おそらくスクロール ビューでラップすることをお勧めします。

ただし、本当に欲しいのは ListView のようです...

于 2012-10-24T21:30:12.287 に答える