style - tablelayout android dinamico
Ancho de TableLayout de Android (6)
Tengo un TableLayout de dos columnas como único hijo de una vista de desplazamiento. La primera columna contiene TextViews (''etiquetas'') y la segunda columna contiene EditText / Spinner / DateWidget, etc. (''values''). Aunque he especificado Android: layout_width = "fill_parent" para TableLayout, TableRow y todos los widgets (en la columna ''valores'').
La pantalla se ve perfecta cuando se crea la actividad. Sin embargo, cuando se escribe un valor realmente largo en EditText, la columna ''valores'' va más allá del área de la pantalla visible.
¿Cómo abordo esto?
Gracias
Es posible que desee definir los tamaños de las columnas mediante el uso de un peso. Por lo tanto, debe definir la altura del diseño de la tabla para llenar el elemento principal, pero para cada columna debe establecer el ancho en "0px" y el peso en el porcentaje que desea que abarque la columna. Entonces, suponiendo que quiere que la primera columna tenga el 30% del ancho de la pantalla, configure su peso en "0.3" y la segunda columna en "0.7".
Pruébalo y ve si eso funciona.
Esto funcionó para mí ...
tableLayout.setColumnShrinkable(1,true);
Pruebe esto, asegúrese de que android:singleLine="false"
y 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>
Tuve un problema similar con EditText en Android 2.2. En mi caso, agregar propiedad android: maxWidth = "0sp" ayudó. Ahora el campo EditText se muestra como yo quería, por lo que sigue siendo del mismo tamaño que otros campos de EditText, pero adicionalmente no se cambia de tamaño cuando se ingresa texto largo.
Aquí está mi definición EditText:
<EditText android:id="@+id/extra_edit"
android:padding="3dip"
android:inputType="textImeMultiLine"
android:maxWidth="0sp"
android:layout_width="fill_parent"
/>
La forma pragmática de resolver esto es usar los stretchColumns
y shrinkColumns
en TableLayout
. Sus valores deben ser índices de columnas basados en 0.
Por ejemplo, si tiene un diseño de tabla de dos columnas y:
- Desea que la segunda columna se llene de espacio vacío (stretch) para que
TableLayout
adapte a la vista primaria completa en un dispositivo de pantalla grande - Desea que la primera columna se reduzca (y su contenido posiblemente esté envuelto / ellipsizado) en un dispositivo de pantalla pequeña
usted definiría su TableLayout
como:
<TableLayout
android:id="@+id/my_table_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:stretchColumns="1"
android:shrinkColumns="0" >
</TableLayout>
<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>
Este código funcionó para mí para alinear la vista de texto en la primera columna y editar el padre de relleno de texto.