【问题标题】:Setting Action Bar title and subtitle设置操作栏标题和副标题
【发布时间】:2012-12-27 03:46:56
【问题描述】:

我想在编译前设置我的操作栏的标题和副标题。 我有办法做到这一点:

ActionBar ab = getActionBar();
ab.setTitle("My Title");
ab.setSubtitle("sub-title");

但我不想在运行时这样做。是否有任何 xml 文件或我可以指定这些标题的位置?

我正在努力实现这一目标:

编辑:

我希望它在 xml 中的原因是我希望我的应用程序在 API 级别 8 中得到支持。方法 getActionBar() 至少在级别 11 上得到支持。

【问题讨论】:

  • 您的问题不清楚,因为Is there any xml file or any location where I can specify these titles? 是的,您可以在strings.xml 中指定标题
  • 您可以为您的操作栏指定自定义布局。
  • @AdilMalik :参见this 示例
  • @AdilMalik : 然后添加support-library 以在较低版本中支持ActionBar
  • @Malachiasz 这应该可以工作:abActionBar.setSubtitle(null);

标签: android android-layout android-widget


【解决方案1】:

您可以为这两个版本编写代码:

/**
 * Sets the Action Bar for new Android versions.
 */
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private void actionBarSetup() {
  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
    ActionBar ab = getActionBar();
    ab.setTitle("My Title");
    ab.setSubtitle("sub-title"); 
  }
}

然后在onCreate() 中调用actionBarSetup()if 仅在新的 Android 版本上运行代码,@TargetApi 允许编译代码。因此,它对新旧 API 版本都是安全的。

或者,您也可以使用ActionBarSherlock查看编辑),这样您就可以在所有版本上使用 ActionBar。您将不得不进行一些更改,例如使您的活动扩展 SherlockActivity 并调用 getSupportActionBar(),但是,这是一个非常好的全局解决方案。

编辑

请注意,最初编写此答案时,ActionBarSherlock 已被弃用,它是首选的兼容性解决方案。

如今,Google's appcompat-v7 library 提供相同的功能,但由 Google 支持(并积极更新)。想要实现ActionBar 的活动必须:

  • 扩展AppCompatActivity
  • 使用Theme.AppCompat 导数

要使用此库获取 ActionBar 实例,使用恰当命名的 getSupportActionBar() 方法。

【讨论】:

  • 它就像一个魅力。不幸的是,我不能使用 ActionBarSherlock。我很想用那个。但目前我遇到了一个奇怪的错误:Unable to resolve target 'android-14'。现在,我想使用您提供的代码 sn-p。谢谢
  • 迟到了,但“无法解析目标”意味着您没有安装该 API SDK。那是 4.1 还是什么?
  • @Mgamerz ActionBar 是在HoneyComb 中引入的,但这取决于 library 所针对的 Android 版本。 Android 14 是ICS
  • 我明白了。我一直收到这些错误(Google Play Services),但我认为它抛出相同的消息导致它找不到最小 SDK,而不是这个目标。
  • 扩展 AppCompatActivity
【解决方案2】:

actionbar 的标题可以在 AndroidManifest 中,这里:

<activity 
    . . .
          android:label="string resource" 
    . . .
</activity>

机器人:标签 活动的用户可读标签。标签是 当必须向用户展示活动时显示在屏幕上。 它通常与活动图标一起显示。如果这个属性 未设置,则使用为整个应用程序设置的标签 而是(参见元素的标签属性)。这 活动的标签——无论是在此处设置还是由元素设置—— 也是所有活动的意图过滤器的默认标签(请参阅 元素的标签属性)。标签应该是 设置为对字符串资源的引用,以便可以对其进行本地化 就像用户界面中的其他字符串一样。不过,为了方便 在开发应用程序时,也可以将其设置为原始 字符串。

【讨论】:

  • 我想这是最接近我想要的。但是我不能以这种方式指定子标签的子标题。如果我能以某种方式指定副标题,我的问题将得到解决。
【解决方案3】:

试试这个:

android.support.v7.app.ActionBar ab = getSupportActionBar();
ab.setTitle("This is Title");
ab.setSubtitle("This is Subtitle");

【讨论】:

    【解决方案4】:

    还有另一个没有人评论的选项,来自支持库 V7 是由 Google ActionBarSupport 实现的,它与 Android 2.2 到最后的 ActionBar 兼容。
    如果您更改您的 ActionBar,您可以在所有 Android 版本上更改 getSupportActionBar().setTitle("")

    【讨论】:

      【解决方案5】:

      不!您必须在运行时执行此操作。

      如果您想让您的应用向后兼容,只需检查设备 API 级别即可。如果高于11,那么你可以摆弄ActionBar并设置字幕。

      if(Integer.valueOf(android.os.Build.VERSION.SDK) >= 11){
          //set actionbar title
      }
      

      【讨论】:

      • 是的,你可以.... getResources().getString(R.string.title) 和 getResources().getString(R.string.subtitle)
      • 我希望您意识到您仍将在运行时设置 ActionBar 标题。他在问你是否可以完全用 XML 来做,所以你一定误解了这个问题。
      【解决方案6】:
          <activity android:name=".yourActivity" android:label="@string/yourText" />
      

      将此代码放入您的 android 清单文件中,它应该将操作栏的标题设置为您想要的任何内容!

      【讨论】:

      • 你拯救了我的一天。这是最好的解决方案
      【解决方案7】:

      试试这个

      只需转到您的清单文件即可。 并且您已经在清单文件中定义了每个活动的标签。

      <activity
              android:name=".Search_Video"
              android:label="@string/app_name"
              android:screenOrientation="portrait">
          </activity>
      

      这里改

      android:label="@string/your_title"

      【讨论】:

        【解决方案8】:
        supportActionBar?.title = "Hola tio"
        supportActionBar?.subtitle = "Vamos colega!"
        

        【讨论】:

          【解决方案9】:

          试试这个:

          在 strings.xml 中添加您的标题和副标题...

          ActionBar ab = getActionBar();
          ab.setTitle(getResources().getString(R.string.myTitle));
          ab.setSubtitle(getResources().getString(R.string.mySubTitle));
          

          【讨论】:

          • 不喜欢... OP 要求一个 xml 文件
          • 我希望它在 xml 中的原因是我希望我的应用程序在 API 级别 8 中得到支持。方法 getActionBar() 至少在级别 11 上得到支持。
          【解决方案10】:

          这是 Kotlin 中微不足道的单行代码

          supportActionBar?.title = getString(R.string.coolTitle)

          【讨论】:

            【解决方案11】:

            对于活动,您可以使用这种方法在清单中指定副标题以及标题。

            清单:

            <activity
                android:name=".MyActivity"
                android:label="@string/my_title"
                android:description="@string/my_subtitle">
            </activity>
            

            活动:

            try {
                ActivityInfo activityInfo = getPackageManager().getActivityInfo(getComponentName(), PackageManager.GET_META_DATA);
                //String title = activityInfo.loadLabel(getPackageManager()).toString();
                int descriptionResId = activityInfo.descriptionRes;
                if (descriptionResId != 0) {
                    toolbar.setSubtitle(Utilities.fromHtml(getString(descriptionResId)));
                }
            }
            catch(Exception e) {
                Log.e(LOG_TAG, "Could not get description/subtitle from manifest", e);
            }
            

            这样你只需要指定一次标题字符串,你就可以在它旁边指定副标题。

            【讨论】:

              【解决方案12】:

              您可以使用AndroidManifest.xml 在操作栏中设置标题。给activity添加标签

              <activity
                          android:name=".YourActivity"
                          android:label="Your Title" />
              

              【讨论】:

                猜你喜欢
                • 2016-12-17
                • 1970-01-01
                • 2019-08-17
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-02-18
                • 2014-12-08
                • 1970-01-01
                相关资源
                最近更新 更多