Hier (17-10-2014), j'ai la mise à jour Android SDK et le support-library-v4.jar
de mon application. Je reçois maintenant un avertissement de dépréciation lié à ActionBarDrawerToggle
, en lecture la documentation semble indiquer que je dois utiliser le ActionBarDrawerToggle
dans support-library-v7.appcompact.jar
.
Voici quelques parties de mon activité qui pourraient être pertinentes:
import Android.app.ActionBar;
import Android.app.Activity;
import Android.content.res.Configuration;
import Android.os.Bundle;
import Android.support.v4.app.ActionBarDrawerToggle;
import Android.support.v4.app.FragmentActivity;
import Android.support.v4.view.GravityCompat;
import Android.support.v4.widget.DrawerLayout;
import Android.view.Menu;
import Android.view.MenuInflater;
import Android.view.MenuItem;
import Android.view.View;
import Android.webkit.WebView;
import Android.widget.LinearLayout;
import Android.widget.ListView;
import Android.widget.RelativeLayout;
import Android.widget.TextView;
public class MyActivity extends FragmentActivity {
private ActionBar bar;
private CustomActionBarDrawerToggle mDrawerToggle;
private DrawerLayout mDrawer;
private ListView mDrawerList;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_infoviewer);
bar = this.getActionBar();
bar.setDisplayHomeAsUpEnabled(true);
bar.setHomeButtonEnabled(true);
bar.setDisplayShowTitleEnabled(false);
mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawer.setBackgroundColor(getResources().getColor(R.color.White));
initNavMenu();
try {
mDrawerToggle = new CustomActionBarDrawerToggle(this, mDrawer);
} catch (RuntimeException e) {
e.printStackTrace();
}
mDrawer.setDrawerListener(mDrawerToggle);
}
....
private void initNavMenu() {
NavMenuAdapter mAdapter = MyDrawers.getDefaultDrawer(MyActivity.this, true);
mDrawerList = (ListView) findViewById(R.id.drawer);
mDrawerList.setBackgroundColor(getResources().getColor(R.color.GreenMoneyDark));
if (mDrawerList != null) mDrawerList.setAdapter(mAdapter);
mDrawerList.setOnItemClickListener(new DrawerItemClickListener(MyActivity.this, mDrawer, mDrawerList));
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
mDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mDrawerToggle.onConfigurationChanged(newConfig);
}
private class CustomActionBarDrawerToggle extends ActionBarDrawerToggle {
public CustomActionBarDrawerToggle(Activity mActivity,
DrawerLayout mDrawerLayout) {
super(mActivity, mDrawerLayout, R.drawable.action_drawer,
R.string.ns_menu_open, R.string.ns_menu_close);
}
@Override
public void onDrawerClosed(View view) {
bar.setTitle(getString(R.string.ns_menu_close));
invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
@Override
public void onDrawerOpened(View drawerView) {
bar.setTitle(getString(R.string.ns_menu_open));
invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
}
}
J'ai essayé de copier support-library-v7 et de remplacer
import Android.support.v4.app.ActionBarDrawerToggle;
avec
import Android.support.v7.app.ActionBarDrawerToggle;
cela a posé problème de compilation dans
public CustomActionBarDrawerToggle(Activity mActivity,
DrawerLayout mDrawerLayout) {
super(mActivity, mDrawerLayout, R.drawable.action_drawer,
R.string.ns_menu_open, R.string.ns_menu_close);
}
J'ai donc essayé de remplacer R.drawable.action_drawer
par
public CustomActionBarDrawerToggle(Activity mActivity,
DrawerLayout mDrawerLayout) {
super(mActivity, mDrawerLayout,new Toolbar(MyActivity.this) ,
R.string.ns_menu_open, R.string.ns_menu_close);
}
cela compile mais plante au runtime avec
Java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v7/appcompat/R$attr;
at Android.support.v7.widget.Toolbar.<init>(Toolbar.Java:190)
at Android.support.v7.widget.Toolbar.<init>(Toolbar.Java:186)
Notez que Android-support-v7-appcompat.jar
est correctement ajouté aux dépendances du projet.
Ajouter uniquement Android-support-v7-appcompat.jar
aux dépendances de la bibliothèque ne suffit pas, vous devez également importer dans votre projet le module que vous pouvez trouver dans votre SDK à l’aide du chemin \Android-sdk\extras\Android\support\v7\appcompat
puis ajouter des dépendances de module dans la structure du projet. façon
sinon, seuls les fichiers de classe de la bibliothèque de support sont inclus et l'application ne peut pas charger les autres ressources à l'origine de l'erreur.
En outre, comme réversé suggéré de remplacer cette
public CustomActionBarDrawerToggle(Activity mActivity,
DrawerLayout mDrawerLayout) {
super(mActivity, mDrawerLayout,new Toolbar(MyActivity.this) ,
R.string.ns_menu_open, R.string.ns_menu_close);
}
avec
public CustomActionBarDrawerToggle(Activity mActivity,
DrawerLayout mDrawerLayout) {
super(mActivity, mDrawerLayout, R.string.ns_menu_open, R.string.ns_menu_close);
}
Vous n'avez pas besoin d'utiliser le super-appel de la ActionBarDrawerToggle
qui nécessite le barre d'outils . Cela signifie au lieu d'utiliser le constructeur suivant:
ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout, Toolbar toolbar, int openDrawerContentDescRes, int closeDrawerContentDescRes)
Vous devriez utiliser celui-ci:
ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout, int openDrawerContentDescRes, int closeDrawerContentDescRes)
Donc, fondamentalement, la seule chose à faire est de supprimer votre drawable
personnalisé:
super(mActivity, mDrawerLayout, R.string.ns_menu_open, R.string.ns_menu_close);
En savoir plus sur le "nouveau" ActionBarDrawerToggle dans la documentation (clic) .
vous devez utiliser import Android.support.v7.app.ActionBarDrawerToggle;
et utiliser le constructeur
public CustomActionBarDrawerToggle(Activity mActivity,DrawerLayout mDrawerLayout)
{
super(mActivity, mDrawerLayout, R.string.ns_menu_open, R.string.ns_menu_close);
}
et si le bouton bascule du tiroir devient sombre, vous devez utiliser le supportActionBar fourni dans la bibliothèque de support.
Vous pouvez implémenter supportActionbar à partir de ce lien: http://developer.Android.com/training/basics/actionbar/setting-up.html
Au lieu de
drawer.setDrawerListener(toggle);
Vous pouvez utiliser
drawer.addDrawerListener(toggle);