Ayer (17-10-2014) he actualizado Android SDK y support-library-v4.jar
de mi aplicación, ahora recibo una advertencia de desaprobación relacionada ActionBarDrawerToggle
, al leer la documentación parece que tengo que usar el ActionBarDrawerToggle
in 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_drawer
con
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.jar
se agrega correctamente en las dependencias del proyecto
android
android-support-library
AndreaF
fuente
fuente
Respuestas:
Agregar solo
android-support-v7-appcompat.jar
a 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\appcompat
y 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
ActionBarDrawerToggle
que 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.jar
propiedades 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.jar
a 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.gradle
archivo 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