【问题标题】:The title/action bar ID in android?android中的标题/操作栏ID?
【发布时间】:2012-10-14 00:53:06
【问题描述】:

我想试试这个funny title bar coloring,但它对我不起作用

getWindow().findViewById(android.R.id.title);

返回空值。所以我用 Hierarchy Viewer 查看了它,发现视图被称为id/action_bar。但是没有R.id.action_bar(自动完成不提供它,也没有像R.java这样的东西)。

所以现在我很困惑:

  • android.R.id.title 现在有点过时了吗(我在模拟器中使用的是版本 16)?
  • id/action_bar 来自哪里?
  • 推荐和简单的做法是什么?兼容性?

我应该得到 ActionBarSherlock 吗?我本来只是想改变标题栏的颜色...而不是胡闹。

【问题讨论】:

    标签: android identifier titlebar


    【解决方案1】:

    如果您正在寻找与 API 级别 14/Android 4.0 之前的 Android 版本的兼容性,我建议您使用 ActionBarSherlock。

    更改 ActionBar 的背景很简单,而且最容易通过样式来完成。请参阅http://android-developers.blogspot.com/2011/04/customizing-action-bar.html的“背景”部分

    您也可以通过代码更改它。把它放在你的onCreate()

    GradientDrawable gradientDrawable = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, new int[] {Color.RED, Color.GREEN});
    getActionBar().setBackgroundDrawable(gradientDrawable);
    

    下面是这段代码的截图:

    【讨论】:

    • 正如 louielouie 所说,您可以在 XML 或 Java 中执行此操作,但 XML 是此类样式的首选,因为 Android 在您的活动仍在加载时应用您的样式,因此自定义样式不会延迟.
    【解决方案2】:

    使用下面的代码获取ActionBar的id:

    val actionBarId = resources.getIdentifier("action_bar", "id", packageName)
    

    然后从actionbar的children中找到title(正常情况下):

    val actionbar = findViewById<ViewGroup>(actionBarId)
    for (view in actionbar.children) {
        if (view is TextView) {
            // this is the titleView
        }
    }
    

    【讨论】: