如何创建由较低版本的android支持的导航抽屉?我写了这个代码,但它只适用于大于4.1的版本 [英] how to create Navigation Drawer that is supported by lower version of android?i have write write this code but it works only in version greater than 4.1
问题描述
public class SwappingClassDashboard extends Activity {
DrawerLayout dl;
ListView列表;
ActionBarDrawerToggle toogle;
CharSequence标题,dtitle;
String [] acfservice;
MainActivity mainactivity;
@Override
protected void onCreate(Bundle savedInstanceState){
ActionBar actionbar = getActionBar( );
ColorDrawable colorDrawable = new ColorDrawable(
Color.parseColor(#0067b4));
actionbar.setBackgroundDrawable(colorDrawable);
super.onCreate(savedInstanceState);
setContentView(R.layout.swapping_layout);
//初始化用于登录的用户名和密码字段的值
mainactivity = new MainActivity();
//变量赋值结束
title = dtitle = getTitle();
acfservice = getResource s()。getStringArray(R.array.acf_array);
dl =(DrawerLayout)findViewById(R.id.drawer_layout);
list =(ListView)findViewById( R.id.listview);
//设置一个自定义阴影,当抽屉
//打开时,它会覆盖主要内容/>
dl.setDrawerShadow(R.drawable.drawer_shadow,Gravity.START);
//用项目设置抽屉列表视图并点击监听器
list.setAdapter(new ArrayAdapter< string>(this,R.layout.list_drawer,
acfservice));
list.setOnItemClickListener(new DrawerItemClickListener());
//启用ActionBar应用程序图标,表现为切换导航抽屉的动作
ActionBar actionbar1 = getActionBar();
actionbar1.setIcon(R.drawable.acf);
actionbar1.setTitle(ACFNepal);
actionbar1.setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE
| ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_HOME_AS_UP);
// ActionBarDrawerToggle将滑动抽屉和动作栏应用程序图标之间的正确交互联系在一起
//
toogle = new ActionBarDrawerToggle(this,/ * host Activity * /
dl,/ * DrawerLayout对象* /
R.drawable.click ,/ *导航抽屉图像替换'向上'插入符* /
R.string.onopen,/ *打开抽屉描述无障碍* /
R.string .onclose / *关闭抽屉描述无障碍* /
){
public void onDrawerClosed(查看视图){
getActionBar()。setTitle(title);
invalidateOptionsMenu(); //创建调用
// onPrepareOptionsMenu()
}
public void onDrawerOpened(查看drawerView) {
getActionBar()。setTitle(dtitle);
invalidateOptionsMenu(); //创建调用
// onPrepareOptionsMenu()
}
};
dl.setDrawerListener(toogle);
if(savedInstanceState == null){
selectItem(0);
}
}
@Override
public boolean onCreateOptionsMenu(菜单菜单){
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.mainmenu,menu);
返回super.onCreateOptionsMenu(菜单) ;
}
/ *只要我们调用invalidateOptionsMenu()* /
@Override
public boolean onPrepareOptionsMenu(菜单菜单){
//如果导航抽屉打开,则隐藏与内容相关的操作项
// view
boolean drawerOpen = dl.isDrawerOpen(list);
menu.findItem(R.id.user)。setVisible(!drawerOpen);
/ / menu.findItem(R.id.setting)。setVisible(!drawerOpen);
// menu.findItem(R.id.back)。setVisible(!drawerOpen);
返回super.onPrepareOptionsMenu(menu); < br $>
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
if(toogle.onOptionsItemSelected(item)){
返回true;
}
//处理动作按钮
开关(item.getItemId()){
案例R.id.sign_out:{
startActivity(new Intent(SwappingClassDashboard.this,
MainActivity.class));
android.os.Process.killProcess(android.os .Process.myPid());
}
休息;
案例R.id.exit: {
final Dialog d1 = new Dialog(this);
d1.requestWindowFeature(Window.FEATURE_LEFT_ICON);
d1.setTitle(Do你想退出申请表吗?);
d1.setContentView(R.layout.dial_exit);
d1.setCancelable(true);
d1.show();
按钮btnyes,btnno;
btnyes =(按钮)d1.findViewById(R.id.exityes);
btnno =(按钮)d1.findViewById(R.id.exitno);
btnyes.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(查看arg0){
// Intent intent = getIntent();
意图intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(意图);
intent.setClass(getApplicationContext(),
StartACFActivity.class);
startActivity(intent);
d1.dismiss() ;
完成();
android.os.Process.killProcess(android.os.Process.myPid());
}
});
btnno.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(查看arg0){
d1.dismiss();
}
});
}
休息;
默认:
返回super.onOptionsItemSelected(item);
}
返回false;
}
/ *导航抽屉中ListView的点击列表器* /
私有类DrawerItemClickListener实现
ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView long id){
selectItem(position);
}
}
private void selectItem(int position){
// update替换片段的主要内容
Fragment fragment = null;
switch(position){
案例0:
fragment = new Dashboard();
break;
//案例1:
// fragment = new SystemUsers();
//休息;
案例1:
startActivity(new Intent(SwappingClassDashboard.this,
AssessmentCard.class));
break;
//案例3:
// startActivity(new Intent(SwappingClassDashboard.this,
// DisplayChildList.class));
// break;
案例2:
startActivity(新的Intent(SwappingClassDashboard.this,
SyncDatabase。 class));
休息;
默认:
休息;
}
if(fragment!= null){
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.content_frame,fragment).commit();
//更新选择编辑项目和标题,然后关闭抽屉
list.setItemChecked(position,true);
setTitle(acfservice [position]);
dl.closeDrawer(list);
} else {
//创建片段时出错
Log.e(SwappingClassDashboard,error在创作片段);
}
}
@Override
public void onBackPressed(){
Intent nextActivity = new Intent(this,MainActivity.class);
startActivity(nextActivity);
} < br $>
@Override
public void setTitle(CharSequence t){
title = t;
getActionBar()。setTitle(title);
}
@Override
protected void onPostCreate (Bundle savedInstanceState){
super.onPostCreate(savedInstanceState);
//在onRestoreInstanceState发生后同步切换状态。
toogle.syncState ();
} $ / $
@Override
public void onConfigurationChanged(Configuration newConfig){
super.onConfigurationChanged(newConfig);
//将任何配置更改传递给抽屉翻转
toogle.onConfigurationChanged(newConfig);
}
}
public class SwappingClassDashboard extends Activity {
DrawerLayout dl;
ListView list;
ActionBarDrawerToggle toogle;
CharSequence title, dtitle;
String[] acfservice;
MainActivity mainactivity;
@Override
protected void onCreate(Bundle savedInstanceState) {
ActionBar actionbar = getActionBar();
ColorDrawable colorDrawable = new ColorDrawable(
Color.parseColor("#0067b4"));
actionbar.setBackgroundDrawable(colorDrawable);
super.onCreate(savedInstanceState);
setContentView(R.layout.swapping_layout);
// initializing the value for username and passord field for login
mainactivity = new MainActivity();
// end of variable assignment
title = dtitle = getTitle();
acfservice = getResources().getStringArray(R.array.acf_array);
dl = (DrawerLayout) findViewById(R.id.drawer_layout);
list = (ListView) findViewById(R.id.listview);
// set a custom shadow that overlays the main content when the drawer
// opens
dl.setDrawerShadow(R.drawable.drawer_shadow, Gravity.START);
// set up the drawer's list view with items and click listener
list.setAdapter(new ArrayAdapter<string>(this, R.layout.list_drawer,
acfservice));
list.setOnItemClickListener(new DrawerItemClickListener());
// enable ActionBar app icon to behave as action to toggle nav drawer
ActionBar actionbar1 = getActionBar();
actionbar1.setIcon(R.drawable.acf);
actionbar1.setTitle("ACFNepal");
actionbar1.setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE
| ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_HOME_AS_UP);
// ActionBarDrawerToggle ties together the the proper interactions
// between the sliding drawer and the action bar app icon
toogle = new ActionBarDrawerToggle(this, /* host Activity */
dl, /* DrawerLayout object */
R.drawable.click, /* nav drawer image to replace 'Up' caret */
R.string.onopen, /* "open drawer" description for accessibility */
R.string.onclose /* "close drawer" description for accessibility */
) {
public void onDrawerClosed(View view) {
getActionBar().setTitle(title);
invalidateOptionsMenu(); // creates call to
// onPrepareOptionsMenu()
}
public void onDrawerOpened(View drawerView) {
getActionBar().setTitle(dtitle);
invalidateOptionsMenu(); // creates call to
// onPrepareOptionsMenu()
}
};
dl.setDrawerListener(toogle);
if (savedInstanceState == null) {
selectItem(0);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.mainmenu, menu);
return super.onCreateOptionsMenu(menu);
}
/* Called whenever we call invalidateOptionsMenu() */
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// If the nav drawer is open, hide action items related to the content
// view
boolean drawerOpen = dl.isDrawerOpen(list);
menu.findItem(R.id.user).setVisible(!drawerOpen);
// menu.findItem(R.id.setting).setVisible(!drawerOpen);
// menu.findItem(R.id.back).setVisible(!drawerOpen);
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (toogle.onOptionsItemSelected(item)) {
return true;
}
// Handle action buttons
switch (item.getItemId()) {
case R.id.sign_out: {
startActivity(new Intent(SwappingClassDashboard.this,
MainActivity.class));
android.os.Process.killProcess(android.os.Process.myPid());
}
break;
case R.id.exit: {
final Dialog d1 = new Dialog(this);
d1.requestWindowFeature(Window.FEATURE_LEFT_ICON);
d1.setTitle("Do you want to exit Application ?");
d1.setContentView(R.layout.dial_exit);
d1.setCancelable(true);
d1.show();
Button btnyes, btnno;
btnyes = (Button) d1.findViewById(R.id.exityes);
btnno = (Button) d1.findViewById(R.id.exitno);
btnyes.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// Intent intent=getIntent();
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
intent.setClass(getApplicationContext(),
StartACFActivity.class);
startActivity(intent);
d1.dismiss();
finish();
android.os.Process.killProcess(android.os.Process.myPid());
}
});
btnno.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
d1.dismiss();
}
});
}
break;
default:
return super.onOptionsItemSelected(item);
}
return false;
}
/* The click listner for ListView in the navigation drawer */
private class DrawerItemClickListener implements
ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView long id) {
selectItem(position);
}
}
private void selectItem(int position) {
// update the main content by replacing fragments
Fragment fragment = null;
switch (position) {
case 0:
fragment = new Dashboard();
break;
// case 1:
// fragment = new SystemUsers();
// break;
case 1:
startActivity(new Intent(SwappingClassDashboard.this,
AssessmentCard.class));
break;
// case 3:
// startActivity(new Intent(SwappingClassDashboard.this,
// DisplayChildList.class));
// break;
case 2:
startActivity(new Intent(SwappingClassDashboard.this,
SyncDatabase.class));
break;
default:
break;
}
if (fragment != null) {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.content_frame, fragment).commit();
// update selected item and title, then close the drawer
list.setItemChecked(position, true);
setTitle(acfservice[position]);
dl.closeDrawer(list);
} else {
// error in creating fragment
Log.e("SwappingClassDashboard", "error in creation fragment");
}
}
@Override
public void onBackPressed() {
Intent nextActivity = new Intent(this, MainActivity.class);
startActivity(nextActivity);
}
@Override
public void setTitle(CharSequence t) {
title = t;
getActionBar().setTitle(title);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
toogle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Pass any configuration change to the drawer toggls
toogle.onConfigurationChanged(newConfig);
}
}
推荐答案
你应该小心你正在使用的导入
它应该是这样的库
you should be careful about the import u are using
it should be the same library like this
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
或
Or
import android.app.FragmentManager;
并确保在AndroidManifest.xml中确认
and make sure in AndroidManifest.xml
<uses-sdk>
android:minSdkVersion="14"
android:targetSdkVersion="19" />
</uses-sdk>
试试吧
Try it
这篇关于如何创建由较低版本的android支持的导航抽屉?我写了这个代码,但它只适用于大于4.1的版本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!