我只是试图从这个code复制;的http://www.androidhive.info/2013/11/android-sliding-menu-using-navigation-drawer
但我不能得到启动器图标和抽屉线没有左对齐。
下面是我MainActivity,我不知道如何纠正这一点。
进口android.content.res.Configuration;进口android.content.res.TypedArray;进口android.os.Bundle;进口android.support.v4.app.ActionBarDrawerToggle;进口android.support.v4.app.Fragment;进口android.support.v4.app.FragmentManager;进口android.support.v4.widget.DrawerLayout;进口android.support.v7.app.ActionBarActivity;进口android.util.Log;进口android.view.Menu;进口android.view.MenuItem;进口android.view.View;进口android.widget.AdapterView;进口android.widget.ListView;进口com.nsm.onur.nkys.adapter.NavDrawerItem;进口com.nsm.onur.nkys.adapter.NavDrawerListAdapter;进口的java.util.ArrayList;公共类MainActivity扩展ActionBarActivity { 私人DrawerLayout mDrawerLayout; 私人的ListView mDrawerList; 私人ActionBarDrawerToggle mDrawerToggle; //导航抽屉称号 私人CharSequence的mDrawerTitle; //用于存储应用程序标题 私人CharSequence的mTitle; //滑动菜单项 私有String [] navMenuTitles; 私人TypedArray navMenuIcons; 私人的ArrayList< NavDrawerItem> navDrawerItems; 私人NavDrawerListAdapter适配器; @覆盖 保护无效的onCreate(捆绑savedInstanceState){ super.onCreate(savedInstanceState); 的setContentView(R.layout.activity_main); mTitle = mDrawerTitle =的getTitle(); //负荷滑动菜单项 navMenuTitles = getResources()getStringArray(R.array.nav_drawer_items)。 从资源//导航抽屉图标 navMenuIcons = getResources() .obtainTypedArray(R.array.nav_drawer_icons); mDrawerLayout =(DrawerLayout)findViewById(R.id.drawer_layout); mDrawerList =(ListView控件)findViewById(R.id.list_slidermenu); navDrawerItems =新的ArrayList< NavDrawerItem>(); //添加导航抽屉里的物品数组 //首页 navDrawerItems.add(新NavDrawerItem(navMenuTitles [0],navMenuIcons.getResourceId(0,-1))); navDrawerItems.add(新NavDrawerItem(navMenuTitles [1],navMenuIcons.getResourceId(1,-1))); //回收类型数组 navMenuIcons.recycle(); mDrawerList.setOnItemClickListener(新SlideMenuClickListener()); //设置导航抽屉名单适配器 适配器=新NavDrawerListAdapter(getApplicationContext() navDrawerItems); mDrawerList.setAdapter(适配器); //使操作栏中的应用程序图标和行为作为切换按钮 getSupportActionBar()setDisplayHomeAsUpEnabled(真)。 getSupportActionBar()setHomeButtonEnabled(真)。 mDrawerToggle =新ActionBarDrawerToggle(这一点,mDrawerLayout, R.drawable.ic_drawer,//导航菜单切换图标 R.string.app_name,//导航抽屉打开 - 描述的可访问性 R.string.app_name //导航抽屉接近 - 描述的可访问性 ){ 公共无效onDrawerClosed(查看视图){ 。getSupportActionBar()的setTitle(mTitle); //调用prepareOptionsMenu()来显示操作栏图标 invalidateOptionsMenu(); } 公共无效onDrawerOpened(查看drawerView){ 。getSupportActionBar()的setTitle(mDrawerTitle); //调用prepareOptionsMenu()隐藏操作栏图标 invalidateOptionsMenu(); } }; mDrawerLayout.setDrawerListener(mDrawerToggle); 如果(savedInstanceState == NULL){ //对第一个项目的资产净值首次显示视图 displayView(0); } } / ** *滑动菜单项,点击监听器 * * / 私有类SlideMenuClickListener工具 ListView.OnItemClickListener { @覆盖 公共无效onItemClick(适配器视图<>母公司,观景,INT位置, 长ID){ //选定导航抽屉项显示视图 displayView(位置); } } @覆盖 公共布尔onCreateOptionsMenu(菜单菜单){ 。getMenuInflater()膨胀(R.menu.menu_main,菜单); 返回true; } @覆盖 公共布尔onOptionsItemSelected(菜单项项){ //切换上选择操作栏中的应用程序图标/标题导航抽屉 如果(mDrawerToggle.onOptionsItemSelected(项目)){ 返回true; } //处理操作栏中点击动作 开关(item.getItemId()){ 案例R.id.action_settings: 返回true; 默认: 返回super.onOptionsItemSelected(项目); } } / *** *时调用invalidateOptionsMenu()被触发 * / @覆盖 prepareOptionsMenu(菜单菜单)上公共布尔{ //如果导航抽屉被打开,隐藏行动项目 布尔drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList); menu.findItem(R.id.action_settings).setVisible(drawerOpen!); 返回super.on prepareOptionsMenu(菜单); } / ** 所选导航抽屉列表项* Diplaying片段视图 * * / 私人无效displayView(INT位置){ //更新替换片段的主要内容 片段片段= NULL; 开关(位置){ 情况下0: 片段=新PersonelIp(); 打破; 情况1: 片段=新PersonelIp(); 打破; 默认: 打破; } 如果(片段!= NULL){ FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager.beginTransaction() .replace(R.id.frame_container,片段).commit(); //更新所选项目和标题,然后关上抽屉 mDrawerList.setItemChecked(位置,真正的); mDrawerList.setSelection(位置); (navMenuTitles [位置])的setTitle; mDrawerLayout.closeDrawer(mDrawerList); }其他{ //错误创建片段 Log.e(MainActivity,出错创建片段); } } @覆盖 公共无效的setTitle(CharSequence的标题){ mTitle =称号; 。getSupportActionBar()的setTitle(mTitle); } / ** *当使用ActionBarDrawerToggle,你必须在调用它 * onPostCreate()和onConfigurationChanged()... * / @覆盖 保护无效onPostCreate(捆绑savedInstanceState){ super.onPostCreate(savedInstanceState); //同步onRestoreInstanceState后切换状态已经发生。 mDrawerToggle.syncState(); } @覆盖 公共无效onConfigurationChanged(配置NEWCONFIG){ super.onConfigurationChanged(NEWCONFIG); //把任何配置更改抽屉toggls mDrawerToggle.onConfigurationChanged(NEWCONFIG); }}
解决方案
尝试从 Theme.AppCompat.Light修改
到 AppTheme
的母公司。 DarkActionBar Theme.Holo.Light.DarkActionBar
。
I've just tried to copy from this code; http://www.androidhive.info/2013/11/android-sliding-menu-using-navigation-drawer
But I couldn't get launcher icon and drawer lines are not left aligned.
Here is my MainActivity ,I have no idea how to correct this.
import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import com.nsm.onur.nkys.adapter.NavDrawerItem;
import com.nsm.onur.nkys.adapter.NavDrawerListAdapter;
import java.util.ArrayList;
public class MainActivity extends ActionBarActivity {
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;
// nav drawer title
private CharSequence mDrawerTitle;
// used to store app title
private CharSequence mTitle;
// slide menu items
private String[] navMenuTitles;
private TypedArray navMenuIcons;
private ArrayList<NavDrawerItem> navDrawerItems;
private NavDrawerListAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTitle = mDrawerTitle = getTitle();
// load slide menu items
navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);
// nav drawer icons from resources
navMenuIcons = getResources()
.obtainTypedArray(R.array.nav_drawer_icons);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.list_slidermenu);
navDrawerItems = new ArrayList<NavDrawerItem>();
// adding nav drawer items to array
// Home
navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1)));
navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1)));
// Recycle the typed array
navMenuIcons.recycle();
mDrawerList.setOnItemClickListener(new SlideMenuClickListener());
// setting the nav drawer list adapter
adapter = new NavDrawerListAdapter(getApplicationContext(),
navDrawerItems);
mDrawerList.setAdapter(adapter);
// enabling action bar app icon and behaving it as toggle button
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.drawable.ic_drawer, //nav menu toggle icon
R.string.app_name, // nav drawer open - description for accessibility
R.string.app_name // nav drawer close - description for accessibility
) {
public void onDrawerClosed(View view) {
getSupportActionBar().setTitle(mTitle);
// calling onPrepareOptionsMenu() to show action bar icons
invalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView) {
getSupportActionBar().setTitle(mDrawerTitle);
// calling onPrepareOptionsMenu() to hide action bar icons
invalidateOptionsMenu();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
if (savedInstanceState == null) {
// on first time display view for first nav item
displayView(0);
}
}
/**
* Slide menu item click listener
* */
private class SlideMenuClickListener implements
ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// display view for selected nav drawer item
displayView(position);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// toggle nav drawer on selecting action bar app icon/title
if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
// Handle action bar actions click
switch (item.getItemId()) {
case R.id.action_settings:
return true;
default:
return super.onOptionsItemSelected(item);
}
}
/***
* Called when invalidateOptionsMenu() is triggered
*/
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// if nav drawer is opened, hide the action items
boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
menu.findItem(R.id.action_settings).setVisible(!drawerOpen);
return super.onPrepareOptionsMenu(menu);
}
/**
* Diplaying fragment view for selected nav drawer list item
* */
private void displayView(int position) {
// update the main content by replacing fragments
Fragment fragment = null;
switch (position) {
case 0:
fragment = new PersonelIp();
break;
case 1:
fragment=new PersonelIp();
break;
default:
break;
}
if (fragment != null) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.frame_container, fragment).commit();
// update selected item and title, then close the drawer
mDrawerList.setItemChecked(position, true);
mDrawerList.setSelection(position);
setTitle(navMenuTitles[position]);
mDrawerLayout.closeDrawer(mDrawerList);
} else {
// error in creating fragment
Log.e("MainActivity", "Error in creating fragment");
}
}
@Override
public void setTitle(CharSequence title) {
mTitle = title;
getSupportActionBar().setTitle(mTitle);
}
/**
* When using the ActionBarDrawerToggle, you must call it during
* onPostCreate() and onConfigurationChanged()...
*/
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
mDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Pass any configuration change to the drawer toggls
mDrawerToggle.onConfigurationChanged(newConfig);
}
}
解决方案
Try to change parent of the AppTheme
from Theme.AppCompat.Light.DarkActionBar
to Theme.Holo.Light.DarkActionBar
.