web-dev-qa-db-ja.com

android:textAllCaps = "false"はTabLayoutデザインのサポートでは機能しません

Android:textAllCaps="false"Android.support.design.widget.TabLayoutを設定しました。すべての大文字でのみタブタイトルを表示していると思います。

すべてのキャップを削除するにはどうすればよいですか?

65
dhuma1981

設計ライブラリ23.2.0以降の更新

元の答えは、デザインライブラリ23.2.0以降では機能しません。コメントで指摘された@ fahmad6に感謝します。誰かがそのコメントを逃した場合に備えて、ここに掲載します。すべての大文字設定を無効にするには、textAllCapsAndroid:textAllCapsの両方をfalseに設定する必要があります。

<style name="MyCustomTextAppearance" parent="TextAppearance.Design.Tab">
      <item name="textAllCaps">false</item>
      <item name="Android:textAllCaps">false</item>
</style>

元の回答

デフォルトでは、タブはTabLayoutによって作成され、textAllCapsプロパティがtrueに設定されます。このフラグをfalseにするスタイルを定義する必要があります。

<style name="MyCustomTabLayout" parent="Widget.Design.TabLayout">
      <item name="tabTextAppearance">@style/MyCustomTextAppearance</item>
</style>

<style name="MyCustomTextAppearance" parent="TextAppearance.Design.Tab">
      <item name="textAllCaps">false</item>
</style>
142
Paresh Mayani

@Paresh Mayaniの答えは正しいですが、タブスタイルのみを作成できます

<style name="MyCustomTextAppearance" parent="TextAppearance.Design.Tab">
  <item name="textAllCaps">false</item>
</style>

そして、それを使用して

<Android.support.design.widget.TabLayout
    app:tabTextAppearance="@style/MyCustomTextAppearance"
    .../>
55
Ordon

https://stackoverflow.com/a/34678235/1025379

<Android.support.design.widget.TabLayout
    app:tabTextAppearance="@Android:style/TextAppearance.Widget.TabWidget"
/>
30
susemi99

この属性を使用してくださいapp:tabTextAppearance="@Android:style/TextAppearance.Widget.TabWidget"動作します。

  <Android.support.design.widget.TabLayout
    Android:id="@+id/tablayout"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_gravity="center"
    app:tabGravity="fill"
    app:tabTextAppearance="@Android:style/TextAppearance.Widget.TabWidget"
    app:tabIndicatorColor="@color/colorPrimary"
    app:tabMode="fixed"
    app:tabPaddingStart="0dp" />
20
yousef

それらのために他の答えを働かせることができない人

単一行のタブテキストがある場合、スタイルの定義は正常に機能しています。 TabLayoutをよく見ると、タブに複数の行があるときに、フィールドdesign_tab_text_size_2lineを使用していることがわかります。

このフィールドを有効にする唯一の方法は、dimenファイルでそれをオーバーライドすることです。

あなたのvalues/dimens.xmlにこれを入れてください

<dimen name="design_tab_text_size_2line" tools:override="true">10sp</dimen>

それが役に立てば幸い。

6
Evren Ozturk

ここに簡単な解決策があります。

 for (int tabIndex = 0; tabIndex <tabLayout.getTabCount() ; tabIndex++) {
        TextView tabTextView = (TextView)(((LinearLayout)((LinearLayout)tabLayout.getChildAt(0)).getChildAt(tabIndex)).getChildAt(1));
        tabTextView.setAllCaps(false);
    }
4
Balaji Gaikwad

私の場合、2つのバリアントが機能します。

1)ボグダン(susemi99):

<Android.support.design.widget.TabLayout
    app:tabTextAppearance="@Android:style/TextAppearance.Widget.TabWidget"
/>

2)Paresh Mayaniによる。 Android:textAllCaps="false"Android:textSize="15sp"を同時に使用したかったので、彼の古い方法は機能します。

styles.xmlに書き込みます(親は、たとえば「@Android:style/TextAppearance.Widget.TabWidget」、「TextAppearance.Design.Tab」によって異なる場合があります):

<style name="TabLayout" parent="Widget.Design.TabLayout">
    <item name="tabIndicatorColor">@color/color_blue</item>
    <item name="tabSelectedTextColor">@color/color_blue</item>
    <item name="tabTextColor">@color/black</item>
    <item name="tabTextAppearance">@style/TabLayoutTextAppearance</item>
</style>

<style name="TabLayoutTextAppearance" parent="TextAppearance.Design.Tab">
    <item name="Android:textSize">15sp</item>
    <item name="textAllCaps">false</item>
    <item name="Android:textAllCaps">false</item>
</style>

このスタイルをレイアウトに適用します。

<Android.support.design.widget.TabLayout
    Android:id="@+id/tab_layout"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    style="@style/TabLayout"
    />
4
CoolMind

Priror 14のバージョンでは、設定する必要があります(Paresh Mayaniのコメントによる)。

<style name="MyCustomTabLayout" parent="Widget.Design.TabLayout">
  <item name="tabTextAppearance">@style/MyCustomTextAppearance</item>
</style>

<style name="MyCustomTextAppearance" parent="TextAppearance.Design.Tab">
  <item name="textAllCaps">false</item>
</style>

ただし、Androidバージョンが14以上の場合、以下を設定する必要があります。

<item name="Android:textAllCaps">false</item>

したがって、14以前のバージョンとの互換性が必要な場合は、alsoフォルダーvalues-v14を作成し、そのフォルダーにコンテンツを含むstyles.xmlファイルを作成する必要があります。

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:Android="http://schemas.Android.com/apk/res/Android" xmlns:tools="http://schemas.Android.com/tools">
    <style name="MyCustomTextAppearance" parent="TextAppearance.Design.Tab">
      <item name="Android:textAllCaps">false</item>
    </style>
</resources>
2
Pedro Leite

次の方法を試してください。TextViewのすべてのメソッドをTabLayoutに実装できます

private void setCustomTab() {

    ViewGroup vg = (ViewGroup) mTabLayout.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(ResourcesCompat.getFont(this,R.font.montserrat_medium));
                ((TextView) tabViewChild).setAllCaps(false);
            }
        }
    }
}

それが役に立てば幸い。

1
Pankaj Lilan

Javaコードでこれを行うこともできます。 SlidingTabLayoutを使用している場合は、このサンプルをご覧ください。

protected TextView createDefaultTabView(Context context){
        TextView textView = new TextView(context);
        textView.setGravity(Gravity.CENTER);
        textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, TAB_VIEW_TEXT_SIZE_SP);//see line 38 above change the value their in TAB_VIEW_TEXT_SIZE_SP.
        textView.setTypeface(Typeface.DEFAULT);//From DEFAULT_BOLD
        textView.setTextColor(Color.parseColor("#536DFE"));//Text color of the words in the tabs. Indigo A200

        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){
            // If we're running on Honeycomb or newer, then we can use the Theme's
        // selectableItemBackground to ensure that the View has a pressed state
            TypedValue outValue = new TypedValue();
            getContext().getTheme().resolveAttribute(Android.R.attr.selectableItemBackground, outValue, true);
            textView.setBackgroundResource(outValue.resourceId);
        }

        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH){
            // If we're running on ICS or newer, enable all-caps to match the Action Bar tab style
            textView.setAllCaps(true);
        }

        int padding = (int)(TAB_VIEW_PADDING_DIPS * getResources().getDisplayMetrics().density);
        textView.setPadding(padding, padding, padding, padding);

        return textView;
    }

TextView.setAllCaps()の境界はtrueであることに注意してください。

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH){
            // If we're running on ICS or newer, enable all-caps to match the Action Bar tab style
            textView.setAllCaps(true);
        }

これを(false)に変更すると、問題が解決しました。

textView.setAllCaps(false);

また、タブに使用する文字列リソースファイルは次のようになります。

<string name="tab_title">Title with capital and smaller case</string>

ただし、> TITLE WITH ALL CAPS <のようなすべてのキャップがある場合は、もちろんタブ内のすべてのキャップを取得します。

他の変更は行っていません。

TextView.setAllCaps(false)も設定できることは注目に値しますが、私の場合は違いはありません。 textView.setAllCaps(true)をコメントアウトしました。

0
DroidCrafter

変更:<item name="Android:textAllCaps">false</item>

あり:<item name="textAllCaps">false</item>

0
Fidan Bacaj