2014-02-13 5 views
4

я настроить внешний вид заголовка моего приложения на панели действий со следующим кодомПользовательского ActionBar в Android 4,3

<style name="myTheme.ActionBar.Text" parent="@android:style/TextAppearance"> 
    <item name="android:textColor">#ff2d2d2d</item> 
    <item name="android:textSize">26sp</item> 
    <item name="android:fontFamily">sans-serif-condensed</item> 
    <item name="android:textAllCaps">true</item> 
    <item name="android:textStyle">bold</item> 
</style> 

Во всяком случае, все работало достаточно хорошо в большинстве устройств я испытал (3 чтобы быть точным), но для 1 - устройство под управлением Android 4.3 (Sony Xperia Z), в котором стиль не применялся. Я позже тестировал его на эмуляторе с 4.3 и имел тот же результат.

enter image description here

Есть ли способ, что я могу это исправить?

Вот полный стиль для приложения

<?xml version="1.0" encoding="utf-8"?> 

<resources> 

    <!-- Base application theme. --> 
    <style name="AppTheme" parent="android:Theme.Holo.Light"> 

     <item name="android:actionBarStyle">@style/myTheme.ActionBar</item> 
     <!-- Customize your theme here. --> 
     <item name="android:textViewStyle">@style/RobotoTextViewStyle</item> 
     <item name="android:buttonStyle">@style/RobotoButtonStyle</item> 
     <item name="android:editTextBackground">@drawable/apptheme_edit_text_holo_dark</item> 

     <item name="android:actionBarItemBackground">@drawable/nav_list_selector</item> 

    </style> 


    <style name="RobotoTextViewStyle" parent="android:Widget.TextView"> 
     <item name="android:fontFamily">sans-serif-light</item> 
    </style> 

    <style name="RobotoButtonStyle" parent="android:Widget.Holo.Button"> 
     <item name="android:fontFamily">sans-serif-light</item> 
    </style> 

    <style name="myTheme.ActionBar" parent="@android:style/Widget.Holo.Light.ActionBar"> 
     <item name="android:titleTextStyle">@style/myTheme.ActionBar.Text</item> 
     <item name="android:background">@drawable/action_bar_bg</item> 
     <item name="android:searchButtonText">SEARCH</item> 
     <item name="android:editTextBackground">@drawable/apptheme_edit_text_holo_dark</item> 

    </style> 

    <style name="myTheme.ActionBar.Text" parent="@android:style/TextAppearance"> 
     <item name="android:textColor">#ff2d2d2d</item> 
     <item name="android:textSize">26sp</item> 
     <item name="android:fontFamily">sans-serif-condensed</item> 
     <item name="android:textAllCaps">true</item> 
     <item name="android:textStyle">bold</item> 
    </style> 

</resources> 
+0

В чем проблема? или мы должны угадать, в какую проблему вы столкнулись? скриншот или что-то подобное было бы полезно. – Ahmad

+2

@ Амад стиль не применялся. не было достаточно очевидным? – Olayinka

+0

Нет, это было не очевидно. Может быть, только определенная часть была или не применялась. Однако. Какие версии Android, на которых работают устройства, на которых он работает? – Ahmad

ответ

4

Для меня это работает как шарм. Давайте создадим пользовательский вид на панель действий

Реза/макет/action_title_view.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@android:color/transparent" > 

    <TextView 
     android:id="@+id/title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerVertical="true" 
     android:layout_marginLeft="10dp" 
     android:ellipsize="end" 
     android:maxLines="1" 
     android:text="" 
     android:textAllCaps="true" 
     android:textSize="16sp" 
     android:textColor="@color/actionbar_text" /> 

</RelativeLayout> 

Набора пользовательской панели действий в вашей деятельности OnCreate

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // set action bar custom view 
    getActionBar().setDisplayShowCustomEnabled(true); 
    getActionBar().setDisplayShowTitleEnabled(false); 

    LayoutInflater inflator = (LayoutInflater) this 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    mCustomActionView = inflator.inflate(R.layout.action_title_view, null); 

    // assign the view to the actionbar 
    getActionBar().setCustomView(mCustomActionView); 

    ... 
} 

Теперь переопределить метод SETTITLE вашей деятельности

@Override 
public void setTitle(CharSequence title) { 
    mTitle = title; 
    ((TextView) mCustomActionView.findViewById(R.id.title)).setText(mTitle); 
    getActionBar().setTitle(""); 
} 

Используйте метод setTitle, чтобы установить текст пользовательского действия. Надеюсь это поможет.

+0

, это порождает ошибку для меня 'no resources filel, который имеет имя:' – Olayinka

+0

@Olayinka - вы правы. Я обновил свои анны. повторите попытку. – luckyNinja

+0

Разве это не просто поместить ту же тему в папку поддержки-v11? или что-то мне не хватает? помогите объяснить, почему это может сработать? – Olayinka

1

Первое, что пришло мне в голову, когда я прочитал это сообщение, это то, что вы можете использовать разные ресурсы для каждой версии API, используя папки -v.

Небольшой пример: В папке регулярных значений я установить голубой цвет текста:

<style name="TextMedium" parent="@android:style/TextAppearance.Medium"> 
<item name="android:textColor">@color/Blue</item> 

В значениях-v11 у меня есть стиль, чтобы установить в белый цвет текста:

<style name="TextMedium" parent="@android:style/TextAppearance.Medium"> 
<item name="android:textColor">@color/White</item> 

в значениях-V14 у меня есть стиль, чтобы установить в красный цвет текста:

<style name="TextMedium" parent="@android:style/TextAppearance.Medium"> 
<item name="android:textColor">@color/Red</item> 

Нет w, (вы могли бы догадаться), в зависимости от уровня api вашего устройства, этот стиль используется. Поэтому, если вы запустите этот код на уровне API 13, цвет текста будет белым. Для каждого уровня api ниже 11 используется синий.

Теперь есть еще одна вещь, если стиль/ресурс отсутствует в папке значений-v используемого вами SDK, там будет ссылаться на вторую лучшую альтернативу (так что если значения-v16 не имеют ссылки для цветов текста используются значения-v14).

В вашем случае должны быть значения-v17 (Jelly Bean и выше), которые содержат стиль, на который вы ссылаетесь, если устройство уровня нижнего уровня api пытается получить доступ к стилю, оно не будет присутствовать в папке стиля , они не будут использовать ресурс с более высокого уровня Api.

Я не говорю, что это причина вашей проблемы, это просто предположение, поскольку вы не даете никакой информации об управлении версиями стиля.Кроме того, поскольку это Jelly Bean 4.3 и выше, которые работают, вы можете ссылаться на функции, которые были добавлены на уровне Api 17

+0

Дело в том, что я вообще не использую стиль для версии. У меня есть одна папка значений, которая является 'values'. Мой минимальный sdk равен 16. – Olayinka

+0

В этом случае мой ответ не имеет значения для вас. Я просто оставлю свой вопрос здесь для других пользователей, которые сталкиваются с этим вопросом. – Mdlc

Смежные вопросы