【问题标题】:Set the title of a custom ActionBar设置自定义 ActionBar 的标题
【发布时间】:2015-08-04 12:42:21
【问题描述】:

我有一个自定义的 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 一个特定的 ID,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);
    }
}

【问题讨论】:

  • 我手头没有 Android Studio,但是否可以重写 getActionBar() 以返回您自己的实现?
  • 并创建我自己的使用自定义标题 TextView 的 ActionBar 实现?是的,我猜,但我怀疑这会使旧标题消失。
  • @Terry 好吧,我只是在猜测 :) 但似乎 getActionBar() 总是返回默认栏,并且覆盖它会使其失去对默认栏的任何引用,使其消失。
  • @milez 您可以设计自己的自定义视图来覆盖 actionBar。然后,该自定义视图将用作 actionBar。

标签: android android-actionbar navigation-drawer


【解决方案1】:

这是您设置自定义操作栏的方式:

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" />

希望对您有所帮助... :)

【讨论】:

  • 如果我设置actionBar.setDisplayShowTitleEnabled(false);,导航抽屉的图标就会消失。还是我做错了?
  • @Terry 当然将其设置为 false 会消失图标。因为我正在插入我自己的图标来膨胀整个视图,这就是我将其设置为 false 的原因。
  • actionBar.setTitle() 仍将设置旧标题,而不是我自定义布局中的那个。
  • @Terry 是的,这就是为什么我将自定义视图设置为 actionBar 而不是 setTitle()。
  • 您需要设计自己的自定义视图,才能完全消除真实actionBar的属性。自定义视图将覆盖它并作为常规操作栏工作。
猜你喜欢
  • 2013-03-11
  • 2012-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多