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

Android应用标题过长被Toolbar截断,如何实现标题可滚动?

嘿,这个问题我太熟了!当Toolbar里的标题太长时,默认的TextView只会截断显示,想要让它滚动起来其实不难,给你两种实用的解决方案:

方法1:自定义Toolbar布局(灵活可控)

这种方式可以完全掌控标题的样式和行为,适合需要自定义样式的场景:

  1. 首先创建一个自定义的Toolbar布局文件(比如res/layout/custom_toolbar.xml):
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/custom_toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="?attr/colorPrimary">

    <TextView
        android:id="@+id/toolbar_title"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:ellipsize="marquee"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:gravity="center_vertical"
        android:marqueeRepeatLimit="marquee_forever"
        android:scrollHorizontally="true"
        android:text="@string/app_name"
        android:textColor="@android:color/white"
        android:textSize="?attr/textAppearanceHeadline6" />

</androidx.appcompat.widget.Toolbar>

这里的关键属性:

  • android:ellipsize="marquee":设置超出部分以滚动方式显示
  • android:marqueeRepeatLimit="marquee_forever":无限重复滚动
  • android:focusable和android:focusableInTouchMode:确保TextView能获取焦点触发滚动
  • layout_weight="1":让标题占据Toolbar的可用空间(避开左侧返回键、右侧菜单)
  1. 在你的Activity中替换默认Toolbar并启用滚动:

Kotlin版本

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    
    val toolbar = findViewById<Toolbar>(R.id.custom_toolbar)
    setSupportActionBar(toolbar)
    // 隐藏系统默认的标题,避免重复显示
    supportActionBar?.setDisplayShowTitleEnabled(false)
    
    val titleTextView = findViewById<TextView>(R.id.toolbar_title)
    // 这一步是核心!设置为选中状态才能触发滚动动画
    titleTextView.isSelected = true
}

Java版本

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    Toolbar toolbar = findViewById(R.id.custom_toolbar);
    setSupportActionBar(toolbar);
    if (getSupportActionBar() != null) {
        getSupportActionBar().setDisplayShowTitleEnabled(false);
    }
    
    TextView titleTextView = findViewById(R.id.toolbar_title);
    titleTextView.setSelected(true);
}

方法2:直接修改默认标题TextView(快速简洁)

如果不想改布局,直接获取Toolbar自带的标题TextView,修改它的属性即可:

Kotlin版本

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    
    val toolbar = findViewById<Toolbar>(R.id.toolbar)
    setSupportActionBar(toolbar)
    
    // 获取Toolbar的第一个子View(默认就是标题TextView)
    val titleTextView = toolbar.getChildAt(0) as? TextView
    titleTextView?.apply {
        ellipsize = TextUtils.TruncateAt.MARQUEE
        isFocusable = true
        isFocusableInTouchMode = true
        marqueeRepeatLimit = -1 // 等价于marquee_forever,无限滚动
        isSelected = true
        setHorizontallyScrolling(true)
    }
}

Java版本

import android.text.TextUtils;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    
    TextView titleTextView = (TextView) toolbar.getChildAt(0);
    if (titleTextView != null) {
        titleTextView.setEllipsize(TextUtils.TruncateAt.MARQUEE);
        titleTextView.setFocusable(true);
        titleTextView.setFocusableInTouchMode(true);
        titleTextView.setMarqueeRepeatLimit(-1);
        titleTextView.setSelected(true);
        titleTextView.setHorizontallyScrolling(true);
    }
}

注意事项

  • 不管用哪种方法,isSelected = true都是触发滚动效果的核心,一定要记得设置!
  • 如果Toolbar右侧有菜单按钮,确保标题TextView有足够的空间(方法1的layout_weight已经处理了这个问题)
  • 如果想要滚动一次就停止,可以把marqueeRepeatLimit设为具体的数值(比如1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 13:32:37