在所有的活动抽屉式导航栏 [英] Navigation drawer in all Activity
问题描述
大家好我希望把导航抽屉里的所有活动。
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屋!