Je cherchais une réponse et j'ai essayé plusieurs solutions possibles, mais rien ne semble fonctionner.
J'essaye d'installer une barre d'action matérielle après ce tutoriel .
Voici mon code:
tool_bar.xml:
<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.Toolbar xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="@color/ColorPrimary"
Android:elevation="4dp">
</Android.support.v7.widget.Toolbar>
activity.xml:
<?xml version="1.0" encoding="utf-8"?>
<Android.support.v4.widget.DrawerLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/drawer_layout"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="#FFFFFF">
<!-- The main content view -->
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical">
<include
Android:id="@+id/app_bar"
layout="@layout/tool_bar" />
</RelativeLayout>
<!-- Navigation Drawer -->
<ListView
Android:id="@+id/left_drawer"
Android:layout_width="220dp"
Android:layout_height="match_parent"
Android:layout_gravity="left"
Android:background="#1C1C1C"
Android:divider="@Android:color/darker_gray"
Android:dividerHeight="1dp" />
</Android.support.v4.widget.DrawerLayout>
Et enfin mon activité.Java:
import Android.app.ActionBar;
import Android.support.v7.app.ActionBarActivity;
import Android.os.Bundle;
import Android.view.Menu;
import Android.view.MenuItem;
import Android.widget.Toolbar;
public class rutaActivity extends ActionBarActivity {
private Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ruta);
getSupportActionBar().hide();//Ocultar ActivityBar anterior
toolbar = (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(toolbar); //HERE'S THE PROBLEM !!!!
Erreur:
setSupporActionBar (Android.support.v7.widget.Toolbar) dans ActionBarActivity ne peut être appliqué à (Android.widget.Toolbar)
Comment puis-je réparer cela?
Dans votre Activity.Java
import Android.support.v7.widget.Toolbar
au lieu de Android.widget.Toolbar
:
import Android.app.ActionBar;
import Android.support.v7.app.AppCompatActivity;
import Android.os.Bundle;
import Android.view.Menu;
import Android.view.MenuItem;
import Android.support.v7.widget.Toolbar;
public class rutaActivity extends AppCompactActivity {
private Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ruta);
getSupportActionBar().hide();//Ocultar ActivityBar anterior
toolbar = (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(toolbar); //NO PROBLEM !!!!
En utilisant la barre d’outils, vous devez étendre AppCompatActivity puis importer Android.support.v7.widget.Toolbar
Pour ajouter une barre d'outils prenant en charge Material Design, les instructions de documentation officielles sont probablement les meilleures à suivre.
Faites votre activité étendre AppCompatActivity
.
public class MyActivity extends AppCompatActivity {
// ...
}
Déclarez NoActionBar
dans le manifeste.
<application
Android:theme="@style/Theme.AppCompat.Light.NoActionBar"
/>
Ajoutez une barre d'outils à la mise en page XML de votre activité.
<Android.support.v7.widget.Toolbar
Android:id="@+id/my_toolbar"
Android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
...
/>
Appelez setSupportActionBar
dans la onCreate
de l'activité.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
setSupportActionBar(myToolbar);
}
Remarque: Vous devrez importer les éléments suivants dans l'activité.
import Android.support.v7.app.AppCompatActivity;
import Android.support.v7.widget.Toolbar;
Certifiez que votre déclaration Manifest inclut Android: theme = "@ style/AppTheme.NoActionBar" tag, comme suit:
<activity
Android:name=".PointsScreen"
Android:theme="@style/AppTheme.NoActionBar">
</activity>
Pour la version Android supérieure à 3:
import androidx.appcompat.widget.Toolbar;
Pour la version Android ci-dessous 3:
import Android.widget.Toolbar;
L'ajout de l'importation Android.support.v7.widget.Toolbar à la liste d'importation résout ce problème.
Ajoutez ensuite le fichier de présentation du widget de la barre d’outils:
<Android.support.v7.widget.Toolbar
Android:id="@+id/list_toolbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="?attr/colorPrimary"
Android:minHeight="?attr/actionBarSize"
Android:theme="?attr/actionBarTheme"
/>
Dans la méthode onCreate du code Java
//call to
Barre d'outils Barre d'outils = findViewById (R.id.toolbar); SetSupportActionBar (barre d'outils);
Source: https://developer.Android.com/training/appbar/up-action
Avec l'ajout d'androidx dans Studio 3.0+, la compatibilité de la barre d'outils est maintenant intégrée dans une nouvelle bibliothèque, accessible comme ceci.
import androidx.appcompat.widget.Toolbar
importer Android.support.v7.widget.Toolbar; l'importer dans votre classe Java
J'utilisais auparavant ce code:
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
et étendu AppCompatActivity également mais je recevais la même erreur . Donc au lieu d'utiliser Toolbar class, j'ai importé la classe ci-dessous et cela a fonctionné pour moi:
Android.support.v7.widget.Toolbar
J'ai le même problème. Mon Logcat
dit
Java.lang.IllegalStateException: cette activité a déjà une action bar fourni par le décor de la fenêtre
J'ai déjà une barre d'action, donc lorsque j'utilise setSupportActionBar(toolbar);
, mon application reçoit une erreur pour ce conflit. Pour résoudre ce problème, ajoutez NoActionBar
dans votre fichier de ressources de style de thème d'application.
Change ça
<style name="ParentMaterialTheme" parent="Theme.AppCompat.Light">
Pour ça
<style name="ParentMaterialTheme" parent="Theme.AppCompat.Light.NoActionBar">
la classe doit être une extension de AppCompatActivity pour résoudre le problème de setSuppertActionBar non reconnaissable