java - 我如何判断我的操作栏的标题是否会被截断?

标签 java android android-actionbar

在我的应用程序中,我想在操作栏的标题中显示两条信息。然而,由于标题的长度可能不同,一些设备将无法同时显示这两条信息。如果发生这种情况,我可以使用 getSupportActionBar().setSubtitle 显示第二个字符串。

但是,我遇到的问题是我不知道如何检查标题是否会被截断。我试过使用 getSupportActionBar().isTitleTruncated(),但这总是返回 false。

        if (getSupportActionBar().isTitleTruncated())
        {
            getSupportActionBar().setTitle(username);
            getSupportActionBar().setSubtitle("❤" + " " + String.valueOf(rating));
        }
        else
        {
            getSupportActionBar().setTitle(username + "  " + "❤" + " " + String.valueOf(rating));
        }

根据这个https://code.google.com/p/android/issues/detail?id=81987 isTitleTruncated() 需要布局传递才能返回。很遗憾,我认为 isTitleTruncated() 对我不起作用。

有谁知道还有什么方法可以做到这一点?

更新:我一直在研究 DisplayMetrics,可能已经找到了一个可能的解决方案,尽管不一致。

我可以通过以下方式获取设备的像素宽度:

DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int width = displayMetrics.widthPixels;

然后我可以通过以下方式获取标题字符串的宽度:

Paint paint = new Paint();
float scaledPx = 18 * displayMetrics.density;
paint.setTextSize(scaledPx);
float stringSize = paint.measureText(username + "  " + "❤" + " " + String.valueOf(rating));

然后,如果我将字符串宽度除以设备宽度,我可以找出该字符串占屏幕宽度的百分比。通过反复试验,我可以计算出标题截断的百分比。

到目前为止,我已经在三台设备上尝试过这个,不幸的是这个数字不是很一致(截断发生在我的应用程序的 30% 到 45% 之间)。

我对这个解决方案不是很满意,觉得必须有更可靠的方法来解决这个问题。

最佳答案

我遇到了同样的问题,需要一致的库支持来解决这个问题。

这是我做的:

Activity.xml:

<android.support.design.widget.AppBarLayout>
<android.support.v7.widget.Toolbar>
//other elements
<TextView


android:id="@+id/detail_title"  
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:alpha="1.0"
android:gravity="start|center_horizontal|left"
android:text="Title"  
android:textAppearance="@style/Base.TextAppearance.AppCompat.Widget.ActionBar.Title"
// +++++++ IMPORTANT +++++++++++++
// these two lines are important. 
android:maxLines="2" // title text will expand to 2 lines.
android:lineSpacingMultiplier="0.9" // line spacing factor.
                    />

/> 
/>

Activity.java:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

// using textView in Toolbar in activity_main.xml
// disable the default title
getSupportActionBar().setDisplayShowTitleEnabled(false);
// set title using detail_text_view
detail_text_view = (TextView) findViewById(R.id.detail_title);
detail_text_view.setText("A B C D E F G H I J K L M N O P Q R S T U V W X Y Z");

结果:
enter image description here

现在,如果你想改变 actionbar 的高度来增加行距,那么你可以尝试反射来获取 actionbar 的 mContentHeight 属性。并相应地设置它。我没有对此进行实验,但你应该试一试。

目前,我也在尝试使用反射在 CollapsingToolbar 中使用多行标题栏。

关于java - 我如何判断我的操作栏的标题是否会被截断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36056014/

相关文章:

java - 将应用程序中的数据恢复(回滚)到指定状态(日期)的最佳方法是什么?

java - 显示键/值数据的更好方法是什么

java - Weblogic服务器尝试抑制当前工作线程并开始处理新请求

java - Android:当我的应用程序处于后台时,如何检测自拍杆按钮点击

android - 使用 Retrofit 访问带有 key/id 的 API

java - 强制 ActionBar 显示完整标题而不被截断?

Android 搜索 View : Open suggestions list dropdown by default

java - 字符串类内部 - 如果使用 UTF-8,缓存字符偏移到字节关系

java - 我应该使用匿名内部类来模拟Java中的 'out'参数吗?

android - splitActionBarWhenNarrow 在 Android 中是如何工作的?