web-dev-qa-db-ja.com

Android TableLayout Width

スクロールビューの唯一の子として、2つの列TableLayoutがあります。最初の列にはTextViews( 'labels')が含まれ、2番目の列にはEditText/Spinner/DateWidget etc( 'values')が含まれます。 TableLayoutTableRowおよびすべてのウィジェット( 'values'列)にAndroid:layout_width="fill_parent"を指定しましたが。

アクティビティが作成されると、画面は完璧に見えます。ただし、EditTextに非常に長い値を入力すると、「値」列が表示画面領域を超えます。

これにどのように取り組むのですか?

32
Sameer Segal

重みを使用して列のサイズを定義することもできます。したがって、テーブルレイアウトの高さを定義して親を埋めますが、列ごとに幅を「0px」に設定し、重みを列に広げる割合に設定する必要があります。したがって、最初の列を画面幅の30%にしたい場合、その重みを「0.3」に設定し、2番目の列を「0.7」に設定します。

それを試して、それが機能するかどうかを確認してください。

58

これを解決する実用的な方法は、stretchColumnsshrinkColumnsおよびTableLayout属性を使用することです。それらの値は、列の0ベースのインデックスでなければなりません。

たとえば、2列のテーブルレイアウトがあり、次の場合:

  • TableLayoutが大画面デバイスの親ビュー全体に収まるように、2番目の列を空のスペース(ストレッチ)で埋めたい
  • 小さな画面デバイスで最初の列を縮小する(およびその内容をラップ/省略可能にする)必要がある

TableLayoutを次のように定義します。

<TableLayout
    Android:id="@+id/my_table_layout"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:stretchColumns="1"
    Android:shrinkColumns="0" >
</TableLayout>
24
Jeshurun

これは私のために働いた..

tableLayout.setColumnShrinkable(1,true);
7
Inco Mob
<TableLayout 
Android:layout_height="fill_parent" 
Android:layout_width="fill_parent"
Android:layout_marginLeft="5dp"
Android:layout_marginRight="5dp">
<TableRow 
Android:layout_height="fill_parent"
Android:layout_width="fill_parent">
<TextView 
Android:layout_width="wrap_content"
Android:text="Name " 
Android:layout_height="fill_parent">
</TextView>
<EditText 
Android:layout_width="0dp"
Android:layout_weight="1"
Android:hint="name"
Android:layout_height="wrap_content" 
>
</EditText>
</TableRow>
</TableLayout>

このコードは、最初の列にテキストビューを配置し、テキスト入力の親を編集するのに役立ちました。

5
Thomas V J

Android 2.2。私の場合、Android:maxWidth = "0sp"プロパティの追加が助けになりました。EditTextフィールドが思い通りに表示されます。他のEditTextフィールドと同様ですが、さらに長いテキストが入力されたときにサイズ変更されません。

EditTextの定義は次のとおりです。

<EditText Android:id="@+id/extra_edit"
       Android:padding="3dip"
       Android:inputType="textImeMultiLine"
       Android:maxWidth="0sp"
       Android:layout_width="fill_parent"
       />
0
GrzesiekK

これを試して、Android:singleLine="false"およびAndroid:inputType="textMultiLine"

<TableLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent" Android:layout_height="fill_parent"
    Android:stretchColumns="1">
    <TableRow Android:layout_height="wrap_content"
        Android:layout_width="fill_parent">

        <TextView Android:text="Label:" />
        <EditText Android:id="@+id/entry" Android:inputType="textMultiLine"
            Android:layout_width="wrap_content" Android:layout_height="wrap_content"
            Android:singleLine="false" />
    </TableRow>
</TableLayout>
0
SteD