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

时间:2016-03-17 09:12:02

标签: 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%)。

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

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,需要对此问题提供一致的库支持。

这是我做的:

<强> 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

现在,如果要更改操作栏高度以创建更多行空间,则可以尝试使用反射来获取操作栏的mContentHeight属性。并相应地设置它。我没有试验过这个但是你应该试一试。

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