2015-08-04 3 views
1

У меня есть пользовательский шаблон ActionBar, например:Установите название обычая ActionBar

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

    <TextView 
     android:id="@+id/title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:text="TITLE" 
     android:textSize="18sp" /> 

</RelativeLayout> 

Я применить пользовательский макет в моем MainActivity так:

getActionBar().setDisplayShowCustomEnabled(true); 
getActionBar().setCustomView(R.layout.action_bar); 

Это фактически показывает центрированное Текст «TITLE», но все же старый тоже слева. Мое приложение вызывает getActionBar().setTitle(...) пару раз, и это приводит к обновлению старого заголовка, новый заголовок остается как он.

Возможно ли, например. указав мой заголовок TextView на определенный идентификатор, что getActionBar().setTitle(...) вместо этого обновляет TextView? Или мне нужно реализовать собственный метод установки заголовка?

Что мне нужно сделать, чтобы исчезнуть старый заголовок?

Это связано с использованием NavigationDrawer и восстановлением ActionBar? Мой метод восстановления, как это:

private void restoreActionBar() { 
    ActionBar actionBar = getActionBar(); 
    if (actionBar != null) { 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); 
     actionBar.setDisplayShowTitleEnabled(true); 
     actionBar.setTitle(mTitle); 
    } 
} 
+0

У меня нет Android Studio под рукой, но можно ли переопределить getActionBar(), чтобы вернуть свою собственную реализацию? – milez

+0

И создать мою собственную реализацию ActionBar, которая использует пользовательский заголовок TextView? Да, я думаю, но я сомневаюсь, что это приведет к исчезновению старого названия. – Terry

+1

Попробуйте http://stackoverflow.com/questions/20091791/change-custom-actionbar-title –

ответ

0

Это, как вы установили свой собственный ActionBar:

ActionBar actionBar = getSupportActionBar(); 
actionBar.setDisplayShowCustomEnabled(true); 
actionBar.setDisplayShowTitleEnabled(false); 
actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#2B1C27"))); 

LayoutInflater inflater = LayoutInflater.from(this); 
View v = inflater.inflate(R.layout.titleview_2, null); 

TextView actionbar_title = (TextView)v.findViewById(R.id.actionbar_title); 
actionbar_title.setTypeface(youcanset your font here also.); 

actionBar.setCustomView(v); 

и в XML-файле попробовать что-то вроде этого:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:layout_gravity="center" 
android:id="@+id/actionBar" 
android:paddingTop="7dp" 
android:orientation="horizontal" 
android:background="#9B66AB"> 

<TextView 
android:id="@+id/actionbar_title" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:layout_gravity="center_horizontal|center_vertical" 
android:gravity="center_horizontal|center_vertical" 
android:padding="8dp" 
android:text="@string/appTitle" 
android:textSize="20sp" 
android:textColor="#FFFFFF" 
android:layout_centerVertical="true" 
android:layout_toEndOf="@+id/imageView" 
android:layout_toRightOf="@+id/imageView" /> 

<ImageView 
android:layout_width="40dp" 
android:layout_height="wrap_content" 
android:id="@+id/imageView" 
android:background="@mipmap/logo" 
android:layout_alignParentTop="true" 
android:layout_alignParentLeft="true" 
android:layout_alignParentStart="true" 
android:layout_alignBottom="@+id/actionbar_title" /> 

Надеется, что это помогает. .. :)

+0

Если я устанавливаю 'actionBar.setDisplayShowTitleEnabled (false),' значок ящика для навигационного ящика исчезает. Или я делаю это неправильно? – Terry

+0

@Terry, конечно, установив его равным false, исчезнет значок. потому что я раздуваю весь вид, вставляя свой собственный значок, поэтому я установил его в false. – Umair

+0

И 'actionBar.setTitle()' по-прежнему будет устанавливать старый заголовок, а не тот, который находится в моем настраиваемом макете. – Terry

Смежные вопросы