当前位置: 首页 > 知识库问答 >
问题:

以编程方式更改actionbar homeAsUpIndicator

邢宏浚
2023-03-14

我使用下面的hack以编程方式更改homeAsupIndicator。

int upId = Resources.getSystem().getIdentifier("up", "id", "android");
if (upId > 0) {
    ImageView up = (ImageView) findViewById(upId);
up.setImageResource(R.drawable.ic_action_bar_menu);
up.setPadding(0, 0, 20, 0);
}

但这在大多数新手机(HTC One、Galaxy S3等)上都不起作用。是否有一种方法可以跨设备统一更改。我只需要在主屏幕上更改它。其他屏幕将具有默认屏幕。因此无法使用样式。xml

共有3个答案

董阳平
2023-03-14
匿名用户

API 18有了新的方法ActionBar。setHomeAsUpIndicator()-很遗憾,目前支持库中不支持这些

http://developer.android.com/reference/android/app/ActionBar.html#setHomeAsUpIndicator(android.graphics.drawable.绘图)

编辑:这些现在支持库http://developer.android.com/reference/android/support/v7/app/ActionBar.html#setHomeAsUpIndicator(android.graphics.drawable.Drawable)

弓俊晖
2023-03-14

问题是动态更改上移指示器,尽管这个答案是可以接受的,而且是关于主题和风格的。根据Adneal的回答,我找到了一种通过编程实现的方法,这给了我线索,特别是正确的方法。我使用了下面的代码片段,它在这里提到的带有API的(经过测试的)设备上运行良好。

对于较低的API,我使用在较高的API上不可用的R.id.up。这就是为什么,我通过一个小的解决方法来检索这个id,这个方法是获取主页按钮(android.R.id.home)的父级及其第一个子级(android.R.id.up):

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
    // get the parent view of home (app icon) imageview
    ViewGroup home = (ViewGroup) findViewById(android.R.id.home).getParent();
    // get the first child (up imageview)
    ( (ImageView) home.getChildAt(0) )
        // change the icon according to your needs
        .setImageResource(R.drawable.custom_icon_up));
} else {
    // get the up imageview directly with R.id.up
    ( (ImageView) findViewById(R.id.up) )
        .setImageResource(R.drawable.custom_icon_up));
} 

注意:如果不使用SDK条件,将得到一些NullPointerException。

景星光
2023-03-14

这就是我为改变这种行为所做的。我继承了基本主题并创建了一个新主题,将其用作特定活动的主题。

<style name="CustomActivityTheme" parent="AppTheme">
    <item name="android:homeAsUpIndicator">@drawable/custom_home_as_up_icon</item>
</style>

在android清单中,我制作了如上所述的活动主题。

<activity
        android:name="com.example.CustomActivity"
        android:theme="@style/CustomActivityTheme" >
</activity>

效果很好。将在我检查所有设备时再次更新。感谢@faylon为我们指出了正确的方向

 类似资料:
  • 我已经读过一些关于颜色的线程,但所有这些线程都必须通过style.xml进行设置。 现在我用这个来确定颜色。 是否可以不使用XML,例如使用代码来更改SwitchCompat/Checkbox的颜色?

  • 问题内容: 我发现了只在Android N设备上才能复制的真正奇怪的错误。 在浏览我的应用程序时,可以更改语言。这是更改它的代码。 该代码在我的巡回活动(带电话)中效果很好,但是在接下来的所有活动中,所有String资源都是错误的。屏幕旋转将其修复。我该怎么办?我应该以其他方式更改Android N的语言环境还是仅仅是系统错误? PS这是我发现的。第一次启动MainActivity时(在​​我的旅

  • 问题内容: 我有一个带有标题的导航栏。当我双击文本以将其重命名时,它实际上说这是一个导航项,所以可能就是这样。 我正在尝试使用代码来更改文本,例如: 那显然不是我的代码,只是显示了它是如何工作的。 因此,每当我按下按钮时,我都希望标题更改。 问题答案: 您可以通过更改显示的视图控制器的标题来更改标题: 通常,这是在视图控制器上加载视图时完成的: 但是,这仅在将视图控制器嵌入UINavigation

  • 以编程方式更改我的附加程序的日志级别,或者受到其他来源的影响。 亲爱的社区。 Log4J2版本为:2.12。0 我的应用程序正在使用log4j2。xml,日志级别设置为INFO。我的应用程序也在读取另一个配置文件,我想在其中为我的用户设置日志级别,例如DEBUG。 当应用程序初始化时(从log4j2.xml),我想将all的级别更改为DEBUG from second source作为示例。所以我

  • 这里有个简单的问题。我有一个UIButton,currencySelector,我想通过编程更改文本。以下是我所拥有的: Xcode给了我一个错误“预期声明”。我做错了什么?我该如何更改按钮的文本?

  • 问题内容: 如何更改应用程序标签以更改从android中的Java代码显示的应用程序名称?我指的是: 在Android清单中 有什么方法可以更新 strings.xml 文件中的值? 问题答案: 目前尚不可能。它是AndroidManifest.xml文件中的固定字符串,无法在运行时更改。