1

この質問への答えはおそらくとても簡単だと思いますが、私は苦労しています...。

複数の列を持つTableLayoutがあります。最後の列の幅を固定したいのですが、プログラムから可能な限り広い文字列を保持できるように、その幅を定義したいと思います。つまり、折り返したり、スペースを無駄にしたりすることなく、「この文字列」を含めるのに十分な幅が常にあります。

ListView内にこれらのTableLayoutがあるので、これを実行したいので、最後の列の幅が可変の場合は非常に見栄えが悪くなります。

文字列の幅を取得しようとしましたが、TextViewに配置する場合でも、適切なすべてのTextViewでgetTextSize()を呼び出してからsetWidth()を呼び出します。私がそこで遭遇した問題は、gettextSize()がピクセルを返すことですが、setWidthはScaledPixelsを使用します。

本当に簡単な解決策があると確信しています。誰か助けてもらえますか?

4

1 に答える 1

4

XML レイアウトで android:width="wrap_content" を使用して、最後の列の幅を定義していますか?

編集:テーブルを保持するリストビューがあり、リストビューのすべての行がテーブルの最後の行と同じ長さになるようにしたいと思います。右?

現在、非常に洗練されていない解決策を 1 つしか思いつきません。それには、リスト ビューを作成する前にすべての文字列を調べる必要があります。

一般的なロジックは次のようになります。

配列からすべての文字列を取得していると仮定します。それをデータと呼びましょう。

あなたが持っている最長の文字列を表すグローバル浮動小数点変数を確立し、それを maxLength と呼びましょう。

レイアウトに表示されないテキストビュー(invisibleTextと呼びましょう)を作成します。これは、設定することで実行できます

android:visibility="gone"

それで:

int size = data.length;
maxLength = 0.0f;
for(int i = 0;i<size;i++){
   invisibleText.setText(data[i]);
   float thisLength = invisibleText.getTextSize();
   if(thisLength>maxLength) maxLength = thisLength;
}

リストビューコンストラクターで:

TextView text = (TextView)findViewById(R.id.the_text_view_you_want);
text.setText(data[position]);
text.setWidth(maxLength)

テーブルの列は android:width="wrap_content" を使用する必要があります。このコードはテストしていませんが、動作するはずです。以前に同様のことを行ったことがあります。

于 2010-10-18T21:55:42.757 に答える