【发布时间】:2016-01-20 20:34:18
【问题描述】:
我正在关注http://developer.android.com/training/implementing-navigation/nav-drawer.html 上的教程,但在使用 ActionBarDrawerToggle 时遇到问题。该文档使用 v4,但由于已弃用,因此我正在尝试使用 v7。
我的问题是我无法显示抽屉/汉堡图标,但它总是显示向上箭头,即使我在清单中没有父母的主要活动上也是如此。
这是我的主要活动:
import android.app.Activity;
import android.app.Fragment;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import com.example.example.R;
public class MainActivity extends Activity
{
private static final String LOG_TAG = MainActivity.class.getName();
private String[] menuItems;
private DrawerLayout drawerLayout;
private ListView drawerList;
private ActionBarDrawerToggle drawerToggle;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (findViewById(R.id.fragment_container) != null) {
if (savedInstanceState != null) {
return;
}
menuItems = getResources().getStringArray(R.array.menu_items);
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
drawerList = (ListView) findViewById(R.id.menu);
drawerList.setAdapter(new ArrayAdapter<String>(this, R.layout.menu_list_item, menuItems));
drawerList.setOnItemClickListener(new DrawerItemClickListener());
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
drawerToggle = new ActionBarDrawerToggle(
this,
drawerLayout,
R.string.drawer_open,
R.string.drawer_close
) {
public void onDrawerClosed(View view) {
super.onDrawerClosed(view);
invalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
invalidateOptionsMenu();
}
};
drawerLayout.setDrawerListener(drawerToggle);
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
LoginFragment loginFragment = new LoginFragment();
getFragmentManager()
.beginTransaction()
.replace(R.id.fragment_container, loginFragment).commit();
}
}
@Override
protected void onPostCreate(Bundle savedInstanceState)
{
super.onPostCreate(savedInstanceState);
drawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
drawerToggle.onConfigurationChanged(newConfig);
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
if (drawerToggle.onOptionsItemSelected(item)) {
return true;
}
return super.onOptionsItemSelected(item);
}
private void selectMenuItem(int position)
{
Fragment fragment = null;
switch (position) {
case 0:
fragment = new DialFragment();
break;
case 1:
fragment = new NumbersFragment();
break;
case 2:
fragment = new LoginFragment();
break;
}
getFragmentManager()
.beginTransaction()
.replace(R.id.fragment_container, fragment)
.commit();
drawerList.setItemChecked(position, true);
drawerLayout.closeDrawer(drawerList);
}
private class DrawerItemClickListener implements ListView.OnItemClickListener
{
@Override
public void onItemClick(AdapterView parent, View view, int position, long id)
{
selectMenuItem(position);
}
}
}
当我改变它的工作:
import android.support.v7.app.ActionBarDrawerToggle;
到
import android.support.v4.app.ActionBarDrawerToggle;
当我改变时:
drawerToggle = new ActionBarDrawerToggle(
this,
drawerLayout,
R.string.drawer_open,
R.string.drawer_close
)
到
drawerToggle = new ActionBarDrawerToggle(
this,
drawerLayout,
R.drawable.ic_drawer,
R.string.drawer_open,
R.string.drawer_close
)
在这些更改之后,我可以看到一个正确的汉堡包图标,该图标在抽屉打开/关闭时会折叠/展开,但我希望 v7 能够正常工作。有什么想法吗?
编辑:刚刚在我的手机上尝试过(运行 Android 5.0.1),当抽屉关闭时显示汉堡图标,打开时动画成箭头。我使用的模拟器是 API 15 / Android 4.0.3
【问题讨论】:
-
您将 v4 更改为 v7 还是将 v7 更改为 v4?那部分不清楚
-
抱歉,当我将 v7 更改为 v4 时,它可以工作(但已弃用)。更新了主帖。
-
你试过了吗? getActionBar().setDisplayShowHomeEnabled(true);如果你这样做 getActionBar().setDisplayHomeAsUpEnabled(false);汉堡图标应该显示
-
我尝试这样做时根本没有图标,而且我无法通过单击打开抽屉,只需滑动即可。
-
我会建议你使用工具栏,因为这就是 android 现在所建议的。如果您有兴趣,可以帮助您。我最近用回收器查看器做了一个
标签: android