如何显示android操作栏标题而不发生截断

问题描述 投票:0回答:5

我有一个标题相当长的应用程序(例如“我的长标题应用程序”)。 我正在使用 ActionBar 并注意到应用程序标题不断被截断(例如我的长标题 A...)。 即使显示 2 个操作栏项目(均标记为“ifRoom”),也会发生这种情况。

有谁知道是否有办法确保活动标题宽度优先于“ifRoom”操作栏项目(即确保我的标题完整显示,如果需要更多空间,操作栏项目将移动到下拉菜单)?

非常感谢大家。

android android-actionbar actionbarsherlock title truncate
5个回答
10
投票

我遇到了操作栏标题非常短的问题。 即使有 5-6 个字符串,操作栏标题也会被省略号截断。

如果您有一个短标题(例如“Shop”),则在输入字符串比前一个标题长的情况下调用

ActionBar.setTitle(<inputString or resId>)
,则
TextView
不会调整自身大小以给您的新标题空间,即使
 ActionBar
有足够的空间。

之前(短标题)

short title, before

// now call setTitle() with a longer title
ActionBar actionBar = getActionBar();
actionBar.setTitle("Collin");

之后(短标题)

longer title, after

解决方案

将您的

setTitle()
通话移至
onCreateOptionsMenu()

结果:

enter image description here


5
投票

当最后一个标题小于新标题时会导致此错误,因此技巧是使最后一个标题始终比新的 setTitle 长。

即使在 Google Issue Tracker 中也没有解决方案,问题状态现在已过时。

更新:(解决方法)

getSupportActionBar().setTitle("");

getSupportActionBar().setTitle(title);

1
投票

不幸的是,没有办法防止操作栏标题被截断。但是,您确实可以选择一些选项来释放操作栏中的一些空间。您可以:

  1. 将您的操作项强制放入溢出菜单中。如果您使用最新的 ActionBarSherlock(4.2.0),则执行此操作要困难得多。有关使用 4.2.0 时的解决方法,请参阅此answer。如果您觉得不需要最新的版本,您可以使用ABS 4.1.0。在 4.1.0 上,您只需将活动主题设置为
    @style/Theme.Sherlock.ForceOverflow
    。请注意,不建议强制使用溢出菜单,因为它会在应用程序之间提供不一致的导航。
  2. 您可以使用拆分操作栏并将操作项强制放入底部操作栏。看看 CommonsWare 的回答这里。有关拆分操作栏的信息,请参阅 此处。

0
投票

我不确定是否有直接的方法,但有多种解决方法。

1)您可以强制该栏到达底部并节省空间:

如何在 ICS 中强制操作栏位于底部?

http://developer.android.com/guide/topics/manifest/application-element.html

2) 设置自定义字体的标题: https://stackoverflow.com/a/8748802/1276103

3)您可以将标题设置为两行: https://stackoverflow.com/a/18867068/1276103


0
投票

@Collin Flynn 给出了正确答案。不幸的是,onCreateOptionsMenu() 已被弃用。这就是解决方案:

// inside your fragment
fun onViewCreated() {
  initMenu()
  // ... ... 
}

    val menuHost: MenuHost by lazy {  requireActivity()  }
    private var crossMenuProvider: MenuProvider? = null

    private fun initMenu() {
        if(crossMenuProvider!=null) {
            menuHost.removeMenuProvider(crossMenuProvider!!)
        }

        crossMenuProvider =
            object: MenuProvider {
                override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
                    setYourLongTitle() // <------ set the title in this function
                    menuInflater.inflate(R.menu.flight_re_white_cross, menu)
                }

                override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
                    if(menuItem.itemId == R.id.cross_menu_button) {
                        requireActivity().onBackPressedDispatcher.onBackPressed()

                        TripSearchUiWrapper.navigateToCorrectPage(this@SingleDateCalendarFragment, sourceTag = source )
                        return true
                    }
                    return false
                }
            }
        menuHost.addMenuProvider(crossMenuProvider!!, viewLifecycleOwner, Lifecycle.State.RESUMED)
    }

© www.soinside.com 2019 - 2024. All rights reserved.