You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android:如何通过代码为Toolbar设置主题?

解决代码创建Toolbar时样式找不到的问题

这个问题我之前碰到过,核心原因是你找错了样式的资源归属——ThemeOverlay.AppCompat.ActionBar是AppCompat支持库提供的样式,并不在系统的android.R.style里,所以才会报“cannot find symbol”错误。下面是具体的解决步骤和完整代码示例:

1. 导入正确的资源类

确保你导入的是应用模块的R类或者AppCompat库的专属R类,而不是系统自带的android.R。比如:

import com.your.app.package.R; // 替换成你自己的应用包名
// 或者导入AppCompat库的R类(优先推荐用自己模块的R,避免自定义样式冲突)
// import android.support.v7.appcompat.R;

2. 修正样式资源的引用

把代码里的android.R.style.ThemeOverlay_AppCompat_ActionBar替换成R.style.ThemeOverlay_AppCompat_ActionBar,因为这个样式属于AppCompat库,存在于你的应用资源体系中,而非系统资源。

3. 完整代码示例(还原XML所有属性)

代码创建Toolbar时,XML里的所有属性都需要手动配置,这里给你还原所有你在XML里设置的参数:

// 创建Toolbar实例
android.support.v7.widget.Toolbar actionBar = new android.support.v7.widget.Toolbar(getContext());

// 设置宽高参数,对应XML的layout_width和layout_height
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(
        ViewGroup.LayoutParams.MATCH_PARENT,
        getResources().getDimensionPixelSize(R.dimen.abc_action_bar_default_height_material) // 对应?attr/actionBarSize
);
actionBar.setLayoutParams(params);

// 设置背景色,对应XML的android:background="?attr/colorPrimary"
TypedValue colorPrimary = new TypedValue();
getContext().getTheme().resolveAttribute(R.attr.colorPrimary, colorPrimary, true);
actionBar.setBackgroundColor(colorPrimary.data);

// 设置阴影高度,对应XML的android:elevation="4dp"
actionBar.setElevation(4f * getResources().getDisplayMetrics().density);

// 设置ActionBar主题,对应XML的android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
TypedValue actionBarTheme = new TypedValue();
getContext().getTheme().resolveAttribute(R.style.ThemeOverlay_AppCompat_ActionBar, actionBarTheme, true);
actionBar.setTheme(actionBarTheme.data);

// 设置弹出菜单主题,对应XML的app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
TypedValue popupTheme = new TypedValue();
getContext().getTheme().resolveAttribute(R.style.ThemeOverlay_AppCompat_Light, popupTheme, true);
actionBar.setPopupTheme(popupTheme.data);

补充说明

如果你的项目已经迁移到AndroidX,记得把android.support.v7.widget.Toolbar替换为androidx.appcompat.widget.Toolbar,对应的样式资源类也可以换成androidx.appcompat.R或者保持自己模块的R类即可。

内容的提问来源于stack exchange,提问作者Andreas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:45:02