web-dev-qa-db-ja.com

Androidテーブルレイアウトのフォーマットの問題

TableLayoutを画面内に収められませんwhen the text cell is large、テキストが折り返されているにもかかわらずinside the cell

これは私のTableLayoutです。単純な2行2列のテーブル。左の列のセルはmultilineです。これらのセルのいずれかのテキストが2行に分割できるほど大きい場合、列は画面全体に拡大され、右側の列が画面から押し出されます。

どうして?テーブル全体を画面内に留めるにはどうすればよいですか?ヒントは大歓迎です。

私のTableLayoutは次のとおりです。

<TableLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/myTableLayout"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
>
<TableRow>
    <TextView
        Android:text="Account 4 with a very large name to see if it breaks  on two or more lines"
        Android:singleLine="false"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        >
    </TextView>
    <TextView
        Android:text="$400.00"
        Android:gravity="right"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        >
    </TextView>
</TableRow>

<TableRow>
    <TextView
        Android:text="Account 5"
        Android:singleLine="false"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        >
    </TextView>
    <TextView
        Android:text="$400.00"
        Android:gravity="right"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        >
    </TextView>
</TableRow>

</TableLayout>

レイアウトを表示するコードは基本です:

public class AccountBrowserTest 
    extends Activity
{
    public void onCreate(Bundle savedInstanceState) 
    {    
        super.onCreate(savedInstanceState);

        this.setContentView(R.layout.accountbrowser_test);

    }
} 
25
sammybar

Android:stretchColumnsおよびAndroid:shrinkColumnsTableLayout要素に追加します。

<TableLayout
  Android:layout_width="match_parent"
  Android:layout_height="wrap_content"
  Android:stretchColumns="1"
  Android:shrinkColumns="1">

1の値は、変更を加える列です。次のように複数の値を指定できます。

Android:stretchColumns="0,1"

または、次のようにすべての列に変更を加えたい場合:

Android:stretchColumns="*"

詳細については、こちらをご覧ください: http://Android-pro.blogspot.com/2010/02/table-layout.html

36
Paul

私のアプリにも同じ問題があり、次の解決策が見つかりました:

<TableLayout 
   Android:shrinkColumns="0"
   Android:stretchColumns="1" 
   Android:layout_width="match_parent"
   Android:layout_height="wrap_content">
</TableLayout>

これは2列で正常に機能します。

8
Jonathan Roth

同じ問題があり、追加して解決しました

Android:stretchColumns="0"

tableLayout要素と設定に

Android:layout_width="0dp"

長すぎるTextViewで。

6
Jeb

テーブルレイアウト内では、フィッティングのために縮小を許可する列のshrinkColumnsプロパティを使用します

最も簡単な方法は次のとおりです。

<TableLayout
Android:shrinkColumns="*"/>

すべての列を縮小するには、「*」の代わりに書き込むことができます。縮小する列のインデックスは、

<TableLayout
Android:shrinkColumns="0,1"/>

列のインデックスは0から始まるため、最新のコードでは、最初の列(index = 0)と2番目の列(index = 1)を縮小できます。

5

一時的な修正があります、実行してください:

   Android:stretchColumns = " (number of actual col) - 1 "

私の場合、解決策はありませんでした。

1
Ashay

wrap_contentは、マルチラインセルの幅です。

より明確な幅を与えるいくつかの方法を試すことができます...つまり、width to 0、およびすべてのセルにlayout_gravity = 1。これにより、各列の幅が同じになります(または、1つの列の重みを他の列よりも大きくする場合は調整できます)。

0
Cheryl Simon

このコードがお役に立てば幸いです。パブリッククラスMainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}
    <TextView
        Android:id="@+id/tv1"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:padding="8dp"
        Android:singleLine="false"
        Android:text="Account 4 with a very large \n name to see if it breaks \n on two or more lines" >
    </TextView>

    <TextView
        Android:id="@+id/tv2"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:padding="8dp"
        Android:text="$400.00" >
    </TextView>
</TableRow>
0
gyan awasthi

TableLayoutでストレッチ列やシュリンク列を操作することもできます。

0
Jon O

免責事項:私はレイアウトがあまり得意ではないので、いくつかの値で少し遊んだだけで、これはうまくいくように見えました(理由については詳しく説明できません)。

<TableLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/myTableLayout"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent">

    <TableRow>
        <TextView
            Android:text="Account 4 with a very large name to see if it breaks  on two or more lines"
            Android:singleLine="false"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_weight="1"
        />
        <TextView
            Android:text="$400.00"
            Android:gravity="right"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_weight="0.001"
        />
    </TableRow>

    <TableRow>
        <TextView
            Android:text="Account 5"
            Android:singleLine="false"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_weight="1"
        />
        <TextView
            Android:text="$400.00"
            Android:gravity="right"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_weight="0.001"
        />
    </TableRow>
</TableLayout>

また、私はアクティビティでこのレイアウトを試していないことに注意してください。XMLエディターのレイアウトビューでしか見ていませんが、少なくともそこでは見事でした。

0
Julian