2016-05-27 45 views
3

我有一个工具栏,当在横向模式下的宽度不像平时那么宽,但它的高度比平时多,因此我想将标题设置为多行(2行精确)当它在风景。我尝试了一些将TextView放入工具栏的东西,但是当我尝试访问TextView以设置其标题(因为标题是可变的)时,我使用findViewById后得到了一个N​​ullPointer。Android多行工具栏标题

这是当前形势的一些代码(无多):

@Override 
protected void onResume() { 
    super.onResume(); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar2); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     Display display = getWindowManager().getDefaultDisplay(); 
     Point size = new Point(); 
     display.getSize(size); 
     int width = (int)(size.x * 0.37); 
     int height = Math.round(size.x * 0.63f * 0.25f); 
     RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(width,height); 
     toolbar.setLayoutParams(params); 
    } 
    if (executeOnResume) { 
     currentProject = getIntent().getParcelableExtra("Project"); 
     getSupportActionBar().setTitle("This is a pretty long piece of text, I hope it fits"); 
     // A lot of irrelevant code... 
     //... 
     //... 
    } else { loadStuff();} 
} 

这里是工具栏的xml:

<android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar2" 
     android:title="@string/menuLabel1a" 
     app:layout_widthPercent="37%" 
     app:layout_heightPercent="26%" 
     android:gravity="top" 
     app:titleTextAppearance="@style/toolbarTitleText" 
     android:background="@color/greyLight" 
     android:theme="@style/AppTheme.AppBarOverlay" 
     app:popupTheme="@style/AppTheme.PopupOverlay" /> 

回答

5

试试这个:

<android.support.v7.widget.Toolbar 
    android:id="@+id/toolbar2" 
    android:layout_width="match_parent" 
    android:layout_height="@dimen/double_height_toolbar" 
    android:gravity="top" 
    app:titleTextAppearance="@style/toolbarTitleText" 
    android:background="@color/greyLight" 
    android:theme="@style/AppTheme.AppBarOverlay" 
    app:popupTheme="@style/AppTheme.PopupOverlay"> 

     <TextView 
      android:id="@+id/product_details_title" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:gravity="top" 
      android:title="@string/menuLabel1a" 
      android:paddingTop="@dimen/padding_normal" 
      style="@android:style/TextAppearance.Holo.Widget.ActionBar.Title.Inverse" 
      android:maxLines="2" /> 

</android.support.v7.widget.Toolbar> 

其他解决方案适用于ActionBar

ActionBar的默认TextView不支持换行,并且没有公开的方法将其设置为换行。所以,你可以创建一个灵活的布局,像这样的:action_bar_title_layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

<TextView 
    android:id="@+id/action_bar_title" 
    android:layout_height="match_parent" 
    android:layout_width="wrap_content" 
    android:gravity="center_vertical" 
    android:ellipsize="end" 
    android:maxLines="2"/> 

</LinearLayout> 

然后设置这个作为你的动作条的自定义布局:

ActionBar actionBar = getActionBar(); 
actionBar.setDisplayShowCustomEnabled(true); 
actionBar.setCustomView(R.layout.action_bar_title_layout); 
((TextView) findViewById(R.id.action_bar_title)).setText(
    "This is a long text title that will wrap to multiple lines, when necessary."); 
+0

我真的没有一个明确的字幕,但只是一个很长的标题。设置一个字幕会涉及到使用2个不同的字符串(1为标题,1为字幕),但我只有一个字符串,所以我不明白这有什么帮助。 –

+0

@DennisvanOpstal查看我更新的答案。 – Ironman

+0

如果我使用更新的答案,我是否会以相同的方式设置标题,还是必须以不同的方式进行设置? –