在所有的活动抽屉式导航栏 [英] Navigation drawer in all Activity

查看:309
本文介绍了在所有的活动抽屉式导航栏的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好我希望把导航抽屉里的所有活动。

Hi all i want to put navigation drawer in all activity.

布局文件:

     <?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <ListView
        android:id="@+id/left_drawer"
        android:layout_width="275dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="@color/black"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp"
        android:paddingLeft="5dp" />

</android.support.v4.widget.DrawerLayout>

在其他活动,我正在扩展此类。但是,这本不工作仅仅是这样的抽屉标志是在其他活动页面来了。

In other activity i am extending this class. But this this not working only this is the drawer logo is coming in the other activity page.

请告诉我在做什么错在这里。
在此先感谢。

Please tell what i am doing wrong here. Thanks in advance.

我找到解决方案。感谢您的热心帮助。

I find the solution. Thanks for your kind help.

更新:

Update:

请在下面找到我的答案。

推荐答案

创建布局 drawer_layout

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout  xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<FrameLayout
    android:id="@+id/content_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<ListView
    android:id="@+id/left_drawer"
    android:layout_width="275dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:background="@color/black"
    android:choiceMode="singleChoice"
    android:divider="@android:color/transparent"
    android:dividerHeight="0dp"
    android:paddingLeft="5dp" />

drwaer_custom_layout_file 这是在抽屉中的各单行(根据需求自定义):

drwaer_custom_layout_file This is for each single row in drawer.(Customize based on requirement):

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginLeft="5dp" >

<LinearLayout
    android:id="@+id/itemLayoutColor"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:minHeight="50dp"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/drawer_icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:contentDescription="@string/sku_search"
        android:paddingLeft="15dp" />

    <TextView
        android:id="@+id/drawer_itemName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:paddingLeft="10dp"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="@color/white" />
</LinearLayout>

<View
    android:id="@+id/dividerView"
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="#191919"
    android:paddingLeft="15dp" >
</View>

创建一个适配器类。 (删除这是不是与您有关的元素)的:

Create an Adapter class. (Remove the element which is not relevant for you):

public class CustomDrawerAdapter extends ArrayAdapter<DrawerItem> {

Context context;
List<DrawerItem> drawerItemList;
int layoutResID;
int selectedPosition;


public CustomDrawerAdapter(Context context, int layoutResourceID,
        List<DrawerItem> listItems, int selectedPosition) {
    super(context, layoutResourceID, listItems);
    this.context = context;
    this.drawerItemList = listItems;
    this.layoutResID = layoutResourceID;
    this.selectedPosition = selectedPosition;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub

    DrawerItemHolder drawerHolder;
    View view = convertView;

    if (view == null) {
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        drawerHolder = new DrawerItemHolder();

        view = inflater.inflate(layoutResID, parent, false);
        drawerHolder.ItemName = (TextView) view
                .findViewById(R.id.drawer_itemName);
        drawerHolder.icon = (ImageView) view.findViewById(R.id.drawer_icon);
        drawerHolder.itemLayoutColor = (LinearLayout) view
                .findViewById(R.id.itemLayoutColor);
        // drawerHolder.dividerView = (View) view
        // .findViewById(R.id.dividerView);
        view.setTag(drawerHolder);

    } else {
        drawerHolder = (DrawerItemHolder) view.getTag();

    }

    DrawerItem dItem = (DrawerItem) this.drawerItemList.get(position);
    drawerHolder.ItemName.setTypeface(tfNormal);
    drawerHolder.ItemName.setText(dItem.getItemName());
    if (dItem.getImgResID() != 0) {
        drawerHolder.icon.setImageDrawable(view.getResources().getDrawable(
                dItem.getImgResID()));

    } else {

        drawerHolder.ItemName.setTextColor(context.getResources().getColor(
                R.color.black));
        drawerHolder.itemLayoutColor.setBackgroundColor(context
                .getResources().getColor(R.color.pGray));
        drawerHolder.icon.setVisibility(View.GONE);
        // drawerHolder.dividerView.setBackgroundColor(Color.GREEN);
    }
    if(selectedPosition == position){
        drawerHolder.itemLayoutColor.setBackgroundColor(context
                .getResources().getColor(R.color.lightyellow));
    }
    return view;
}

private static class DrawerItemHolder {
    TextView ItemName;
    ImageView icon;
    LinearLayout itemLayoutColor;
    // View dividerView;
}
}

创建类,将扩展 活动写下面的方法:

Create a class that will extends Activity write below methods:

@Override
public void setContentView(int layoutResID) {
    mDrawerLayout = (DrawerLayout) getLayoutInflater().inflate(
            R.layout.navigation_drawer_layout, null);
    actContent = (FrameLayout) mDrawerLayout
            .findViewById(R.id.content_frame);
    getLayoutInflater().inflate(layoutResID, actContent, true);
    super.setContentView(mDrawerLayout);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (mDrawerToggle.onOptionsItemSelected(item)) {
    }
    return true;
}

protected void navigationDrawer(DrawerLayout mDrawerLayout,
        ListView mDrawerList, int selectedPosition) {

    this.selectedPosition = selectedPosition;

    activity = (Activity) NavigationDrawerBaseActivity.this;
    actionBar = getActionBar();

    actionBar.setDisplayHomeAsUpEnabled(true);
    actionBar.setHomeButtonEnabled(true);


    mTitle = mDrawerTitle = getTitle();
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerList = (ListView) findViewById(R.id.left_drawer);
    this.mDrawerLayout = mDrawerLayout;
    this.mDrawerList = mDrawerList;

    mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow,
            GravityCompat.START);

    // set up the drawer's list view with items and click listener
    mDataList = new ArrayList<DrawerItem>();

    **********Here add the items in the list***********
   i.e.
    mDataList.add(new DrawerItem(DrawerConstant.LOGOUT,
            R.drawable.ic_signout));

    adapter = new CustomDrawerAdapter(this,
            R.layout.drawer_custom_single_layout, mDataList,
            selectedPosition);

    mDrawerList.setAdapter(adapter);

    mDrawerList.setOnItemClickListener(new DrawerItemClickListener());

    mDrawerToggle = new ActionBarDrawerToggle(this, /* host Activity */
    mDrawerLayout, /* DrawerLayout object */
    R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */
    R.string.drawer_open, /* "open drawer" description for accessibility */
    R.string.drawer_close /* "close drawer" description for accessibility */
    ) {
        public void onDrawerClosed(View view) {
            getActionBar().setTitle(mTitle);
            invalidateOptionsMenu(); // creates call to
                                        // onPrepareOptionsMenu()
        }

        public void onDrawerOpened(View drawerView) {
            getActionBar().setTitle(mDrawerTitle);
            invalidateOptionsMenu(); // creates call to
                                        // onPrepareOptionsMenu()
        }
    };
    mDrawerLayout.setDrawerListener(mDrawerToggle);

}

public class DrawerItemClickListener implements
        ListView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {

            if (position != selectedPosition) {
                selectItem(position);
    }
}

protected void selectItem(int position) {
    // update the main content by replacing fragments

    switch (position) {
    case 0:
        // Call the another activity
        mDrawerList.setItemChecked(position, true);
        mDrawerLayout.closeDrawer(mDrawerList);
        break;
    case 1:
        // Call the another activity
        mDrawerList.setItemChecked(position, true);
        mDrawerLayout.closeDrawer(mDrawerList);
        break;
    case 2:
        // Call the another activity
        mDrawerList.setItemChecked(position, true);
        mDrawerLayout.closeDrawer(mDrawerList);
        break;

    default:
        break;
    }
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    // Pass any configuration change to the drawer toggls
    mDrawerToggle.onConfigurationChanged(newConfig);
}

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    // Sync the toggle state after onRestoreInstanceState has occurred.
    mDrawerToggle.syncState();
  }
 }

添加下面的code的活动,无论你想放抽屉式导航:


  • 扩展了 NavigationDrawerBaseActivity 类。

的setContentView 下面的方法调用:

// set Naviagtion Drawer
DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
ListView mDrawerList = (ListView) findViewById(R.id.left_drawer);
super.navigationDrawer(mDrawerLayout, mDrawerList, 1);


  • 添加以下方法同样活动

     @Override
      public boolean onOptionsItemSelected(MenuItem item) {
      if (mDrawerToggle.onOptionsItemSelected(item)) {
        }
     }
    


  • 这篇关于在所有的活动抽屉式导航栏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆