Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting an error using ScrimInsetFrameLayout

I'm using ScrimInsetsFrameLayout to get the Navigation Drawer on the ToolBar with the StatusBar on it so I followed the guide and read a lot about it but there's something wrong even if I'm not missing anything.

Whenever I click one (of the four) activity in the drawer_listView or the ic_drawer the app force closes without messages in the 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't go on with my project.

[Update]

I made my layout exactly like he did https://github.com/google/iosched/blob/master/android/src/main/res/layout/activity_map.xml but **why I'm 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>
like image 981
Rick Avatar asked Sep 29 '22 08:09

Rick


1 Answers

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

Now you should be able to click on the ic_drawer to open the drawer_layout.

( you won't be able to click on an activity of that list, I'll try to get that issue. I'll 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);
    }
}
like image 116
Pier Avatar answered Oct 03 '22 00:10

Pier