自定义Toolbar元素调整:替换左侧Fenix图标并设置边距
搞定Toolbar元素位置调整+替换左侧Fenix图标
嘿,我来帮你解决这个Toolbar的问题!咱们先把核心需求拆解:替换左侧默认的Fenix图标,同时解决元素位置没法调整的问题,分两种方案给你参考:
方案一:自定义Toolbar布局(最灵活,推荐)
如果还没做自定义布局,建议直接搞一个,这样想怎么调位置都没问题:
- 新建
toolbar_custom.xml布局文件:
<?xml version="1.0" encoding="utf-8"?> <androidx.appcompat.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/custom_toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" <!-- 去掉默认的内边距,让元素可以贴边 --> app:contentInsetLeft="0dp" app:contentInsetStart="0dp" app:contentInsetStartWithNavigation="0dp"> <!-- 这里就是替换Fenix的自定义图标,想调边距直接改margin就行 --> <ImageView android:id="@+id/toolbar_logo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/你的自定义图标" android:layout_marginStart="16dp" android:layout_marginLeft="16dp"/> <!-- 用LinearLayout把所有按钮包起来,方便调整间距和位置 --> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_vertical" android:orientation="horizontal" android:layout_marginStart="16dp"> <!-- 你的第一个按钮,想调间距改marginHorizontal就行 --> <ImageButton android:id="@+id/risensteam_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_action_unnamed" android:background="?attr/selectableItemBackgroundBorderless" android:layout_marginHorizontal="8dp"/> <!-- 第二个按钮 --> <ImageButton android:id="@+id/news_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/news_icon" android:background="?attr/selectableItemBackgroundBorderless" android:layout_marginHorizontal="8dp"/> <!-- 剩下的ongoing、base等按钮照着上面的格式加就行 --> </LinearLayout> </androidx.appcompat.widget.Toolbar>
- 在你的Activity布局里引用这个自定义Toolbar:
<include layout="@layout/toolbar_custom" />
- 在Activity代码里设置Toolbar(可选,处理点击事件):
// Kotlin示例 val toolbar = findViewById<Toolbar>(R.id.custom_toolbar) setSupportActionBar(toolbar) // 隐藏默认的Home按钮,避免和自定义图标冲突 supportActionBar?.setDisplayHomeAsUpEnabled(false) supportActionBar?.setDisplayShowHomeEnabled(false) // 给自定义图标加点击事件 findViewById<ImageView>(R.id.toolbar_logo).setOnClickListener { // 这里写点击图标要做的事 }
方案二:用原menu XML修改(不用自定义布局)
如果不想改布局,也可以通过调整menu和代码来实现:
- 修改你的menu XML,把自定义图标作为第一个item:
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <!-- 第一个item就是替换Fenix的图标,标题留空避免显示文字 --> <item android:id="@+id/toolbar_logo_item" android:icon="@drawable/你的自定义图标" app:showAsAction="always" android:title=""/> <!-- 你的原有按钮保持不变 --> <item android:id="@+id/risensteam_button" android:title="@string/main" android:icon="@drawable/ic_action_unnamed" app:showAsAction="always" /> <item android:id="@+id/news_button" android:icon="@drawable/news_icon" android:title="@string/main" app:showAsAction="always" /> <!-- 其他按钮不变 --> </menu>
- 在Activity代码里调整Toolbar的内边距,让图标靠左:
val toolbar = findViewById<Toolbar>(R.id.toolbar) setSupportActionBar(toolbar) // 隐藏默认的Home图标 supportActionBar?.setDisplayHomeAsUpEnabled(false) supportActionBar?.setDisplayShowHomeEnabled(false) // 去掉Toolbar默认的内边距,让第一个item(自定义图标)可以贴边 toolbar.setContentInsetsAbsolute(0, 0) toolbar.setContentInsetsRelative(0, 0) // 处理图标点击事件 toolbar.setOnMenuItemClickListener { item -> when(item.itemId) { R.id.toolbar_logo_item -> { // 点击图标逻辑 true } // 其他按钮的点击逻辑 R.id.risensteam_button -> { // 做你想做的事 true } else -> false } }
为啥原来的元素没法调位置?
默认Toolbar的menu item是按添加顺序排列,但系统自带了content inset(内边距),导致第一个item不会完全靠左;而且默认的menu item间距是系统控制的,没法直接改。所以自定义布局是最省心的方式,想怎么调位置、间距都由你说了算~
内容的提问来源于stack exchange,提问作者user9815351
相关产品推荐
相关产品推荐

