Android Studio Flamingo版自定义Toolbar图片与文本不显示问题
解决Android Studio Flamingo中自定义Toolbar内容不显示问题
问题分析
- 自定义Toolbar内的ImageView和TextView完全不显示,已通过
getSupportActionBar().hide();隐藏默认ActionBar - 尝试过
android:src、app:srcCompat、android:foreground等多种图片设置方式,调整颜色也无效 - 出现属性未使用警告,提示部分属性版本高于minSdkVersion被系统忽略
核心解决步骤
1. 修复Toolbar主题冲突
你的主题使用Theme.MaterialComponents.DayNight.NoActionBar.Bridge,但Toolbar设置了android:theme="?attr/actionBarTheme"——该属性在NoActionBar主题中未定义,会导致Toolbar内部布局继承错误样式(比如文字/图标颜色与背景色一致,视觉上“消失”)。
修改方案:
移除Toolbar的android:theme属性,或替换为兼容的弹窗主题:
<androidx.appcompat.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="56dp" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:background="@color/white" android:elevation="6dp" android:minHeight="?attr/actionBarSize" <!-- 替换为兼容的弹窗主题 --> app:popupTheme="?attr/actionBarPopupTheme">
2. 修复高版本属性兼容性问题
android:foreground是API 23及以上才支持的属性,若你的minSdkVersion低于23,该属性会被直接忽略,改用app:srcCompat设置图片(矢量图必须使用此属性)- 对高于minSdk的属性添加
tools:targetApi标注,消除警告
3. 修复LinearLayout布局挤压问题
TextView的android:layout_width="wrap_content"搭配android:layout_weight="1"会导致布局计算异常,改成android:layout_width="0dp"才能让weight生效,避免内部控件被挤压隐藏:
<TextView android:id="@+id/textView6" android:layout_width="0dp" <!-- 修改为0dp使weight生效 --> android:layout_height="40dp" android:layout_weight="1" android:fontFamily="@font/bilbo_swash_caps" android:gravity="center_vertical" android:text="@string/instagram" android:textColor="@color/textcolor" android:textSize="25sp" android:textStyle="bold" tools:ignore="InefficientWeight,TextSizeCheck" />
4. 确保矢量图支持(若使用矢量图)
如果你的@drawable/camera、@drawable/instatv是矢量图,需在app模块的build.gradle中启用支持:
android { defaultConfig { vectorDrawables.useSupportLibrary = true } }
修改后的完整布局XML
<androidx.appcompat.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="56dp" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:background="@color/white" android:elevation="6dp" android:minHeight="?attr/actionBarSize" app:popupTheme="?attr/actionBarPopupTheme"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:gravity="center_vertical"> <!-- 添加垂直居中,避免控件错位 --> <ImageView android:id="@+id/imageView8" android:layout_width="40dp" android:layout_height="40dp" android:layout_marginTop="5dp" android:layout_marginBottom="10dp" app:srcCompat="@drawable/camera" <!-- 替换为兼容的srcCompat --> android:contentDescription="@string/todo1" /> <TextView android:id="@+id/textView6" android:layout_width="0dp" android:layout_height="40dp" android:layout_weight="1" android:fontFamily="@font/bilbo_swash_caps" android:gravity="center_vertical" android:text="@string/instagram" android:textColor="@color/textcolor" android:textSize="25sp" android:textStyle="bold" tools:ignore="InefficientWeight,TextSizeCheck" /> <ImageView android:id="@+id/imageView7" android:layout_width="40dp" android:layout_height="40dp" android:layout_marginTop="5dp" android:layout_marginBottom="10dp" android:contentDescription="@string/todo2" app:srcCompat="@drawable/instatv" /> <ImageView android:id="@+id/imageView6" android:layout_width="40dp" android:layout_height="40dp" android:layout_marginLeft="10dp" android:layout_marginTop="5dp" android:layout_marginRight="10dp" android:layout_marginBottom="10dp" android:contentDescription="@string/todo" app:tint="@color/textcolor" <!-- 改用app:tint兼容低版本 --> app:srcCompat="@drawable/send" /> </LinearLayout> </androidx.appcompat.widget.Toolbar>
额外检查项
- 确认
@color/textcolor的颜色值与Toolbar背景色@color/white有明显区分,避免颜色重叠导致视觉上不可见 - 检查图片资源是否正确放置在
res/drawable或对应密度文件夹中,无命名错误 - 若不需要将自定义Toolbar作为ActionBar使用,确保Activity中未调用
setSupportActionBar(toolbar)
内容的提问来源于stack exchange,提问作者Sarmad Ali
相关产品推荐
相关产品推荐

