2012-05-22 5 views
15

Я нахожусь в поисках пути, чтобы стиль ActionBar в «вверх» значок, который отображается, когда вы настроили ее для отображения из вашей деятельности:пропитка ActionBar «вверх» индикатор изображения

getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

Я огляделся и нашел способ добавить отступы между домашним значком и заголовком (Padding between ActionBar's home icon and title), но не способ добавить отступы между значком дома и значком индикатора вверх.

Я порылся в ActionBarView.HomeView в андроид источника и, кажется, раздуть до индикатора с помощью этого вызова:

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

Проблемы является com.android.internal.R.id.up является внутренним, так что я не могу получить доступ к нему, так что выше связанному раствор для заполнения значка дома не будет работать. В идеале я хотел бы переопределить ActionBarView.HomeView, но он закрыт в пределах ActionBarView.

Кто-нибудь знает, поддерживает ли ActionBarSherlock хороший способ отменить это поведение? Я рассмотрел создание пользовательского макета дома, но найденные вами потоки показали, что было бы неплохо расходиться со стандартными классами Android.

Любые идеи?

+0

Fom мне работать, что:
http://stackoverflow.com/questions/26809133/how-to-change-toolbar-navigation-icon-and-options-menu-margin – Mnio

ответ

9

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

+0

Это заключение я пришел к а , Я предполагаю, что Google пытается обеспечить соблюдение определенных стандартов проектирования. В конце концов я вернулся к стандартным голосным лампочкам дома как индикатор, и он выглядит довольно прилично по сравнению с настраиваемым индикатором, который я настроил. – dgknipp

+0

Теперь это изменилось с введением панели инструментов в API 21 –

2

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

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

Я считаю, что я попробовал это, мне нужно будет снова проверить, но я уверен, что Google устраняет любые дополнения, которые вы можете добавить, чтобы поддерживать пользовательский интерфейс. – dgknipp

7

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

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

хорошо подходит для api 11 и выше – 7wonders

+0

Я считаю, что он работает с ActionBarSherlock для более низких версий, а также – starkej2

+0

@ blacksh33p Нет, это не так, но это можно легко устранить. –

22

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

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

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

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

  1. Создать Drawable слой-лист со следующим кодом:

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

Таким образом, вы будете добавлять отступы между задней кнопкой, а кнопка Home в Compat ActionBar, и вы будете иметь, чтобы добавить этот код только один раз, и будут доступны во всем приложении!

+0

Прохладный подход! Я просто сделал это в суперклассе активности ... – starkej2

+11

'findViewById (android.R.id.home)' возвращает null для меня –

+0

Спасибо! Я использую drawable.xml, он работает хорошо! –

0

Я бы просто добавил к @ 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 
0

В моем мобильном телефоне, это работа. Решение находится в поле ниже:

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

Самым важным предложением является "андроид: право = 10dp"

0

Просто добавьте Drawable Layout Call "actionbar_back_selector" И поместить этот код

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

+0

<слоя-лист XMLNS: андроид = "http://schemas.android.com/apk/res/android"> <элемент андроид: рисую = "@ вытяжка/left22222" андроид: право = "10dp" /> Этот код действия bar_back_selector layout –

0

вы можете определить стиль для «HomeAsUpIndicator» в вас тему, как это:

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

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