7

Hi I'm using Sliding tab layout in my app and it all works great. The only thing I dont understand is why my tabs text are in uppercase.

I've printed the text the tabs get inside of the sliding tab class and they are not in uppercase. I've looked around and there is no toUpperCase method being called.

Here is the code from the class that sets the text:

  private void populateTabStrip() {
        final PagerAdapter adapter = mViewPager.getAdapter();
        final View.OnClickListener tabClickListener = new TabClickListener();

        for (int i = 0; i < adapter.getCount(); i++) {
            View tabView = null;
            TextView tabTitleView = null;

            if (mTabViewLayoutId != 0) {
                // If there is a custom tab view layout id set, try and inflate it
                tabView = LayoutInflater.from(getContext()).inflate(mTabViewLayoutId, mTabStrip,
                        false);
                tabTitleView = (TextView) tabView.findViewById(mTabViewTextViewId);
            }

            if (tabView == null) {
                tabView = createDefaultTabView(getContext());
            }

            if (tabTitleView == null && TextView.class.isInstance(tabView)) {
                tabTitleView = (TextView) tabView;
            }

            if (mDistributeEvenly) {
                LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) tabView.getLayoutParams();
                lp.width = 0;
                lp.weight = 1;
            }

            tabTitleView.setText(adapter.getPageTitle(i));
            tabTitleView.setTextColor(getResources().getColor(R.color.da_blue));
            tabView.setOnClickListener(tabClickListener);
            String desc = mContentDescriptions.get(i, null);
            if (desc != null) {
                tabView.setContentDescription(desc);
            }

            mTabStrip.addView(tabView);
            if (i == mViewPager.getCurrentItem()) {
                tabView.setSelected(true);
            }
        }
    }

I'm sure I can do it through a style but really not sure which one to use. This is what I have in my styles:

<resources>

    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:actionBarTabTextStyle">@style/ActionBarTabTextStyle.Tabtheme</item>
        <item name="actionBarTabTextStyle">@style/ActionBarTabTextStyle.Tabtheme</item>
    </style>


    <style name="ActionBarTabTextStyle.Tabtheme" parent="@android:style/Widget.Holo.ActionBar.TabText">
        <item name="android:textAllCaps">false</item>
    </style>
</resources>
Bended
  • 494
  • 1
  • 7
  • 22
  • Are you seeing this in L? This is default behavior. You can refer to this answer if you don't want all caps. http://stackoverflow.com/questions/26958909/why-is-my-button-text-coerced-to-all-caps-on-lollipop/26959656#26959656 – Nikola Despotoski Feb 04 '15 at 09:13

4 Answers4

21

If you use "android.support.design.widget.TabLayout" needed to set app:tabTextAppearance="@android:style/TextAppearance.Widget.TabWidget"

Bogdan
  • 211
  • 2
  • 2
6

Found the answer it was in the createDefaultTabView() method.

Needed to change textView.setAllCaps(true) to false.

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);
    textView.setLayoutParams(new LinearLayout.LayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));

    TypedValue outValue = new TypedValue();
    getContext().getTheme().resolveAttribute(android.R.attr.selectableItemBackground,
            outValue, true);
    textView.setBackgroundResource(outValue.resourceId);
    textView.setAllCaps(false); **// Changed to false and it did the trick**

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

    return textView;
}
Bended
  • 494
  • 1
  • 7
  • 22
1

just add this linetabTitleView.setAllCaps(false); in populateTabStrip()

0

You can do it by use your style values and call it app:tabTextAppearance="@style/TextTabLayout" in your tablayout tag.

in your style values just add this, you can also add your text size or font family.

<style name="TextTabLayout">
   <item name="android:textAllCaps">false</item>
</style>