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);
}
}
Android:stretchColumns
およびAndroid:shrinkColumns
をTableLayout
要素に追加します。
<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
私のアプリにも同じ問題があり、次の解決策が見つかりました:
<TableLayout
Android:shrinkColumns="0"
Android:stretchColumns="1"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
</TableLayout>
これは2列で正常に機能します。
同じ問題があり、追加して解決しました
Android:stretchColumns="0"
tableLayout要素と設定に
Android:layout_width="0dp"
長すぎるTextViewで。
テーブルレイアウト内では、フィッティングのために縮小を許可する列のshrinkColumnsプロパティを使用します
最も簡単な方法は次のとおりです。
<TableLayout
Android:shrinkColumns="*"/>
すべての列を縮小するには、「*」の代わりに書き込むことができます。縮小する列のインデックスは、
<TableLayout
Android:shrinkColumns="0,1"/>
列のインデックスは0から始まるため、最新のコードでは、最初の列(index = 0)と2番目の列(index = 1)を縮小できます。
一時的な修正があります、実行してください:
Android:stretchColumns = " (number of actual col) - 1 "
私の場合、解決策はありませんでした。
wrap_content
は、マルチラインセルの幅です。
より明確な幅を与えるいくつかの方法を試すことができます...つまり、width to 0
、およびすべてのセルにlayout_gravity = 1
。これにより、各列の幅が同じになります(または、1つの列の重みを他の列よりも大きくする場合は調整できます)。
このコードがお役に立てば幸いです。パブリッククラス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>
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"
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エディターのレイアウトビューでしか見ていませんが、少なくともそこでは見事でした。