如何向导航Toolbar添加按钮?Toolbar中ImageButton真机不显示求助
嘿,我来帮你搞定这个头疼的问题!你在Toolbar里添加的ImageButton在Android Studio预览里可见,但真机上看不到,大概率是布局适配或者属性设置的问题,咱们一步步排查:
去掉硬编码的左外边距
你设置了android:layout_marginLeft="330dp",这是个固定值,在小屏幕设备上这个距离会直接把按钮推到屏幕外面去,完全看不到。换成基于位置对齐的属性更靠谱:
把这个属性改成android:layout_gravity="end",再加上android:layout_marginRight="16dp"给按钮留一点右边的间距,这样不管屏幕大小,按钮都会靠右侧显示。确保图标和Toolbar背景有对比度
有时候图标颜色和Toolbar背景色太接近,肉眼就看不到了。可以给ImageButton加上android:tint="@android:color/white"(如果你的Toolbar是深色背景的话),或者设置android:background="@null"去掉默认的按钮背景,让图标更清晰。检查Toolbar是否正确绑定为ActionBar
别忘了在MainActivity的onCreate方法里加上这段代码,确保Toolbar被正确初始化:Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar);验证图标资源是否有效
确认@drawable/ic_home这个资源确实存在,而且在不同分辨率的drawable文件夹里都有对应的图标(或者是矢量图资源),避免因为资源缺失导致按钮显示异常。
下面是修改后的布局代码示例,你可以参考一下:
<?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/AppTheme.AppBarOverlay"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay"> <ImageButton android:id="@+id/home_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_home" android:layout_gravity="end" android:layout_marginRight="16dp" android:background="@null" android:tint="@android:color/white" android:visibility="visible"/> </android.support.v7.widget.Toolbar> </android.support.design.widget.AppBarLayout> <include layout="@layout/content_main" /> </android.support.design.widget.CoordinatorLayout>
内容的提问来源于stack exchange,提问作者Rajabmurod Karimov

