在我的应用中,我想在操作栏的标题中显示两条信息。然而,由于标题可以具有各种长度,因此一些设备将不能显示两条信息。如果发生这种情况,那么我可以使用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%)。
我对这个解决方案不是很满意,并且觉得必须有更可靠的方法来解决这个问题。
答案 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");
现在,如果要更改操作栏高度以创建更多行空间,则可以尝试使用反射来获取操作栏的mContentHeight
属性。并相应地设置它。我没有试验过这个但是你应该试一试。
目前,我正在使用反射在CollapsingToolbar中尝试多线标题栏。