填充操作栏“向上”指示图像

时间:2012-05-22 17:24:45

标签: android actionbarsherlock

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

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

我一直在环顾四周,找到了在主页图标和标题(Padding between ActionBar's home icon and title)之间添加填充的方法,但没有办法在主页图标和向上指示符图标之间添加填充。

我在android源代码中挖掘ActionBarView.HomeView,它似乎通过此调用使指示符膨胀:

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

问题是com.android.internal.R.id.up是内部的,所以我无法访问它,因此填充主页图标的上述链接解决方案将无效。理想情况下,我想覆盖ActionBarView.HomeView,但它在ActionBarView内是私有的。

有人知道ActionBarSherlock是否提供了一种覆盖此行为的好方法?我已经研究过提供一个自定义的家庭布局,但我发现的线程表明,与标准的android类不同是不太好的。

有什么想法吗?

8 个答案:

答案 0 :(得分:22)

此解决方案将起作用

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

但是,您将被迫将此代码放在父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. 在你的风格中添加:

  3. 对于值-11:

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

    对于值:

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

    这样你就可以在后退按钮和compat操作栏中的Home按钮之间添加一个填充,你只需要添加一次这个代码,并且可以在整个应用程序中使用!

答案 1 :(得分:9)

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

答案 2 :(得分:7)

实际上this answer是正确的。只需设置主页按钮的左侧填充,它将在主页按钮和向上箭头之间添加填充

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

答案 3 :(得分:2)

如果您将填充添加到图形(例如,在Photoshop中)并使用属性

在主题上设置此图形,也许它可以工作
<item name="android:homeAsUpIndicator">@drawable/up_with_padding</item>

答案 4 :(得分: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

答案 5 :(得分:0)

在我的手机中,IT&#39。工作。 解决方案如下:

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

最重要的句子是&#34; android:right = 10dp&#34;

答案 6 :(得分:0)

只需添加可绘制的布局调用“actionbar_back_selector” 并把这个代码                       

在Java文件中(你需要哪个布局主页按钮对应的java文件)把这个代码          ActionBar actionBar = getActionBar();         actionBar.setDisplayHomeAsUpEnabled(真);         actionBar.setHomeButtonEnabled(真);         actionBar.setHomeAsUpIndicator(R.drawable.actionbar_back_selector);

答案 7 :(得分:0)

你可以为&#34; HomeAsUpIndicator&#34;定义一种风格。在你这样的主题:

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

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