16

我正在寻找一种方法来设置 ActionBar 的“向上”图标的样式,当您将其配置为从 Activity 显示时显示该图标:

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

我一直在环顾四周,找到了一种在主页图标和标题之间添加填充的方法(ActionBar 的主页图标和标题之间的填充),但不是在主页图标和向上指示器图标之间添加填充的方法。

我深入ActionBarView.HomeView研究了 android 源代码,它似乎通过这个调用夸大了向上指标:

mUpView = findViewById(com.android.internal.R.id.up);

问题是com.android.internal.R.id.up内部的,所以我无法访问它,所以上面用于填充主页图标的链接解决方案将不起作用。理想情况下,我想覆盖ActionBarView.HomeView,但它在ActionBarView.

有谁知道 ActionBarSherlock 是否提供了覆盖此行为的好方法?我已经考虑过提供一个自定义的主页布局,但我发现的线程表明,偏离标准的 android 类并不是一个好主意。

有任何想法吗?

4

8 回答 8

22

该解决方案将起作用

ImageView view = (ImageView)findViewById(android.R.id.home);
view.setPadding(10, 0, 0, 0);

但是,您将被迫将此代码放在父 Activity 中,或者在您想要将填充添加到主页按钮的每个 Activity 中。

我建议这种方法:

  1. 使用以下代码创建一个可绘制图层列表:

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
        <item>
            <bitmap
                android:antialias="true"
                android:gravity="center"
                android:src="@drawable/btn_back_actionbar_normal" />
        </item>
        <item>
            <shape android:shape="rectangle" >
                <size android:width="24dp" />
                <solid android:color="@android:color/transparent" />
            </shape>
        </item>
    </layer-list>
    
  2. 在您的样式中添加:

对于值 11:

<item name="android:homeAsUpIndicator">@drawable/actionbar_back_selector</item>

对于值:

<item name="homeAsUpIndicator">@drawable/actionbar_back_selector</item>

这样,您将在返回按钮和兼容操作栏中的主页按钮之间添加填充,并且您只需添加一次此代码,并且将在整个应用程序中可用!

于 2013-10-25T21:54:11.493 回答
9

从 API 15 开始,这些元素的位置被硬编码到布局资源中。您唯一的选择是使用自定义导航布局来创建您自己的并隐藏内置的主页导航。

于 2012-06-10T20:18:23.573 回答
7

其实这个答案是正确的。只需设置主页按钮的左侧填充,它将在主页按钮和向上箭头之间添加填充

    ImageView view = (ImageView)findViewById(android.R.id.home);
    view.setPadding(10, 0, 0, 0);
于 2012-10-04T20:23:02.050 回答
2

如果您将填充添加到图形(例如在 Photoshop 中)并将此图形设置在具有属性的主题上,也许它会起作用

<item name="android:homeAsUpIndicator">@drawable/up_with_padding</item>
于 2012-06-10T20:23:31.080 回答
1

在我的手机里,它的工作。解决方案如下:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
    <bitmap
        android:src="@drawable/frame_menu"
        android:antialias="true"
        android:gravity="center" 
        />
</item>
<item >
    <shape android:shape="rectangle">
        <size android:width="24dp"/>
        <solid android:color="@android:color/transparent"></solid>
        <padding
            android:right="10dp" 
            />
    </shape>

</item>

最重要的一句话是“android:right=10dp”

于 2015-03-12T04:51:22.037 回答
0

我只想添加到@blacksh33p 回答如何在使用 ActionBarSherlock 支持旧手机时获取徽标 ImageView。

ImageView view = (ImageView)findViewById(android.R.id.home);
if (view == null)
    view = (ImageView)findViewById(R.id.abs__home); // not sure that the name is exactly this - I tested it while developing an app on monodroid
于 2014-01-14T10:35:59.967 回答
0

只需添加可绘制布局调用“actionbar_back_selector”并将此代码

并在Java文件中(你需要相应的java文件的主页按钮)把这段代码ActionBar actionBar = getActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setHomeButtonEnabled(true); actionBar.setHomeAsUpIndicator(R.drawable.actionbar_back_selector);

于 2015-08-28T04:49:55.160 回答
0

您可以在您的主题中为“HomeAsUpIndicator”定义一个样式,如下所示:

<item name="toolbarNavigationButtonStyle">@style/MyToolbarNavigationButtonStyle</item>

其中,toobarNavigationButtonStyle用于定义该指标的所有样式,您可以更改它的宽度和 paddingEnd 以扩大它与标题文本之间的差距。

于 2015-12-11T02:11:45.177 回答