填充操作栏"向上"指示图像

dgk*_*ipp 15 android actionbarsherlock

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

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Run Code Online (Sandbox Code Playgroud)

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

ActionBarView.HomeView在android源码中挖了一下,它似乎通过这个调用来膨胀向上指示器:

mUpView = findViewById(com.android.internal.R.id.up);
Run Code Online (Sandbox Code Playgroud)

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

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

有任何想法吗?

Dav*_*d_E 22

这个解决方案可行

ImageView view = (ImageView)findViewById(android.R.id.home);
view.setPadding(10, 0, 0, 0);
Run Code Online (Sandbox Code Playgroud)

但是,您将被迫将此代码放在父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>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在你的风格中添加:

对于值-11:

<item name="android:homeAsUpIndicator">@drawable/actionbar_back_selector</item>
Run Code Online (Sandbox Code Playgroud)

对于价值观:

<item name="homeAsUpIndicator">@drawable/actionbar_back_selector</item>
Run Code Online (Sandbox Code Playgroud)

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

  • `findViewById(android.R.id.home)`为我返回null (11认同)

Jak*_*ton 9

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


sta*_*ej2 7

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

    ImageView view = (ImageView)findViewById(android.R.id.home);
    view.setPadding(10, 0, 0, 0);
Run Code Online (Sandbox Code Playgroud)