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

Kotlin项目:如何让Toolbar菜单项水平均匀分布?

解决Toolbar菜单项水平均匀分布的问题

问题说明

即使将Toolbar标题设为空,菜单项仍默认靠右排列,要实现无标题且菜单项水平均匀分布,无法依赖默认的Menu机制,需要自定义Toolbar布局。

解决方案步骤

  1. 创建自定义Toolbar布局
    新建layout/toolbar_custom.xml,用横向LinearLayout作为容器,给每个菜单项对应的控件设置layout_weight="1",让它们均分Toolbar宽度:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/bootRed"
    android:orientation="horizontal"
    android:weightSum="4"
    android:paddingHorizontal="8dp">

    <ImageView
        android:id="@+id/btn_hunts"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:src="@drawable/baseline_catching_pokemon_24_black"
        android:scaleType="centerInside"
        android:padding="8dp"
        android:contentDescription="@string/hunts"/>

    <LinearLayout
        android:id="@+id/btn_add_hunt"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="vertical"
        android:gravity="center"
        android:padding="8dp">
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_baseline_fiber_new_24"
            android:contentDescription="@string/new_hunt"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/new_hunt"
            android:textColor="@android:color/white"/>
    </LinearLayout>

    <ImageView
        android:id="@+id/btn_history"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:src="@drawable/ic_baseline_history_24"
        android:scaleType="centerInside"
        android:padding="8dp"
        android:contentDescription="@string/history"/>

    <ImageView
        android:id="@+id/btn_settings"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:src="@drawable/ic_baseline_settings_applications_24"
        android:scaleType="centerInside"
        android:padding="8dp"
        android:contentDescription="Settings"/>
</LinearLayout>
  1. 修改Activity布局中的Toolbar引用
    替换原来的Toolbar为这个自定义布局,同时修正原Toolbar的约束(原约束app:layout_constraintBottom_toBottomOf="parent"会把Toolbar放在底部,改为顶部约束):
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
    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=".HuntsActivity">

    <!-- 自定义Toolbar -->
    <include
        android:id="@+id/custom_toolbar"
        layout="@layout/toolbar_custom"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
  1. 在Activity中绑定控件并设置点击事件
    不再使用setSupportActionBar和onCreateOptionsMenu,直接绑定自定义Toolbar的控件并处理点击:
class HuntsActivity : AppCompatActivity() {
    private lateinit var binding: HuntsActivityBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = HuntsActivityBinding.inflate(layoutInflater)
        setContentView(binding.root)

        // 设置各个按钮的点击事件
        binding.btnHunts.setOnClickListener {
            // 处理查看狩猎记录的逻辑
        }

        binding.btnAddHunt.setOnClickListener {
            // 处理添加新狩猎的逻辑
        }

        binding.btnHistory.setOnClickListener {
            // 处理查看历史的逻辑
        }

        binding.btnSettings.setOnClickListener {
            // 处理查看设置的逻辑
        }
    }
}

补充说明

  • 如果需要保留Toolbar的系统特性(比如返回键),可以在自定义布局里嵌套原生Toolbar,再在内部放置均匀分布的控件。
  • 原代码中Toolbar的约束存在错误,已修正为顶部对齐,确保Toolbar显示在屏幕顶部。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 03:25:02