Заполнение индикатора "вверх" панели действий

Я ищу способ стирать значок "вверх" 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.

Любые идеи?

Ответы

Ответ 1

Как и в случае API 15, позиционирование этих элементов жестко закодировано в ресурсы компоновки. Единственная альтернатива, которую у вас есть, - использовать пользовательский макет навигации для создания собственной и скрытия встроенной домашней навигации.

Ответ 2

Это решение будет работать

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

НО, вы будете вынуждены поместить этот код в родительское действие или в каждое действие, которое вы хотите добавить отступ к домашней кнопке.

Я предлагаю этот подход:

  • Создайте выпадающий список слоев со следующим кодом:

    <?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>
    
  • В ваших стилях добавьте:

Для значений -11:

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

Для значений:

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

Таким образом вы будете добавлять отступы между кнопкой "Назад" и кнопкой "Домой" в панели действий для совместной работы, и вам придется добавлять этот код только один раз и будут доступны в целом приложении!

Ответ 3

Фактически этот ответ правильный. Просто установите левую проставку кнопки "домой", и она добавит отступы между кнопкой "домой" и стрелкой вверх

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

Ответ 4

Может быть, он работает, если вы добавите дополнение к графике (например, в Photoshop) и установите этот рисунок в теме с атрибутом

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

Ответ 5

Я просто добавлю к @blacksh33p ответ, как получить логотип ImageView при использовании ActionBarSherlock для поддержки старых телефонов.

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

Ответ 6

В моем мобильном телефоне ИТ-работа. Решение находится ниже:

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

Ответ 7

Просто добавьте обратный вызов макета "actionbar_back_selector" И поставьте этот код                 

И в файле Java (в каком макете вам нужна кнопка вверх, соответствующая java файл). Поместите этот код        ActionBar actionBar = getActionBar();       actionBar.setDisplayHomeAsUpEnabled(истина);       actionBar.setHomeButtonEnabled(истина);       actionBar.setHomeAsUpIndicator(R.drawable.actionbar_back_selector);

Ответ 8

вы можете определить стиль для "HomeAsUpIndicator" в вашей теме следующим образом:

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

в котором toobarNavigationButtonStyle используется для определения всех стилей для этого индикатора, вы можете изменить его ширину и paddingEnd, чтобы увеличить разрыв между ним и текстом Title.