Aujourd'hui, Google a mis à jour la bibliothèque AppCompat vers la version 22.1.0, et nous pouvons maintenant utiliser AppCompatActivity
au lieu de ActionBarActivity
. Cela signifie que nous n'avons plus besoin d'avoir une vue Toolbar
dans notre structure d'activité.
Le problème est que pour créer un bouton bascule de tiroir, je ne peux pas utiliser new ActionBarDrawerToggle
plus, car il attend un paramètre Toolbar
, qui n'existera pas.
Comment suis-je censé ajouter le bouton bascule à l'ActionBar maintenant?
Une solution possible
Activité:
import Android.os.Bundle;
import Android.support.v4.widget.DrawerLayout;
import Android.support.v7.app.ActionBarDrawerToggle;
import Android.support.v7.app.AppCompatActivity;
import Android.view.MenuItem;
public class MainActivity extends AppCompatActivity
{
DrawerLayout drawerLayout;
ActionBarDrawerToggle toggle;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
toggle = new ActionBarDrawerToggle
(
this,
drawerLayout,
R.string.navigation_drawer_open,
R.string.navigation_drawer_close
)
{
};
drawerLayout.setDrawerListener(toggle);
toggle.syncState();
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
if (toggle.onOptionsItemSelected(item))
{
return true;
}
return super.onOptionsItemSelected(item);
}
}
Disposition:
<Android.support.v4.widget.DrawerLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:id="@+id/drawer_layout"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
tools:context=".MainActivity">
<FrameLayout
Android:id="@+id/container"
Android:layout_width="match_parent"
Android:layout_height="match_parent" />
<ListView
Android:id="@+id/list_drawer"
Android:layout_width="240dp"
Android:layout_height="match_parent"
Android:layout_gravity="start"
Android:background="#f1f2f7"
Android:choiceMode="singleChoice"
Android:divider="@Android:color/transparent" />
</Android.support.v4.widget.DrawerLayout>
Style:
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
</style>
</resources>
Il est important que votre application hérite du thème AppCompat.
Si vous avez remplacé la barre d'actions par une barre d'outils n'oubliez pas de remettre la barre d'actions en supprimant cette ligne dans le styles.xml:
<item name="windowActionBar">false</item>
Gradle:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.Android.support:support-v4:22.1.1'
compile 'com.Android.support:appcompat-v7:22.1.1'
}
J'ai mis ce code sur github: https://github.com/bbouabou/AppCompatActivity-With-ActionBarDrawerToggle .
Selon documents officiels , la classe ActionBarDrawerToggle
de la v7 dispose d'un constructeur indépendant de la barre d'outils:
public ActionBarDrawerToggle (Activity activity, DrawerLayout drawerLayout, int openDrawerContentDescRes, int closeDrawerContentDescRes)
Cela fonctionnera avec la valeur par défaut ActionBar
fournie par activity
. Donc, comme toujours, soit:
new ActionBarDrawerToggle(...)
;.NoActionBar
, instanciez/gonflez un objet Toolbar
et appelez new ActionBarDrawerToggle(..., Toolbar t, ...)
Il me semble que rien n'a changé avec le refactoring ActionBarActivity
.
Si vous utilisez Android Configuration par défaut du tiroir de navigation de Studio, j'ai trouvé le succès en modifiant NavigationDrawerFragment.Java
's ActionBarDrawerToggle
classe de v4
à v7
dans l'instruction import
et en omettant l'argument Toolbar
du constructeur ActionBarDrawerToggle
.