【问题标题】:Android - make selected tab boldAndroid - 使选定的标签加粗
【发布时间】:2013-11-06 02:52:04
【问题描述】:

我的应用程序中有带有 NAVIGATION_MODE_TABS 和一些实际选项卡的 ActionBar。任务非常简单:使选定的选项卡标题粗体(并在选项卡丢失选择时返回正常)。但要完成这样的任务,就成了一个大难题。 Tab 对象没有访问底层 TextView 的方法。所以我为标签标题使用了自定义视图,但是这个视图定位错误:

请帮忙告诉我:

  • 如果有办法直接操作标签文本,或者
  • 如何实现自定义 TextView 的默认定位?

我正在使用的代码:

在活动中->

    final ActionBar actionBar = getSupportActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    ActionBar.TabListener tabListener = new ActionBar.TabListener() {
        public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
            mViewPager.setCurrentItem(tab.getPosition());
            TextView textView = (TextView) tab.getCustomView();
            textView.setTypeface(null, Typeface.BOLD);
        }
        public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
            TextView textView = (TextView) tab.getCustomView();
            textView.setTypeface(null, Typeface.NORMAL);
        }
        public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
            // probably ignore this event
        }
    };

    for (int i = 0; i < 3; i++) {
        TextView textView = (TextView)
                getLayoutInflater().inflate(R.layout.tab_title, null);
        textView.setText("Tab " + i);
        actionBar.addTab(actionBar.newTab()
                .setCustomView(textView)
                .setTabListener(tabListener));
    }

在 layout.tab_title ->

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

【问题讨论】:

    标签: android android-actionbar android-tabs


    【解决方案1】:

    由于 ActionBar.Tab 有一个 setText(CharSequence),您可以在 onTabSelected/onTabUnselected 回调中执行以下操作:

    Spannable wordtoSpan = new SpannableString(String.valueOf(tab.getText()));        
    wordtoSpan.setSpan(new StyleSpan(TypeFace.BOLD), 0, wordtoSpan.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    tab.setText(wordtoSpan);
    

    您可能需要使用不同的 Spannable,SPAN_X_X 常量

    编辑:在回调中使用更通用(获取选项卡中已经存在的文本)。

    【讨论】:

    • 我很抱歉;我没有尝试过自己编码。大多数接受 CharSequence 的 Android UI 元素都支持 Spans。我快速浏览了 ActionBar Tabs 的源代码,它似乎只是将文本海峡传递给了 TextView。对于自定义视图实现,您应该尝试将 'android:gravity="center"' 添加到 tab_title.xml 并将 LayoutParams 设置为 MATCH_PARENT 的宽度和高度。
    猜你喜欢
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 2020-01-31
    相关资源
    最近更新 更多