¿La razón detrás del margen extra de 8dp en una vista? No formas de resolver

En mi archivo xml de la actividad estoy obtener un margen extra 8dp en el lado izquierdo en la vista (representado como subrayado).

  • Razón para obtener un margen de 8dp extra en "vista"? (Subrayado en TextView).
  • He dado 48dp margen izquierdo en esa vista.

Por encima de esa vista tengo

<TextView> which has a drawable icon in left. 
  • Con el margen izquierdo 24dp y el relleno estirable 24dp.

Razón de hacer.

  • Estoy tratando de crear un subrayado bajo mis palabras usando una vista con fondo negro.
  • He dado 48dp como margen izquierdo en xml.but como se muestra en la foto que estoy recibiendo 56dp.

  • La diferencia entre las líneas es 8dp.

Captura de pantalla de mi aplicación

Introduzca aquí la descripción de la imagen

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" android:background="#FAFAFA" android:orientation="vertical" tools:context="com.hysterics.delhishop.AccountSetting"> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="32dp" android:layout_marginTop="16dp" android:gravity="center|left" android:paddingLeft="16dp" android:textAllCaps="true" android:textStyle="bold" android:text="@string/hello_user" android:textColor="@color/primary_text" android:textSize="15sp"/> <TextView android:id="@+id/user_account_information" android:layout_width="match_parent" android:layout_height="54dp" android:layout_marginLeft="24dp" android:drawableLeft="@drawable/ic_account_box_black_18dp" android:drawablePadding="24dp" android:gravity="center|left" android:textAllCaps="true" android:textStyle="bold" android:text="@string/account_information" android:textColor="@color/primary_text" android:textSize="15sp"/> <View android:layout_width="match_parent" android:layout_height="1dp" android:layout_gravity="center" android:layout_marginLeft="48dp" android:background="@android:color/darker_gray"/> <TextView android:layout_width="match_parent" android:layout_height="54dp" android:layout_marginLeft="24dp" android:drawableLeft="@drawable/ic_home_black_18dp" android:drawablePadding="24dp" android:gravity="center|left" android:textAllCaps="true" android:textStyle="bold" android:text="@string/account_address" android:textColor="@color/primary_text" android:textSize="15sp"/> <View android:layout_width="match_parent" android:layout_height="1dp" android:layout_gravity="center" android:layout_marginLeft="48dp" android:background="@android:color/darker_gray"/> ................ ................ </LinearLayout> </ScrollView> 

Aquí está mi archivo de actividad.

 public class AccountSetting extends AppCompatActivity { public static final String TAG_USER_NAME_DIALOG = "edit_text_dialog"; @InjectView(R.id.account_setting_toolbar) Toolbar accountSettingToolbar; @InjectView(R.id.user_account_information) TextView userAccountInformation; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_account_setting); ButterKnife.inject(this); setToolbar(); } 
  • Gracias en adavnce 🙂

Debido a que establece la vista de subrayado layout_width = "match_parent" y layout_gravity = "center".
Después de las vistas medir:
– el ancho de la vista primaria lineal es 1080px;
– el ancho de la vista de subrayado es 936px (debido a layout_marginLeft = "48dp" (144px))
Cuando el diseño de las vistas:
– Debido a que la orientación de los padres lineales es "vertical", por lo que cuando se establece layout_gravity = "center" igual a layout_gravity = "center_horizontal".
– Para un niño "center_horizontal", el padre linear margará el X-center de la vista secundaria con su X-center
Así que el eje X de la vista de subrayado será (en px):
540 (X-center of parent) + 144 (48dp margin left) - 468 (half of child's width) = 216px (72dp)
Por eso con layout_gravity = "center", verá que la vista de subrayado obtendrá un margen adicional de 24dp.

Usted está agregando el relleno dibujable al icono y el marginLeft es completamente diferente entre el subrayado y el icono. Y también tienes que tener en cuenta el tamaño del icono en sí. Me sorprendería que tendría exactamente la misma alineación.

En lugar de esto, ¿por qué no utiliza un LinearLayout horizontal con peso entre dos diseños lineales, uno con el icono y otra vista transparente con la misma altura que el subrayado y el otro diseño lineal que contiene texto y subrayado perfectamente alineados. Sin márgenes no hay nada, sólo distribución de peso. Algo como esto:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="100dp" android:orientation="horizontal" android:weightSum="10"> <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="2" android:orientation="vertical"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" /> <View android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="8" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Account Information" android:textSize="20sp" /> <View android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> </LinearLayout> 

Esta es sólo una posible solución que puede garantizar alineaciones exactas.

Debido a que su ancho de vistas es match_parent & android:layout_marginLeft & android:layout_gravity="center" está causando que la vista cambie fuera de la pantalla.

Vea esto para más información..

Pruebe con la eliminación de layout_gravity de su Centro de vistas (que dibuja la línea)

 android:layout_gravity="center" 

y use

 android:layout_marginLeft="@dimen/space_large" 

en lugar de

 android:layout_marginLeft="@dimen/space_xxlarge" 

Según estas dos líneas:

 android:drawableLeft="@drawable/ic_account_box_black_18dp" android:drawablePadding="@dimen/space_large" 

Tendrás un 18dp de 18dp de ancho, luego un relleno de @dimen/space_large , que parece ser de 24dp para un total de 42dp de relleno entre el borde izquierdo del TextView y el inicio del texto en sí.

Sin embargo, el layout_marginLeft en sus líneas es @dimen/space_xxlarge o 48dp . Como uno es 42dp y el otro es 48dp , no se alinean. Tendrá que cambiar uno u otro si desea que los elementos aparezcan visualmente en línea.

 <View android:layout_width="match_parent" android:layout_height="1dp" android:layout_gravity="center" android:layout_marginLeft="48dp" android:background="@android:color/darker_gray"/> 

Hay varias vistas en tu diseño y estás usando layout_gravity = "center". Así que View está intentando ajustarse al centro dentro de LinearLayout . Sólo intenta quitar layout_gravity o usa layout_gravity="left" .

Ancho de icono ausente

Has agregado marginLeft de 24dp también drawablePadding de 24dp y dices un total de 48dp Pero te olvidas del ancho del icono dibujable. Por lo tanto, la primera de la CUENTA "A" no tiene un margen de 48dp.

Usted está usando LinearLayout y everyting está en el lado izquierdo así que no hay necesidad de ninguna gravedad.

También dice que la eliminación de la gravedad de la View hace 36dp de la izquierda. Si eso es correcto. Te has perdido el ancho de Drawable Icon de tu cálculo.

El layout_margin de View es igual a 48dp + width of icon . Esa es la razón por la que tienes, creo.

Solo quita

 android:layout_gravity="center" 
  • Cómo crear mediante programación el diseño de un fragmento?
  • Prefijo de espacio de nombres inesperado "xmlns" encontrado para la etiqueta LinearLayout
  • ¿Vista de lista con título, imagen y texto?
  • ¿Cómo se utiliza obtenerStyledAttributes (int ) con temas internos de Android
  • Diseño de Android: apila dos TextViews verticalmente, dentro de una fila ListView
  • ¿Cómo agregar documentación a atributos personalizados?
  • Añadir una imagen de fondo a la forma en XML Android
  • ¿Cómo puedo acceder a un valor BuildConfig en mi archivo AndroidManifest.xml?
  • Forzar libgdx de Android en modo inmersivo
  • Instanciar una clase interna (Preferencia) en un archivo xml
  • Cómo obtener valores de BuildConfig desde xml?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.