Изменение стиля шрифта в закладках панели действий с помощью Шерлока

Я читал это:

Android - настройка вкладок sherlock для панели действий

И еще много ссылок, я выяснил, что такое StackedBackground и что такое Background, но я не могу найти, как удалить All Caps из вкладок и получить обычные шрифты или изменить размер шрифта на вкладках панели действий.

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

Пока у меня это есть, но я пробовал размер текста и всевозможные цвета, но ничего:

<style name="CustomActivityTheme" parent="@android:style/Theme.Holo.Light">
    <item name="android:actionBarStyle">@style/MyActionBar</item>
    <item name="android:actionBarTabTextStyle">@style/MyActionBar</item>
</style>

<style name="MyActionBar" parent="@android:style/Widget.Holo.ActionBar">
    <item name="android:background">@drawable/grey</item>
    <item name="android:backgroundStacked">@drawable/ab_transparent_example</item>
    <item name="android:textAllCaps">false</item>
    <item name="android:textSize">10dp</item>
</style>

Изменить: Я просто понял, что могу удалить все кепки с помощью "android: actionBarTabTextStyle", но теперь он берет фоновый цвет с "MyActionBar"... Итак, как установить actionBarTabTextStyle и список actionBarStyle в некоторой иерархии, этот текст сокращен, а не в Caps, но это не соответствует стилю "MyActionBar".

Изменить 2: Я пробовал еще 9patch-изображений, и он выглядит уродливым, но я просто не могу избавиться от синих линий...

UglyBluelines

Ответ 1

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

Сначала создайте xml файл с этим в нем: tab_title.xml

<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/action_custom_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="My Custom title"
android:textColor="#fff"
android:textSize="18sp"
android:paddingTop="5dp" />

Затем в классе, где вы создаете экземпляр вашего ActionBar, используйте этот код, чтобы установить текст на каждой вкладке. (В этом примере используется ActionBarSherlock.)

ActionBar bar = getSupportActionBar();
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

String[] tabNames = {"Tab 1","Tab 2","Tab 3"};

for(int i = 0; i<bar.getTabCount(); i++){
    LayoutInflater inflater = LayoutInflater.from(this);
    View customView = inflater.inflate(R.layout.tab_title, null);

    TextView titleTV = (TextView) customView.findViewById(R.id.action_custom_title);
    titleTV.setText(tabNames[i]);
    //Here you can also add any other styling you want.

    bar.getTabAt(i).setCustomView(customView);
}

Надеюсь, это поможет любому, у кого были проблемы, такие как я.

//обновление 1/6/2015

если вы используете TabLayout в предварительном просмотре android M, и вы хотите изменить шрифт, который вы должны добавить в цикл для предыдущего решения, например:

 private void changeTabsFont() {

        ViewGroup vg = (ViewGroup) tabLayout.getChildAt(0);
        int tabsCount = vg.getChildCount();
        for (int j = 0; j < tabsCount; j++) {
            ViewGroup vgTab = (ViewGroup) vg.getChildAt(j);
            int tabChildsCount = vgTab.getChildCount();
            for (int i = 0; i < tabChildsCount; i++) {
                View tabViewChild = vgTab.getChildAt(i);
                if (tabViewChild instanceof TextView) {
                    ((TextView) tabViewChild).setTypeface(Font.getInstance().getTypeFace(), Typeface.NORMAL);
                }
            }
        }
    }