studio - como quitar la actionbar/toolbar de mi aplicación android
Android: eliminar el margen izquierdo del diseño personalizado de la barra de acción (20)
Estoy usando una vista de barra de acción personalizada, y como puede ver en la captura de pantalla a continuación, hay un espacio gris en blanco en la barra de acción. Quiero eliminarlo
Qué he hecho:
res / values-v11 / styles.xml
<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light">
<item name="android:actionBarStyle">@style/ActionBarStyle</item>
<item name="actionBarStyle">@style/ActionBarStyle</item>
</style>
res / values / my_custom_actionbar.xml
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="ActionBarStyle" parent="@style/Widget.AppCompat.Light.ActionBar.Solid">
<item name="android:height">60dp</item>
</style>
</resources>
Manifiesto
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="19" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/AppName"
android:theme="@style/AppBaseTheme" >
<!-- activities... etc -->
</application>
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 he actualizado ADT y SDK a Android 5.
La vista personalizada de Android ActionBar no llena al padre
No se que debo hacer.
Editar (solución parcial):
No funciona en Android <= API 10.
¿Qué he cambiado?
Use la última versión de SDK:
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="21" />
Añadir una
toolbarStyle
<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light">
<item name="android:actionBarStyle">@style/ActionBarStyle</item>
<item name="actionBarStyle">@style/ActionBarStyle</item>
<item name="android:toolbarStyle">@style/ToolbarStyle</item>
<item name="toolbarStyle">@style/ToolbarStyle</item>
</style>
<style name="ToolbarStyle" parent="@style/Widget.AppCompat.Toolbar">
<item name="contentInsetStart">0dp</item>
<item name="android:contentInsetStart">0dp</item>
</style>
¿Su aplicación es compatible con Android 5? Si no es compatible, puede degradar la versión de support actionbar v7. Se parece a:
compile ''com.android.support:appcompat-v7:19.0.+'' (No use v7: 21+)
También haga que la versión de destino de la aplicación sea inferior a 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).
Crea una barra de herramientas como esta:
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/menuToolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="0dp"
android:background="@color/white"
android:contentInsetLeft="10dp"
android:contentInsetRight="10dp"
android:contentInsetStart="10dp"
android:minHeight="?attr/actionBarSize"
android:padding="0dp"
app:contentInsetLeft="10dp"
app:contentInsetRight="10dp"
app:contentInsetStart="10dp"></android.support.v7.widget.Toolbar>
sigue este enlace para obtener más información: consejos de Android
Debe agregar esta línea app2: contentInsetStart = "0dp" en su barra de herramientas
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app2="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"
app2:contentInsetStart="0dp"/>
El recuadro izquierdo es causado por la barra de herramientas
contentInsetStart
que por defecto es 16dp.
Cambie esto para alinearse con la línea clave.
Actualización para la biblioteca de soporte v24.0.0:
Para que coincida con la especificación de Diseño de material, hay un atributo adicional
contentInsetStartWithNavigation
que, de forma predeterminada, es 16dp.
Cambie esto si también tiene un icono de navegación.
Resultó que esto es parte de una nueva especificación de diseño de materiales introducida 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 extra agregando la siguiente propiedad al widget Barra de herramientas.
app:contentInsetStartWithNavigation="0dp"
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);
Encontré otra resolución (referencia appcompat-v7) que cambia el toolbarStyle, siguiendo el código:
<item name="toolbarStyle">@style/Widget.Toolbar</item>
<style name="Widget.Toolbar" parent="@style/Widget.AppCompat.Toolbar">
<item name="contentInsetStart">0dp</item>
</style>
Establecer los atributos "contentInset ..." en 0 en la barra de herramientas no funcionó para mí. ¡La solución de Nilesh Senta para actualizar el estilo funcionó!
styles.xml
<style name="AppTheme" parent="Theme.AppCompat.Light">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="actionBarStyle">@style/Actionbar</item>
<item name="android:titleTextStyle">@style/ActionbarTitle</item>
</style>
<style name="Actionbar" parent="Widget.AppCompat.ActionBar">
<item name="contentInsetStart">0dp</item>
<item name="contentInsetEnd">0dp</item>
</style>
java (onCreate)
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayHomeAsUpEnabled(false);
actionBar.setDisplayUseLogoEnabled(false);
actionBar.setDisplayShowCustomEnabled(true);
ActionBar.LayoutParams layoutParams = new ActionBar.LayoutParams(
ActionBar.LayoutParams.MATCH_PARENT,
ActionBar.LayoutParams.MATCH_PARENT
);
View view = LayoutInflater.from(this).inflate(R.layout.actionbar_main, null);
actionBar.setCustomView(view, layoutParams);
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)
No encontré una solución para mi problema (primera imagen) en ningún lado, pero al final termino con una solución más simple después de unas horas de excavación.
Tenga en cuenta que probé con muchos atributos xml como
app:setInsetLeft="0dp"
, etc. pero ninguno de ellos me ayudó en este caso.
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);
}
Imagen 2
Sería mejor agregar un elemento de fondo al estilo de la barra de acción de la aplicación para que sea coherente con el color de fondo de la barra de acción personalizada:
<item name="android:background">@color/actionbar_bgcolor</item>
Después de Android 6.0, la barra de acción incluso tiene un espacio de margen derecho y no se puede configurar. Agregue un margen derecho ajustando en la actividad de esta manera: (la vista es la barra de acción 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);
El machenismo actionbar solo es compatible después de la aplicación Android 3.0+. Si usamos una barra de herramientas (de soporte lib v7) en su lugar, deberíamos diseñarla en cada xml de cada actividad, y ocuparnos de la superposición con la barra de estado del sistema en el dispositivo Android 5.0 o posterior.
Si está agregando la
Toolbar
través de XML, simplemente puede agregar atributos XML para eliminar insertos de contenido.
<android.support.v7.widget.Toolbar
xmlns:app="schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/primaryColor"
android:contentInsetLeft="0dp"
android:contentInsetStart="0dp"
app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"
android:contentInsetRight="0dp"
android:contentInsetEnd="0dp"
app:contentInsetRight="0dp"
app:contentInsetEnd="0dp" />
Simplemente modifique sus styles.xml
<!-- ActionBar styles -->
<style name="MyActionBar" parent="Widget.AppCompat.ActionBar">
<item name="contentInsetStart">0dp</item>
<item name="contentInsetEnd">0dp</item>
</style>
Simplemente 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 según lo requiera para su caso de uso. No es necesario crear un diseño personalizado e inflarlo y adjuntarlo a la barra de herramientas. Una vez hecho esto en su código java, use setContentInsetsAbsolute (0,0) con su objeto de barra de herramientas antes de configurarlo como barra de acción de soporte en su diseño.
Solo agregue la
app:contentInsetStart="0dp"
a la barra de herramientas, elimine ese espacio restante.
Entonces su definición de la barra Google se ve así
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
app:contentInsetStart="0dp"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
y se ve así
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);
este trabajo para mi
toolbar.setPadding(0,0,0,0);
toolbar.setContentInsetsAbsolute(0,0);
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;
solo agregar
android:padding="0dp"
funciona para mí
<android.support.v7.widget.Toolbar
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="60dp"
android:padding="0dp"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
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);
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"
android:paddingLeft="0dp">
Esto debería ser lo suficientemente bueno.