Getting Error Using ScrimInsetFrameLayout

I use ScrimInsetsFrameLayout to get the Navigation Drawer in the ToolBar using the StatusBar on it, so I follow the manual and read a lot about it, but there is something wrong, even if I didn't miss anything.

Whenever I click one (out of four) actions in drawer_listView or ic_drawer , the application power closes without messages in Logcat .

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> 

My problem is limited to my_activity.xml . Please help me, I can not continue my project.

[Update]

I made my layout as if it was https://github.com/google/iosched/blob/master/android/src/main/res/layout/activity_map.xml , but ** why am I not getting the same result? ! **

 <?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> 
+5
source share
3 answers

Simply put setSupportActionBar(toolbar); just under Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);

Now you can click ic_drawer to open drawer_layout .

(you will not be able to click on the activity of this list, I will try to get this problem. I will update my answer tomorrow)

Edit:

 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); } } 
+4
source

make windowActionBar true in styles Try this and the navigation should go under

+1
source
 <?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 ]

According to Android doc:

 public void syncState () 

This must be called from the Activity onPostCreate method to synchronize after the state of the DrawerLayout instance is restored and at any other time when the state can diverge in such a way that the ActionBarDrawerToggle has not been notified. (For example, if you stop forwarding the corresponding box events for a certain period of time.)

So, can you try to remove all your others from syncState() calls

-1
source

All Articles