1

テーブルを意図したとおりに表示するのに少し問題があります。これらはいくつかの質問ですが、それらはすべて下の写真と私が提供する詳細を参照しているので、それらはすべて単一の投稿にあるべきだと思いました。

これが私がこれまでに達成したことです:

ここに画像の説明を入力してください

ヘッダー行には、Buttonタイプの要素が1つ含まれています。

    TableRow.LayoutParams params = new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT);
    Button bt = new Button(getContext());
    bt.setText("Column1");
    mHeader.addView(bt, params);
    mHeader.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT));
    addView(mHeader);

テーブルの残りの部分は次のように作成されます:
(MessagerowはTableRowを拡張し、TextViewメンバーを持っています)

        for(int i = 0; i < 100; i++) {
            MessageRow mr = new MessageRow(getContext());
            // stuff to set the TexView text and color
            mr.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT));
            this.addView(mr);
        }



1.ヘッダー行の高さを行に近づけるにはどうすればよいですか?

2.ボタンを行の全幅に表示するにはどうすればよいですか?
テーブルが空で、ヘッダーだけのテキスト行がない場合、ボタンは行幅と一致します。テキストの行を追加するとすぐに、列の幅は調整されますが、ボタンの幅は調整されません。

3.行を画面の幅いっぱいにするにはどうすればよいですか?(MATCH_PARENTはそれを行いません)

4.テーブルの行の間に細い線を引くにはどうすればよいですか?
MessageRowのonDraw()関数をオーバーライドしようとしましたが、一度も呼び出されません。

誤解しないでください。私はあなたが私のために私の仕事をすることを求めているのではありません。これらは私が自分で解決しようとした問題であり、グーグルで検索して同様の投稿を読みましたが、答えは見つかりませんでした。
注:Android用JavascriptのUIデザインには、これらすべての小さな詳細に対する明確な制御と明確なドキュメントが欠けていることがわかりました。

編集
これは私がテーブルを作成する方法です:

    TableLayout mTable = new TableLayout(this);

    HorizontalScrollView hview = (HorizontalScrollView) findViewById(R.id.hscroll);

    populate(mTable);
    mTable.setLayoutParams(new TableLayout.LayoutParams( TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.WRAP_CONTENT));
    mTable.setBackgroundColor(Color.WHITE);

    hview.addView(mTable);
4

2 に答える 2

2
  1. ヘッダー行の高さを行のようにするにはどうすればよいですか?

デフォルトを使用すると、Button多くのことを行う必要はありません。はButton、ボタンのテキストと表示される境界線との間にいくらかのスペースがある 9 パッチ イメージを使用します。小さいフォントを使用することもできますが、見栄えが悪くなります。ボタンに独自の背景を使用し、(デフォルトの 9 パッチ画像の) デフォルトの余分なスペースを取り除くことで、最終的な高さがTextViews からのテキストの高さに近くなります。または、固定値を使用してすべての行に標準の高さを適用してみてください。

  1. ボタンが行の全幅を占めるようにするにはどうすればよいですか?

TextView複数あると思うMessageRowので、追加するButtonと最初の列に移動します(最初のに対応TextView)。この場合、inの数を表す列の数にまたがってButton スパンを作成します。TextViewsMessageRow

TableRow.LayoutParams params = new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT);
params.span = 3; // if you have 3 `TextView` in the MessageRow
    Button bt = new Button(getContext());
    bt.setText("Column1");
    mHeader.addView(bt, params);

そうでない場合は、詳細を追加します。

  1. 行を画面幅いっぱいにするにはどうすればよいですか? (MATCH_PARENTはしません)

以前の質問の 1 つで述べたように、なぜそうなるのかはわかりません (しかし、この問題を克服するためのいくつかの解決策を提供しました)。また:

  1. mHeaderもう 1 つMessageRowは a の子であり、それらに対して使用するTablelayout正しいのは、親の であり、notです。LayoutParamsLayoutParamsTableLayout.LayoutParams TableRow.LayoutParams

  2. (以前の質問で見たものから)にいくつか追加TextViewし、それらの子ビューをに追加します。MessageRowTableRow.LayoutParamsMessageRow

  3. コード内のあらゆる場所でのみ使用WRAP_CONTENTします。LayoutParams幅 (コンストラクターの最初のパラメーター) をFILL_PARENT/に設定することをお勧めします。MATCH_PARENT

  1. 表の行間に細い線を引くにはどうすればよいですか?

Viewセパレーターとして機能する単純なものを使用できます。

for(int i = 0; i < 100; i++) {
   MessageRow mr = new MessageRow(getContext());
   // stuff to set the TexView text and color
   mr.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.FILL_PARENT, TableLayout.LayoutParams.WRAP_CONTENT));
   this.addView(mr);
   View separator = new View(getContext());
   separator.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.FILL_PARENT, 3)));
   separator.setBackgroundColor(Color.RED);
   this.addView(separator);
}

100 行あるため、別の 100 ビューをレイアウトに追加する上記の方法の代わりに、区切り線をTableRow(headerおよび) の背景として設定することができます。MessageRow

追記:

1 つのアクティビティ レイアウトに追加するビューがたくさんあり、約 100 行あります。MessageRow単純なものよりも複雑な場合TextView(私はそうだと思います)、パフォーマンスの問題が発生する可能性があります。ListViewすばらしいウィジェットをご覧になることをお勧めします。

于 2012-04-23T16:35:21.350 に答える
1

ここにはプログラミング環境はありませんが、いくつかの質問に答えてみます。

  1. ヘッダー行 (ボタン) がテストベースの行よりも高い理由は、ボタンがより多くのスペースを必要とし、行がそれに対応するためです。デフォルトのボタンには、テキストの上部と下部の両方にパディングがあります。最善の選択肢は、独自のボタンを作成することだと思います。これにより、ルック アンド フィールを制御できるという追加の利点が得られます。他の人が以前にこの問題を抱えていたようです:ボタンの下部パディングを取り除くことができません

  2. ボタンは wrap_content に設定されています。これは、必要以上に大きくならないことを意味します(テキスト「Column1」またはそこに配置したものに合わせて拡大/縮小します)。Button WRAP を作成する代わりに、FILL_PARENT にする必要があると思います。

  3. 画面の幅を埋める必要があるのはテーブル行ではなく、画面を埋める必要があるのはテーブルです。テーブルを定義する場所はどこでも、おそらく水平ディメンションの WRAP_CONTENT に設定されます。これを FILL_PARENT に設定すると、テーブルはコンテナーの全幅に拡張する必要があります (この場合、画面の全幅に拡張する必要があります)。

  4. これを行うには、おそらくいくつかの異なる方法があります。私が最近使用した方法の 1 つは、基本的に画面全体に水平バーのように見える View タグを利用することです。以下、実装方法のリンクです。 http://sonnygill.net/android/horizo​​ntal-rule/

于 2012-04-23T16:46:31.260 に答える