滑动选项卡布局中的文本为大写字母

7

你好,我在我的应用程序中使用滑动选项卡布局,一切都很好。唯一让我不理解的是为什么我的选项卡文本是大写的。

我已经打印了滑动选项卡类中选项卡获取的文本,它们并不是大写的。我查看了周围,也没有调用 toUpperCase 方法。

这是设置文本的类中的代码:

  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);
            }
        }
    }

我相信我可以通过样式来实现它,但确实不确定要使用哪种样式。这是我的样式:

<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>

你在L中看到这个了吗?这是默认行为。如果您不想要全部大写字母,可以参考此答案。https://dev59.com/nV8d5IYBdhLWcg3wVQ0U#26959656 - Nikola Despotoski
4个回答

21
如果您使用 "android.support.design.widget.TabLayout",需要设置 app:tabTextAppearance="@android:style/TextAppearance.Widget.TabWidget"

2
无法在 com.google.android.material.tabs.TabLayout 上工作。 - Farid

6

我找到了答案,它在createDefaultTabView()方法中。

需要将textView.setAllCaps(true)更改为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;
}

尝试在上述方法中更改TAB_VIEW_TEXT_SIZE_SP值,但更改未反映。 - Lalit Jadiya

1
在populateTabStrip()中添加这一行tabTitleView.setAllCaps(false);

0

你可以通过使用自己的样式值并在tablayout标记中调用app:tabTextAppearance="@style/TextTabLayout"来实现。

在你的样式值中添加这个就可以了,你还可以添加你的文字大小或字体家族。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接