1

XMLレイアウトを動的に作成したいのですが、その方法について質問がありました。

私がこのようなものを持っているとしましょう(「アウトライン」の観点からレイアウトを見てください):

-ScrollView

---線形レイアウト(垂直)(LL1)

-------線形レイアウト(水平)(LL2)

-----------画像ビュー(IV1)

-----------線形レイアウト(垂直)(LL3)

--------------- TextView

--------------- TextView

したがって、ここでの私の質問は、最も内側のレイアウト(LL3)から始めて、2つのTextViewを追加してから、他のビューとレイアウトに追加して上に分岐しますか(LL2、LL1、ScrollViewの順に)?

4

1 に答える 1

0

私はあなたがこれをいくつかの方法で行うことができると信じています。このような階層全体を動的に作成しようとはしていませんが、ボタン、ラジオボタン、テキストビュー、その他のビューをこの方法で数回追加しました。そのような場合は、を使用して既存のものに新しいものを追加しましたAddView()

最も簡単な方法は、「トップダウン」で作成することです。つまり、ScrollView最初に作成して設定を追加してから、他のビューを下向きに追加します。私は通常、次のようなことをします。

// Call other methods to create the views first:
ScrollView myScrollView = createMainScrollView();
LinearLayout myHorizontalLayout = createLinearLayoutForAbc();
LinearLayout myOtherLayout = createLinearLayoutForXyz();
TextView myFirstTxt = (...)
(..etc..)

次に、正しい方法でそれらを入力します。

myScrollView.addView(myHorizontalLayout);
myHorizontalLayout.addView(myOtherLayout);
(..etc..)

注:これでうまくいくと思いますが、保証することはできません外部ビューに追加された後、内部ビューへの参照が正しくなくなっmyHorizontalLayoutた場合(たとえば、の下の実際のビューへの有効な参照ではなくなった場合myScrollView)、その内部ビューに子を追加できない可能性があります。ただし、これについてはよくわかりません。

(もしそうなら、各ビューを追加した後にを使用して新しい正しい参照をフェッチしようとするかもしれませんがfindViewByName()、それが最適な解決策になるとは思いません)。

最初に最初の方法を試してみます。少なくとも概念実証を行い、少なくとも3レベルの深さの階層にビューを追加できることを確認します。それはあなたにあなたの答えを与えるはずです。それが機能しない場合は、質問で提案されているように、逆の順序で追加してみて、それが機能するかどうかを確認すると思います(2番目のコードブロックで順序を切り替えるだけですか?)。

不正確な答えで申し訳ありませんが、とにかくそれがいくつかの助けになることを願っています。

于 2012-09-18T08:41:55.033 に答える