Android Studio中如何修改Navigation Drawer的Toggle颜色?
嘿,我看你在Android Studio里开发带Navigation Drawer的项目,想改Toggle的箭头颜色,结合你的代码给你整理了几个实用的方法:
方法一:在代码中直接修改Toggle的Drawable颜色
这个方法适合只需要在单个Activity里修改的场景,步骤很简单:
- 首先确保你正确初始化了
ActionBarDrawerToggle,如果布局里有Toolbar,建议把Toolbar传给Toggle构造函数(关联更紧密)。 - 获取Toggle自带的
DrawerArrowDrawable,然后设置你想要的颜色。
修改你onCreate方法里的相关代码,去掉之前覆盖Home图标的那几行(getSupportActionBar().setHomeAsUpIndicator(upArrow)这些会干扰Toggle的图标),替换成下面的逻辑:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化Toolbar(如果布局里有Toolbar的话) Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); mDrawerlayout = (DrawerLayout) findViewById(R.id.drawerLayout); // 把Toolbar传入Toggle构造函数,让它自动关联顶部导航 mToggle = new ActionBarDrawerToggle(this, mDrawerlayout, toolbar, R.string.Open, R.string.Close); mDrawerlayout.addDrawerListener(mToggle); // 重点:修改Toggle箭头的颜色 DrawerArrowDrawable toggleDrawable = mToggle.getDrawerArrowDrawable(); // 可以用颜色资源,也可以直接解析十六进制颜色 toggleDrawable.setColor(getResources().getColor(R.color.black)); // 或者用 toggleDrawable.setColor(Color.parseColor("#000000")); final WebView wv = findViewById(R.id.wv); mToggle.syncState(); // 同步Toggle状态,这行不能丢 wv.setWebViewClient(new WebViewClient()); wv.getSettings().setJavaScriptEnabled(true); wv.loadUrl("http://www.parabolaindo.com"); // 剩下的NavigationView逻辑保持不变... }
方法二:通过主题样式全局修改
如果你希望整个App里的所有Navigation Drawer Toggle都用同一个颜色,用主题样式的方法更高效:
打开res/values/styles.xml,修改你的App主题,添加drawerArrowStyle属性:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- 其他已有的属性保持不变 --> <item name="drawerArrowStyle">@style/CustomDrawerArrowStyle</item> </style> <!-- 自定义Toggle样式 --> <style name="CustomDrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle"> <item name="color">@color/black</item> <!-- 这里设置你要的颜色 --> </style>
这样所有使用AppTheme主题的Activity,它们的Navigation Drawer Toggle都会自动变成你设置的颜色,不用在每个Activity里写重复代码。
注意事项
- 如果你之前用了
getSupportActionBar().setHomeAsUpIndicator()来设置Home图标,记得把这部分代码删掉,因为它会覆盖Toggle的默认箭头,导致颜色修改不生效。 - 如果你用的是AndroidX库,
getResources().getColor()可以替换成ContextCompat.getColor(this, R.color.black),兼容性更好。
内容的提问来源于stack exchange,提问作者Hidung Pesek
相关产品推荐
相关产品推荐

