Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sliding tab layout text is uppercase

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>
like image 957
Bended Avatar asked Feb 04 '15 08:02

Bended


2 Answers

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

like image 189
Bogdan Avatar answered Sep 29 '22 12:09

Bogdan


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;
}
like image 45
Bended Avatar answered Sep 29 '22 10:09

Bended