Ayer (17-10-2014) he actualizado Android SDK y support-library-v4.jarde mi aplicación, ahora recibo una advertencia de desaprobación relacionada ActionBarDrawerToggle, al leer la documentación parece que tengo que usar el ActionBarDrawerTogglein support-library-v7.appcompact.jar.
Aquí algunas partes de mi actividad que podrían ser relevantes:
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()
}
}
}
He intentado copiar support-library-v7 y reemplazar
import android.support.v4.app.ActionBarDrawerToggle;
con
import android.support.v7.app.ActionBarDrawerToggle;
esto ha causado un problema de compilación en
public CustomActionBarDrawerToggle(Activity mActivity,
DrawerLayout mDrawerLayout) {
super(mActivity, mDrawerLayout, R.drawable.action_drawer,
R.string.ns_menu_open, R.string.ns_menu_close);
}
Así que he tratado de reemplazar R.drawable.action_drawercon
public CustomActionBarDrawerToggle(Activity mActivity,
DrawerLayout mDrawerLayout) {
super(mActivity, mDrawerLayout,new Toolbar(MyActivity.this) ,
R.string.ns_menu_open, R.string.ns_menu_close);
}
esto se compila pero se bloquea en tiempo de ejecución con
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)
Tenga en cuenta que android-support-v7-appcompat.jarse agrega correctamente en las dependencias del proyecto

android
android-support-library
AndreaF
fuente
fuente

Respuestas:
Agregar solo
android-support-v7-appcompat.jara las dependencias de la biblioteca no es suficiente, también debe importar en su proyecto el módulo que puede encontrar en su SDK en la ruta\android-sdk\extras\android\support\v7\appcompaty luego agregar las dependencias del módulo configurando la estructura del proyecto de esta manerade lo contrario, se incluyen solo los archivos de clase de la biblioteca de soporte y la aplicación no puede cargar los otros recursos que causan el error.
Además, como reVerse sugirió reemplazar esto
con
fuente
No es necesario que utilice la súper llamada de la
ActionBarDrawerToggleque requiere la barra Google . Esto significa en lugar de usar el siguiente constructor:Deberías usar este:
Básicamente, lo único que tiene que hacer es eliminar su costumbre
drawable:Más información sobre el "nuevo" ActionBarDrawerToggle en los documentos (clic) .
fuente
java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v7/appcompat/R$styleable; at android.support.v7.app.DrawerArrowDrawable.<init>(DrawerArrowDrawable.java:64) at android.support.v7.app.ActionBarDrawerToggle$DrawerArrowDrawableToggle.<init>(ActionBarDrawerToggle.java:469) at android.support.v7.app.ActionBarDrawerToggle.<init>(ActionBarDrawerToggle.java:222) at android.support.v7.app.ActionBarDrawerToggle.<init>(ActionBarDrawerToggle.java:150)android-support-v7-appcompat.jarpropiedades de su proyecto -> Ruta de compilación de Java -> Ordenar y exportar? Además, puede ser útil mover v7-appcompat a la parte superior.android-support-v7-appcompat.jara las dependencias del proyecto de la misma forma que support-v4 (de lo contrario, ni siquiera se compila)compile "com.android.support:appcompat-v7:21.0.0"a subuild.gradlearchivo y listo.debes usar
import android.support.v7.app.ActionBarDrawerToggle;y usar el constructor
y si el botón de alternancia del cajón se oscurece, debe usar la barra de acción de soporte proporcionada en la biblioteca de soporte.
Puede implementar supportActionbar desde este enlace: http://developer.android.com/training/basics/actionbar/setting-up.html
fuente
import android.support.v7.app.ActionBarDrawerToggle;funcionó para mí. Aunque generalmente tengo importaciones automáticas, esa no se importó automáticamente.import android.support.v4.app.ActionBarDrawerToggle;En lugar de
Puedes usar
fuente