Android: quite el margen izquierdo del diseño personalizado de la barra de acciones

Estoy usando una vista personalizada de la barra de acciones, y como puede ver en la captura de pantalla a continuación, hay un espacio gris en blanco en la barra de acciones. Quiero eliminarlo

enter image description here

Qué he hecho:

res / values-v11 / styles.xml

 @style/ActionBarStyle @style/ActionBarStyle  

res / values ​​/ my_custom_actionbar.xml

   60dp   

Manifiesto

     

Actividad principal

 public void onCreate(Bundle bundle) { super.onCreate(bundle); ActionBar actionbar = getSupportActionBar(); actionbar.setDefaultDisplayHomeAsUpEnabled(false); actionbar.setDisplayHomeAsUpEnabled(false); actionbar.setDisplayShowCustomEnabled(true); actionbar.setDisplayShowHomeEnabled(false); actionbar.setDisplayShowTitleEnabled(false); actionbar.setDisplayUseLogoEnabled(false); actionbar.setHomeButtonEnabled(false); // Add the custom layout View view = LayoutInflater.from(this).inflate(R.layout.actionbar, null, false); actionbar.setCustomView(view); } 

He encontrado una publicación reciente, que señala que hay un problema con la última versión. También actualicé ADT y SDK a Android 5.

La vista personalizada de Android ActionBar no llena al padre

No sé que debería hacer.

Editar (solución parcial):

No funciona en Android <= API 10.

La vista personalizada de Android Lollipop, AppCompat ActionBar no ocupa todo el ancho de pantalla

¿Qué he cambiado?

Use la última versión de SDK:

  

Agregue una toolbarStyle :

  @style/ActionBarStyle @style/ActionBarStyle @style/ToolbarStyle @style/ToolbarStyle   0dp 0dp  

Si está agregando la Toolbar través de XML, simplemente puede agregar atributos XML para eliminar las inserciones de contenido.

  

prueba esto:

  ActionBar actionBar = getSupportActionBar(); actionBar.setDisplayShowHomeEnabled(false); actionBar.setDisplayShowCustomEnabled(true); actionBar.setDisplayShowTitleEnabled(false); View customView = getLayoutInflater().inflate(R.layout.main_action_bar, null); actionBar.setCustomView(customView); Toolbar parent =(Toolbar) customView.getParent(); parent.setPadding(0,0,0,0);//for tab otherwise give space in tab parent.setContentInsetsAbsolute(0,0); 

Usé este código en mi proyecto, buena suerte;

El recuadro de la izquierda se debe al contentInsetStart la barra de herramientas, que por defecto es 16dp.

Cambie esto para alinearlo con la línea clave.

Actualización para la biblioteca de soporte v24.0.0:

Para que coincida con la especificación Material Design hay un atributo adicional contentInsetStartWithNavigation que de forma predeterminada es 16dp. Cambie esto si también tiene un ícono de navegación.

Resultó que esto es parte de una nueva especificación de diseño de materiales presentada en la versión 24 de la biblioteca de diseño.

https://material.google.com/patterns/navigation.html

Sin embargo, es posible eliminar el espacio adicional agregando la siguiente propiedad al widget Barra de herramientas.

 app:contentInsetStartWithNavigation="0dp" 

Antes de : enter image description here

Después : enter image description here

Encontré otra resolución (referencia appcompat-v7) que cambia el toolbarStyle, siguiendo el código:

 @style/Widget.Toolbar  
  

Esto debería ser lo suficientemente bueno.

Solo modifica tu styles.xml

   

En lugar de agregar una barra de herramientas en el diseño, puede configurar su vista personalizada como se muestra a continuación.

 Toolbar parent = (Toolbar) customView.getParent(); parent.setContentInsetsAbsolute(0,0); 

Solo agregue la app:contentInsetStart="0dp" a la barra de herramientas elimine ese espacio izquierdo.

Entonces, la definición de tu barra de herramientas es similar a esta

   

y se ve así

enter image description here

Usando AppCompatAcitivty puedes usar solo por

 Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar); View logo = getLayoutInflater().inflate(R.layout.custom_toolbar, null); mToolbar.addView(logo, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); mToolbar.setContentInsetsAbsolute(0,0); 

Necesita agregar esta línea app2: contentInsetStart = “0dp” en su barra de herramientas

  

No encontré una solución para mi problema (primera imagen) en ninguna parte, pero finalmente termino con la solución más simple después de unas horas de excavación. Tenga en cuenta que probé con muchos atributos xml, como la app:setInsetLeft="0dp" , etc. pero ninguno de ellos me ayudó en este caso.

Foto 1 enter image description here

el siguiente código resolvió este problema como en la Imagen 2

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); //NOTE THAT: THE PART SOLVED THE PROBLEM. android.support.design.widget.AppBarLayout abl = (AppBarLayout) findViewById(R.id.app_bar_main_app_bar_layout); abl.setPadding(0,0,0,0); } 

Cuadro 2

enter image description here

La respuesta correcta y más simple está en otra publicación, esta:

La vista personalizada de Android Lollipop, AppCompat ActionBar no ocupa todo el ancho de pantalla

Está marcado como correcto y, después de probarlo, puedo confirmar que funciona.

Crea una barra de herramientas como esta:

  

por favor, siga este enlace para obtener más información – Android Tips

solo agregar android:padding="0dp" funciona para mí

  
 ActionBar ab = getSupportActionBar(); ab.setDisplayShowHomeEnabled(true); ab.setDisplayShowCustomEnabled(true); setDisplayShowTitleEnabled(true); View customView = getLayoutInflater().inflate(R.layout.activity_main,null); //here activity_main.xml is the GUI design file. ab.setCustomView(customView); Toolbar parent =(Toolbar) customView.getParent(); //use V7 Toolbar import parent.setContentInsetsAbsolute(0, 0); setPadding(5,0,0,0); ab.setIcon(R.mipmap.ic_launcher); 

Puede usar el diseño relativo dentro del grupo de vista de la barra de herramientas en su archivo xml y ajustar las posiciones de los widgets cuando los necesite para su caso de uso. No es necesario crear un diseño personalizado, inflarlo y adjuntarlo a la barra de herramientas. Una vez hecho en su código java, use setContentInsetsAbsolute (0,0) con su objeto de barra de herramientas antes de configurarlo como barra de acciones de soporte en su diseño.

Sería mejor agregar un elemento de fondo en el estilo de la barra de acciones de la aplicación para que coincida con el color de fondo de la barra de acciones personalizada:

 @color/actionbar_bgcolor 

Después de Android 6.0, la barra de acciones incluso tiene un margen de espacio correcto y no se puede establecer. Agregue un ajuste de margen derecho en la actividad de esta manera: (la vista es la barra de acciones personalizada o un botón derecho en ella)

 int rightMargin = Build.VERSION.SDK_INT>=Build.VERSION_CODES.M ? 0 : 8; // may the same with actionbar leftMargin in px ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) view.getLayoutParams(); p.setMargins(p.leftMargin, p.topMargin, rightMargin, p.bottomMargin); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){ p.setMarginEnd(rightMargin); } view.setLayoutParams(p); 

La maquinización de la barra de acciones solo es compatible después de la aplicación Android 3.0+. Si utilizamos una barra de herramientas (de support lib v7), deberíamos distribuirla en cada xml de cada actividad y solucionar el problema de la superposición con la barra de estado del sistema en el dispositivo Android 5.0 o posterior.

Kotlin

  supportActionBar?.displayOptions = ActionBar.DISPLAY_SHOW_CUSTOM; supportActionBar?.setCustomView(R.layout.actionbar); val parent = supportActionBar?.customView?.parent as Toolbar parent?.setPadding(0, 0, 0, 0)//for tab otherwise give space in tab parent?.setContentInsetsAbsolute(0, 0) 

¿Tu aplicación es compatible con Android 5? Si no es compatible, puede degradar la versión de support actionbar v7. Se ve así:

compile ‘com.android.support:appcompat-v7:19.0.+’ (No use v7: 21+)

también hace que la versión de destino de la aplicación sea menos de 21.

targetSdkVersion 14

Si su aplicación es compatible con Android 5 -> necesitará una barra de herramientas personalizada. (Porque appcombat-v7: 21 tiene algún cambio).