11

私はこれを読みました:

Android-アクションバーのシャーロックタブをカスタマイズする

さらに多くのリンク、StackedBackgroundとは何か、Backgroundとは何かを理解しましたが、タブからすべての大文字を削除して通常のフォントを取得する方法や、アクションバーのタブでフォントサイズを変更する方法がわかりません。

その上、青い下線の色を変更したいと思います。9つのパッチグラフィックを使用すると、上のリンクと同様の状況になり、テキストの下に線が表示されますが、タブの下部には下に表示されません。元の青い線が残っているので、2本の線が表示されます。

これまでのところ私はこれを持っていますが、テキストサイズとあらゆる種類の色を試しましたが、何もありません:

<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リストを設定する方法では、テキストは縮小され、キャップスで表示されますが、「MyActionBar」スタイルの背景にはなりません。

編集2:私はさらにいくつかの9パッチ画像を試しました、そしてそれは醜いように見えます、しかし私はただ青い線を取り除くことができません...

UglyBluelines

4

1 に答える 1

21

これは何年も前に尋ねられたことは知っていますが、これを整理するのにしばらく費やしたので、これはこの質問を見つけてまだ答えを知りたい人のためのものです.

最初にこれを含む 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);
}

私のように悩んでいる方の参考になれば幸いです。

//2015 年 1 月 6 日更新

Android M プレビューでTabLayout を使用していて、フォントを変更したい場合は、次のように前のソリューションに新しい for ループを追加する必要があります。

 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);
                }
            }
        }
    } 
于 2012-12-07T01:30:42.383 に答える