2013-08-09 2 views
3

Я разрабатываю приложение, которое должно быть совместимо с Android 2.2+, используя ActionBarSherlock для настройки ActionBar на устройствах до ICS.ActionBar переполнен на устройствах до ICS

У меня возникла проблема только с устройствами 2.2 и 2.3, которые делают содержимое переполнения ActionBar, даже если содержимое соответствует экрану устройства. Что-то вроде этого:

enter image description here

Я уже опробовал (на эмуляторе) размер экрана устройства (MDPI на 320x480) стереосистеме и обновите Android 4.0 и она отлично работает, поэтому я считаю, что проблема-то связана с ActionBarSherlock.

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

Вот мой styles.xml файл:

<style name="AppBaseTheme" parent="Theme.Sherlock.Light.DarkActionBar"> 
</style> 

<style name="AppTheme" parent="AppBaseTheme"> 
    <item name="actionBarStyle">@style/AppBaseTheme.ActionBarStyle</item> 
    <item name="actionBarTabStyle">@style/AppBaseTheme.ActionBarTabStyle</item> 
    <item name="actionBarTabBarStyle">@style/AppBaseTheme.ActionBarTabBarStyle</item> 
</style> 

<style name="AppBaseTheme.ActionBarStyle" parent="Widget.Sherlock.Light.ActionBar.Solid.Inverse"> 
    <item name="background">@drawable/action_bar_background</item> 
    <item name="android:background">@drawable/action_bar_background</item> 
</style> 

<style name="AppBaseTheme.ActionBarTabStyle" parent="Widget.Sherlock.Light.ActionBar.TabView.Inverse"> 
    <item name="background">@android:color/transparent</item> 
    <item name="android:background">@android:color/transparent</item> 

    <item name="android:paddingLeft">0dip</item> 
    <item name="android:paddingRight">0dip</item> 
</style> 

<style name="AppBaseTheme.ActionBarTabBarStyle" parent="Widget.Sherlock.Light.ActionBar.TabBar.Inverse"> 
    <item name="background">@drawable/action_bar_tab_divider</item> 
    <item name="android:background">@drawable/action_bar_tab_divider</item> 

    <item name="divider">@drawable/sp</item> 
    <item name="android:divider">@drawable/sp</item> 
</style> 

Файл @ вытяжке/action_bar_background является 320px в ширину и как @ вытяжке/action_bar_tab_divider и @ вытяжке/зр являются 1px в ширину.

А вот код для создания вкладок на моей основной деятельности:

ActionBar actionBar = super.getSupportActionBar(); 
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

this.createTab(actionBar, R.drawable.action_bar_tab_home_off); 
this.createTab(actionBar, R.drawable.action_bar_tab_news_off); 
this.createTab(actionBar, R.drawable.action_bar_tab_videos_off); 
this.createTab(actionBar, R.drawable.action_bar_tab_guide_off); 


private void createTab(ActionBar actionBar, int resource) { 
    Tab t = actionBar.newTab(); 

    t.setTabListener(this); 
    t.setIcon(resource); 

    actionBar.addTab(t); 
} 

Любые идеи?

ответ

2

Одна из проблем заключается в том, что панель вкладок Action View автоматически масштабирует изображения до заданного размера, поэтому даже если вы сделаете значок супер большим или супер маленьким, он должен заполнить примерно одно и то же пространство в панели действий.

TabBar/TabView также был разработан для переполнения, который вы уже нашли ^.^Это приложение позволяет открывать от 10 до 20 различных вкладок за раз, пользователь может прокручивать список из них. Не только это, но и представление вкладки трудно работать с использованием фиксированного, не прокручиваемого списка значков, просто потому, что устройства Android имеют все формы и размеры.

Два варианта, которые могут удовлетворить то, что вы ищете. Создайте свой собственный RelativeLayout или LinearLayout с иконками внутри макета. Таким образом, вы можете выбрать размер панели действий каждый раз, когда =) Вы можете иметь док-станцию ​​в верхней или нижней части любого Activity.

Если это не вариант, вы можете добавить значки в верхнее меню ActionBar, которое не выполняет прокрутку. Однако ваши значки могут не соответствовать всем основным ActionBar, что приведет к тому, что все переполненные значки будут помещены в раскрывающееся меню переполнения. = (

Чтобы удалить разнос разделителя между вкладками сохранить следующий код в качестве нового файла XML в вашей вытяжке папки, например, dividerdrawable.xml:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="line" > 
    <size 
     android:width="0px" 
     android:color="@android:color/black" 
     android:dashWidth="0px" 
     android:dashGap="0px" /> 
</shape> 

, а затем использовать эту вытяжке для вашей вкладки делителя

.
<item name="divider">@drawable/dividerdrawable</item> 
+0

Вы говорите о стандартном Android TabBar или ActionBarSherlock TabBar? Я спрашиваю, потому что он работает так, как я хочу, в устройствах/эмуляторах 4.0+. Я даже пытался использовать тот же размер экрана (320x480) на Android 4.0, и он отлично работает – josemando

+0

Yep ActionBarSherlock знак равноTabBar предназначен для прокрутки, как показано на изображении, это действительно scrollView, добавляющий эти изображения. Причина, по которой они работают на 4.0+, а не 2.1-2.2, вероятно, объясняется тем, что 4.0 более точно измеряет размеры. Если Android растягивает изображения только на пиксель над границами экрана, вы заметите эффект прокрутки. Также имейте в виду, что если вы придерживаетесь TabView, вам нужно учитывать разную плотность между устройствами, то есть вам понадобится предварительное изображение для каждой плотности. – Gatekeeper

+0

У меня уже есть 4 разных набора значков для TabBar, по одному для каждой плотности. Я ищу вариант, где мне не нужно было бы повторно реализовывать всю логику TabBar ... Вы говорите, что независимо от того, насколько я изменяю размер значков, я всегда буду прокручивать, потому что изображения будут растягиваться? – josemando

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