Error al usar ScrimInsetFrameLayout
Estoy usando ScrimInsetsFrameLayout para obtener el Navigation Drawer
en la ToolBar
con el StatusBar
en él así que seguí la guía y leer mucho sobre él, pero hay algo mal, incluso si no me falta nada.
Cada vez que hago clic en una actividad (de los cuatro) en la lista de drawer_listView
o en el drawer_listView
ic_drawer
la fuerza de la aplicación se cierra sin mensajes en Logcat
.
- Cardview dentro de la pestaña
- ClassNotFoundException: No encontró la clase "android.support.design.widget.AppBarLayout"
- Android Material Design - Cómo cambiar el color de fondo de la barra de herramientas después de que CollapsingToolbarLayout se derrumbe
- Barra de herramientas flotante con controles de selección de texto
- Diseño de material de Android de la barra de herramientas / SupportActionBar
MainActivity
public class MainActivity extends ActionBarActivity { DrawerLayout mDrawerLayout; ListView mDrawerList; ActionBarDrawerToggle mDrawerToggle; String[] mDrawerListItems; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar); mDrawerLayout = (DrawerLayout)findViewById(R.id.drawer); mDrawerLayout.setStatusBarBackgroundColor(getResources().getColor(R.color.primaryDark)); mDrawerList = (ListView)findViewById(android.R.id.list); mDrawerListItems = getResources().getStringArray(R.array.drawer_list); mDrawerList.setAdapter(new ArrayAdapter<> (this, android.R.layout.simple_list_item_1, mDrawerListItems)); mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { openFragment(position); } }); mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close){ public void onDrawerClosed(View v){ super.onDrawerClosed(v); invalidateOptionsMenu(); syncState(); } public void onDrawerOpened(View v){ super.onDrawerOpened(v); invalidateOptionsMenu(); syncState(); } }; mDrawerLayout.setDrawerListener(mDrawerToggle); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); mDrawerToggle.syncState(); } protected void openFragment(int position){ mDrawerLayout.closeDrawer(mDrawerList); switch (position) { case 0: startActivity(new Intent(this, WIND.class)); break; case 1: startActivity(new Intent(this, GEO.class)); break; case 2: startActivity(new Intent(this, COMPASS.class)); break; case 3: startActivity(new Intent(this, BARO_ALTI.class)); break; default: break; } } @Override protected void onPostCreate(Bundle savedInstanceState){ super.onPostCreate(savedInstanceState); mDrawerToggle.syncState(); } @Override public void onConfigurationChanged(Configuration newConfig){ super.onConfigurationChanged(newConfig); mDrawerToggle.onConfigurationChanged(newConfig); } @Override public boolean onOptionsItemSelected(MenuItem item){ switch (item.getItemId()){ case android.R.id.home: { if (mDrawerLayout.isDrawerOpen(mDrawerList)){ mDrawerLayout.closeDrawer(mDrawerList); } else { mDrawerLayout.openDrawer(mDrawerList); } return true; } default: return super.onOptionsItemSelected(item); } }
my_activity.xml
:
<?xml version="1.0"?> <android.support.v4.widget.DrawerLayout xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_height="match_parent" android:layout_width="match_parent" android:id="@+id/drawer" tools:context=".MainActivity" android:fitsSystemWindows="true"> <FrameLayout android:orientation="vertical" android:layout_height="match_parent" android:layout_width="match_parent"> <android.support.v7.widget.Toolbar android:layout_height="?attr/actionBarSize" android:layout_width="match_parent" app:popupTheme="@style/Theme.AppCompat" app:theme="@style/ToolbarTheme" android:background="@color/primary" android:id="@+id/toolbar"/> <FrameLayout android:layout_height="match_parent" android:layout_width="match_parent" android:id="@+id/content_frame"> </FrameLayout> </FrameLayout> <beta_toolbox.pier.beta_toolbox.ScrimInsetsFrameLayout xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/linearLayout" android:layout_width="304dp" android:layout_height="match_parent" android:layout_gravity="start" android:fitsSystemWindows="true" app:insetForeground="#4000"> <ListView android:layout_height="match_parent" android:layout_width="match_parent" android:background="#ffffffff" android:divider="#ffffffff" android:dividerHeight="8dp" android:id="@android:id/list" android:layout_gravity="start" android:scrollbars="none"/> </beta_toolbox.pier.beta_toolbox.ScrimInsetsFrameLayout>
Mi problema está limitado a my_activity.xml
. Por favor, ayúdame No puedo continuar con mi proyecto.
[Actualizar]
Hice mi diseño exactamente como lo hizo https://github.com/google/iosched/blob/master/android/src/main/res/layout/activity_map.xml pero ** por qué no estoy recibiendo el mismo resultado? ! **
<?xml version="1.0"?> <android.support.v4.widget.DrawerLayout xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_height="match_parent" android:layout_width="match_parent" android:id="@+id/drawer" tools:context=".MainActivity" android:fitsSystemWindows="true"> <beta_toolbox.pier.beta_toolbox.ScrimInsetsFrameLayout xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/linearLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" app:insetForeground="#4000"> <FrameLayout android:layout_height="match_parent" android:layout_width="match_parent" android:id="@+id/content_frame"> </FrameLayout> <android.support.v7.widget.Toolbar android:layout_height="?attr/actionBarSize" android:layout_width="match_parent" app:popupTheme="@style/Theme.AppCompat" app:theme="@style/ToolbarTheme" android:background="@color/primary" android:id="@+id/toolbar"/> </beta_toolbox.pier.beta_toolbox.ScrimInsetsFrameLayout> <ListView android:layout_height="match_parent" android:layout_width="match_parent" android:background="#ffffffff" android:divider="#ffffffff" android:dividerHeight="8dp" android:id="@android:id/list" android:layout_gravity="start" android:scrollbars="none"/> </android.support.v4.widget.DrawerLayout>
- ¿La transición reversa reversa del elemento del androide sobre detrás después de cambio de la orientación?
- Barra de búsqueda persistente de Android en la barra de herramientas
- Colapsar el diseño de la barra de herramientas con el logotipo, el título, el subtítulo en la barra de herramientas
- ¿Cómo animar las transiciones de actividad cuando se usan listas / cuadrículas / vistas de reciclador?
- Diseño de material Android NestedScrollView / CollapsingToolbarLayout comportamiento extraño apertura del teclado
- ¿Cómo mostrar marcas para Discrete Slider?
- Dónde obtener recursos sdk drawable para Lollipop
- Error de Android para `@android: style / Theme.Material.Light`
Simplemente poner setSupportActionBar(toolbar);
Justo debajo de la Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
Ahora deberías poder hacer clic en el ic_drawer
para abrir el drawer_layout
.
(No podrás hacer clic en una actividad de esa lista, trataré de obtener ese problema, actualizaré mi respuesta mañana)
Editar:
public class MainActivity extends ActionBarActivity { DrawerLayout mDrawerLayout; ListView mDrawerList; ActionBarDrawerToggle mDrawerToggle; String[] mDrawerListItems; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); mDrawerLayout = (DrawerLayout)findViewById(R.id.drawer); mDrawerLayout.setStatusBarBackgroundColor(getResources().getColor(R.color.primaryDark)); mDrawerListItems = getResources().getStringArray(R.array.drawer_list); mDrawerList = (ListView)findViewById(android.R.id.list); mDrawerList.setAdapter(new ArrayAdapter<> (this, android.R.layout.simple_list_item_1, mDrawerListItems)); mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { openFragment(position); } }); mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close){ public void onDrawerClosed(View v){ super.onDrawerClosed(v); invalidateOptionsMenu(); syncState(); } public void onDrawerOpened(View v){ super.onDrawerOpened(v); invalidateOptionsMenu(); syncState(); } }; mDrawerLayout.setDrawerListener(mDrawerToggle); mDrawerToggle.syncState(); } protected void openFragment(int position){ Intent intent; switch (position) { case 0: intent = new Intent(this, Activity1.class); break; case 1: intent = new Intent(this, Activity2.class); break; case 2: intent = new Intent(this, Activity3.class); break; case 3: intent = new Intent(this, Activity4.class); break; default: intent = null; } startActivity(intent); //mDrawerLayout.closeDrawer(mDrawerList); } @Override protected void onPostCreate(Bundle savedInstanceState){ super.onPostCreate(savedInstanceState); mDrawerToggle.syncState(); } @Override public void onConfigurationChanged(Configuration newConfig){ super.onConfigurationChanged(newConfig); mDrawerToggle.onConfigurationChanged(newConfig); } @Override public boolean onOptionsItemSelected(MenuItem item){ switch (item.getItemId()){ case android.R.id.home: { if (mDrawerLayout.isDrawerOpen(mDrawerList)){ mDrawerLayout.closeDrawer(mDrawerList); } else { mDrawerLayout.openDrawer(mDrawerList); } return true; } default: return super.onOptionsItemSelected(item); } }
Make windowActionBar a true en los estilos Try this y la navegación debe ir bajo
<?xml version="1.0"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <android.support.v7.widget.Toolbar xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_height="?attr/actionBarSize" android:layout_width="match_parent" app:popupTheme="@style/Theme.AppCompat" app:theme="@style/ToolbarTheme" android:background="@color/primary" android:id="@+id/toolbar"/> <android.support.v4.widget.DrawerLayout xmlns:tools="http://schemas.android.com/tools" android:layout_height="match_parent" android:layout_width="match_parent" android:id="@+id/drawer" tools:context=".MainActivity" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <FrameLayout android:layout_height="match_parent" android:layout_width="match_parent" android:id="@+id/content_frame"/> </LinearLayout> <beta_toolbox.pier.beta_toolbox.ScrimInsetsFrameLayout xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/linearLayout" android:layout_width="304dp" android:layout_height="match_parent" android:layout_gravity="start" app:insetForeground="#4000"> <ListView android:layout_height="match_parent" android:layout_width="match_parent" android:background="#ffffffff" android:divider="#ffffffff" android:dividerHeight="8dp" android:id="@android:id/list" android:layout_gravity="start" android:scrollbars="none"/> </beta_toolbox.pier.beta_toolbox.ScrimInsetsFrameLayout> </android.support.v4.widget.DrawerLayout> </LinearLayout>
[ UPDATE ]
Según el documento de Android:
public void syncState ()
Esto se debe llamar desde el método onPostCreate de su actividad para sincronizarse después de restaurar el estado de la instancia de DrawerLayout y en cualquier otro momento cuando el estado puede haber divergido de tal manera que el ActionBarDrawerToggle no fue notificado. (Por ejemplo, si deja de enviar eventos de cajón adecuados durante un período de tiempo.)
Así que puede intentar eliminar todos los demás de la llamada syncState()
- ¿Puede getSupportActionBar ser nulo justo después de setSupportActionBar?
- Subida de imagen amazon s3 android SDK 2.0