He examinado numerosas preguntas similares aquí en SO, pero nada ayuda. Tengo una jerarquía de diferentes diseños anidados, todos tienen android:layout_width="fill_parent"
, y el diseño más interno tiene android:layout_width="wrap_content
: necesito alinearlo en el centro (horizontalmente). ¿Cómo puedo hacer eso?
Actualización: He encontrado la causa del problema: si coloco LinearLayout interno en RelativeLayout con android:layout_width="fill_parent"
, todavía envuelve su contenido. Sin embargo, TableRow realmente está llenando la pantalla.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<TableLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<TableRow >
<LinearLayout
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="1"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="2"
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
</TableRow>
</TableLayout>
</FrameLayout>
</LinearLayout>
fuente
android:layout_gravity="center"
de la disposición que contiene los TextViews - no ayuda, que todavía está alineado a la izquierda. También intenté establecer el ancho de este diseño enwrap
yfill
- sin diferencia.Intente esto en su diseño lineal
android:layout_centerHorizontal="true" android:layout_centerVertical="true"
fuente
<RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" > <LinearLayout android:orientation="horizontal" android:layout_centerHorizontal="true" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="1" android:textAppearance="?android:attr/textAppearanceLarge" /> <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="2" android:textAppearance="?android:attr/textAppearanceLarge" /> </LinearLayout> </RelativeLayout>
considere la posibilidad de envolver relatedLayout sobre LinearLayout.
android:layout_centerHorizontal="true"
colocará el centro de vista horizontal.fuente
LinearLayout
'slayout_width
que deberían serwrap_content
y nomatch_parent
. La misma lógica se aplica para la alineación verticalagregar
layout_gravity="center"
o"center_horizontal"
al diseño principal.En una nota al margen, tu
LinearLayout
interiorTableRow
parece innecesario, ya que aTableRow
es una horizontalLinearLayout
.fuente
Prueba esto:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <FrameLayout android:layout_width="fill_parent" android:layout_height="wrap_content" > <TableLayout android:layout_width="fill_parent" android:layout_height="wrap_content" > <TableRow > <LinearLayout android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_horizontal" android:layout_gravity="center_horizontal" > <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="1" android:textAppearance="?android:attr/textAppearanceLarge" /> <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="2" android:textAppearance="?android:attr/textAppearanceLarge" /> </LinearLayout> </TableRow> </TableLayout> </FrameLayout> </LinearLayout>
fuente
Esto funcionó para mí ... agregando una vista vacía ...
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:orientation="horizontal" > <View android:layout_width="0dp" android:layout_height="0dp" android:layout_weight="1" /> <com.google.android.gms.ads.AdView android:id="@+id/adView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" ads:adSize="BANNER" ads:adUnitId="@string/banner_ad_unit_id" > </com.google.android.gms.ads.AdView> <View android:layout_width="0dp" android:layout_height="0dp" android:layout_weight="1" /> </LinearLayout>
fuente
Intente
<TableRow android:gravity="center_horizontal">
esto centrará el LinearLayout interno dentro de la fila de la tabla.fuente
Me he enfrentado a la misma situación al diseñar una notificación personalizada. Lo he intentado con el siguiente atributo establecido con verdadero.
android:layout_centerInParent.
fuente
esto funcionó para mí.
<LinearLayout> . . . android:gravity="center" . .> <TextView android:layout_gravity = "center" /> <Button android:layout_gravity="center" /> </LinearLayout>
por lo que está diseñando el Diseño lineal para colocar todo su contenido (TextView y Button) en su centro y luego TextView y Button se colocan en relación con el centro del Diseño lineal
fuente
La explicación de @jksschneider es casi correcta. Asegúrese de no haber configurado ninguno
gravity
para el diseño principal y luego configurelayout_gravity="center"
su vista o diseño.fuente
Experimenté esto mientras trabajaba con RelativeLayouts anidados. Mi solución terminó siendo simple, pero es un pequeño problema que vale la pena conocer.
Mi diseño se definió con ...
android:layout_height="fill_parent" android:layout_below="@id/someLayout android:gravity="center"
... sin embargo, no pensé que el diseño debajo de este estuviera colocado encima. Todo dentro de este diseño se desplazó hacia la parte inferior en lugar de centrarse. Añadiendo ...
android:layout_above="@id/bottomLayout"
... solucionó mi problema.
fuente
para ImageView u otras vistas cuyo diseño-gravedad o gravedad no existe use:
android:layout_centerInParent="true"
en el niño (tenía un diseño relativo con un ImageView cuando era niño).fuente
El problema es que la gravedad de la raíz (el diseño principal donde almacena los otros elementos) no está configurada. Si lo cambia para centrar la gravedad de los otros elementos debe funcionar bien.
fuente
A continuación se muestra el código para poner su diseño lineal en la parte inferior y poner su contenido en el centro. Tienes que usar RelativeLayout para establecer Layout en la parte inferior.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="50dp" android:background="#97611F" android:gravity="center_horizontal" android:layout_alignParentBottom="true" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="50dp" android:text="View Saved Searches" android:textSize="15dp" android:textColor="#fff" android:gravity="center_vertical" android:visibility="visible" /> <TextView android:layout_width="30dp" android:layout_height="24dp" android:text="12" android:textSize="12dp" android:textColor="#fff" android:gravity="center_horizontal" android:padding="1dp" android:visibility="visible" /> </LinearLayout> </RelativeLayout>
fuente