Si necesitas ocultar/eliminar la ActionBar de tu aplicación Android, ya sea en la propia aplicación o en alguna actividad concreta, echa un vistazo a este artículo donde te damos varias soluciones distintas que quizá se adecuen a tu necesidad
Las soluciones planteadas sirven del mismo modo para Java & Kotlin
Solución Nº1: Modificar el manifest.xml
De entre las opciones que presentaremos en este artículo, hemos de señalar que esta es la más aconsejable. Siempre que sea posible, debe ser la primera solución que probemos.
Para aplicarla, debemos acudir al archivo del manifest y modificar (o añadir en caso de que no se encuentre) la siguiente línea:
android:theme="@style/Theme.AppCompat.NoActionBar"
Puede que quieras y/o necesites que la ActionBar, no se muestre en ninguna actividad, eliminándola de toda la aplicación. Si este es el caso, debemos introducir la línea dentro de la etiqueta de aplicación, de este modo:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="eu.masmultimedia.practica3">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.AppCompat.NoActionBar"
<activity
android:name=".ui.activity.MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
Si queremos eliminar la ActionBar de una o varias actividades concretas, tendremos que introducir la línea dentro de las etiquetas correspondientes a dichas activities, quedando (aplicado al anterior ejemplo) algo así:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
android:theme="@style/Theme.AppCompat.NoActionBar"
</intent-filter>
Solución Nº 2: Crear nuestro tema
Si queremos ahondar en las opciones de personalización, la solución anterior nos supondrá un impedimento para ello. Por tanto, en este caso podríamos crear un tema ("Theme") que herede de cualquiera del propio SO.
Esta opción iría de la mano con la anterior, a la hora de ser recomendada como primera a la que recurrir, ya que igualmente sería "toquetear" nuestro archivo de manifiesto.
Para ello, en el archivo styles.xml añadiremos:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
</style>
Tras ello, acudiremos al manifest y dentro de la etiqueta "application" añadiremos su uso, quedando de este modo:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="eu.masmultimedia.temporal01">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
Actualmente podemos encontrarnos themes.xml en nuestro árbol de proyecto, siendo este el archivo que emplearíamos para crear nuestro tema.
Solución Nº3: función hide():
Para hacerlo de forma programática, emplearemos la función getActionBar().hide() tras el setContentView dentro de onCreate.
Con ello, se nos plantean dos casuísticas: que extendamos de Activity() (si estamos usando la última versión vigente de Android en nuestro proyecto) o, lo más común y aconsejable, que extendamos de AppCompatActivity.
La línea que usaríamos sería getSupportActionBar?.hide(), quedando nuestro código parecido a:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
getSupportActionBar?.hide()
}
}
Como hemos comentado, dependerá de nuestro extends, con lo que para Activity() usaríamos getActionBar?.hide().
Para el caso de Java, omitiríamos el control de nullable ("?") y recordaremos el ";" así como los paréntesis en getActionBar.
* Lo más probable es que el propio IDE os haga la recomendación para optimizar código a supportActionBar?.hide()
Solución Nº 4: requestWindowFeature(Window.FEATURE_NO_TITLE):
Este modo programático es el que menos recomendamos, pero igualmente planteamos para cubrir según qué necesidades. Del mismo modo que en el caso anterior, tendremos dos casos según la versión de uso para nuestra aplicación.
Así, empleando la mencionada línea, nos quedaría algo parecido a:
import android.view.Window
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
supportRequestWindowFeature(Window.FEATURE_NO_TITLE)
setContentView(R.layout.activity_main)
}
}
Hay que prestar atención a que por un lado, hemos usado support ya que extendemos de AppCompatActivity en el proyecto de ejemplo. En caso contrario, emplearemos el código tal y como aparece en el título de esta solución.
Debemos prestar atención también a que por esta vez, la línea se escribe sobre setContentView y no bajo la misma.
Esperamos que el artículo sea de ayuda y que si conocéis más formas de abordar el problema, las dejéis en comentarios para aprender cada día nosotros también.