Android TableLayout宽度

x4shl7ld  于 2023-05-12  发布在  Android
关注(0)|答案(7)|浏览(112)

我有一个两列TableLayout作为滚动视图的唯一子视图。第一列包含TextViews('labels'),第二列包含EditText/Spinner/DateWidget etc('values')。尽管我已经为TableLayoutTableRow和所有小部件指定了android:layout_width="fill_parent"(在“值”列中)。
创建Activity时屏幕看起来很完美。但是,当在EditText中键入一个非常长的值时,“values”列将超出可见的屏幕区域。
我该怎么解决这个问题?

tyu7yeag

tyu7yeag1#

您可能需要使用权重来定义列的大小。因此,您将定义表布局高度以填充父级,但对于每个列,您应该将宽度设置为“0px”,并将权重设置为您希望列跨越的百分比。因此,假设您希望第一列为屏幕宽度的30%,您将其权重设置为“0.3”,第二列为“0.7”。
试试看是否有效。

hwazgwia

hwazgwia2#

解决这个问题的实用方法是在TableLayout中使用stretchColumnsshrinkColumns属性。它们的值应该是从0开始的列索引。
例如,如果您有两列表格布局,并且:

  • 您希望第二列填充空白(拉伸),以便TableLayout适合大屏幕设备上的整个父视图
  • 您希望在小屏幕设备上缩小第一列(并可能将其内容换行/省略)

您可以将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>
x9ybnkn6

x9ybnkn63#

这对我很有效。

tableLayout.setColumnShrinkable(1,true);
cuxqih21

cuxqih214#

<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>

这段代码为我对齐第一列的文本视图和编辑文本填充父级。

qlvxas9a

qlvxas9a5#

试试这个,确保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>
ztigrdn8

ztigrdn86#

我在Android 2.2上遇到了类似的问题。在我的例子中,添加android:maxWidth=“0 sp”属性很有帮助。现在EditText字段显示为我想要的-所以它仍然是相同的大小作为其他EditText字段,但additionaly它是不调整大小时,长文本输入。
下面是我的EditText定义:

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

hpcdzsge7#

它为我工作,希望这对你也有帮助

我循环3次,所以3行将添加,添加图片如下

TableRow tr = new TableRow(getActivity());
    tr.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT,2));
    tr.setGravity(Gravity.CENTER_VERTICAL);

    TextView labelText = new TextView(getActivity());

    labelText.setText(key + " ");
    labelText.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT,0.7f));
    labelText.setGravity(Gravity.LEFT);
    labelText.setTextSize(8);
    labelText.setPadding(5, 0, 5, 0);
    tr.addView(labelText);

    View seperatorView = new View(getActivity());
    seperatorView.setLayoutParams(new TableRow.LayoutParams(2, TableRow.LayoutParams.MATCH_PARENT));
    seperatorView.setBackgroundColor(getResources().getColor(R.color.radio_border_color));
    tr.addView(seperatorView);

    TextView valueText = new TextView(getActivity());
    valueText.setText(value);
    valueText.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT, 1.3f));
    valueText.setGravity(Gravity.LEFT);
   
    valueText.setTextSize(8);
    
    valueText.setMinLines(1);
    valueText.setMaxLines(Integer.MAX_VALUE);
    valueText.setPadding(5, 0, 5, 0);
    tr.addView(valueText);

    barcodeTableLayout.addView(tr);

相关问题