在android中更改选项卡中的文本大小

Posted

技术标签:

【中文标题】在android中更改选项卡中的文本大小【英文标题】:Change the text size in tab in android 【发布时间】:2013-10-26 20:23:56 【问题描述】:

我一直面临标签栏中文字大小的问题。下图,

这是我的代码,

MainActivity.java

public class MainActivity extends Activity implements OnTabChangeListener, OnPageChangeListener  
    private TabHost tabHost;  
    private ViewPager pager; 

 @Override  
 public void onCreate(Bundle savedInstanceState)   
   super.onCreate(savedInstanceState);  
   setContentView(R.layout.activity_main);  
   tabHost = (TabHost)findViewById(android.R.id.tabhost);  
   pager = (ViewPager) findViewById(R.id.pager);  

   tabHost.setup();  
   TabWidget tabwidget=tabHost.getTabWidget();

   TabSpec spec = tabHost.newTabSpec("tab1");  
   spec.setContent(R.id.tab1);  
   spec.setIndicator("Check In");  
   tabHost.addTab(spec);  

   spec = tabHost.newTabSpec("tab2");  
   spec.setContent(R.id.tab2);  
   spec.setIndicator("Buddies");  
   tabHost.addTab(spec);  

   spec = tabHost.newTabSpec("tab3");  
   spec.setContent(R.id.tab3);  
   spec.setIndicator("Recommendation");  
   tabHost.addTab(spec); 

   spec = tabHost.newTabSpec("tab4");  
   spec.setContent(R.id.tab4);  
   spec.setIndicator("Feed");  
   tabHost.addTab(spec); 

   spec = tabHost.newTabSpec("tab5");  
   spec.setContent(R.id.tab5);  
   spec.setIndicator("Last");  
   tabHost.addTab(spec);

   pager.setAdapter(new MyPagerAdapter(this));  
   pager.setOnPageChangeListener(this);  
   tabHost.setOnTabChangedListener(this);  

   
    @Override  
    public void onTabChanged(String tabId)  
         int pageNumber = 0;  
         if(tabId.equals("tab1"))
           
              pageNumber = 0;  

         

         else if(tabId.equals("tab2"))
           
              pageNumber = 1;

         

         else if(tabId.equals("tab3"))
           
              pageNumber = 2;  

         

         else if(tabId.equals("tab4"))
           
              pageNumber = 3;  


         

         else if(tabId.equals("tab5"))
           
              pageNumber = 4;  

         
         else
           
              pageNumber = 0;  

           

         pager.setCurrentItem(pageNumber);  
     

    @Override  
    public void onPageSelected(int pageNumber)   
         tabHost.setCurrentTab(pageNumber); 

    
    @Override
    public void onPageScrollStateChanged(int arg0) 


    
    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) 


    
    

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_
    android:layout_ >

    <LinearLayout
        android:layout_
        android:layout_
        android:orientation="vertical" >

        <TabWidget
            android:id="@android:id/tabs"
            android:layout_
            android:layout_ />

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_
            android:layout_ >

            <FrameLayout
                android:id="@+id/tab1"
                android:layout_
                android:layout_
                android:visibility="gone" />

            <FrameLayout
                android:id="@+id/tab2"
                android:layout_
                android:layout_
                android:visibility="gone" />

            <FrameLayout
                android:id="@+id/tab3"
                android:layout_
                android:layout_
                android:visibility="gone" />

            <FrameLayout
                android:id="@+id/tab4"
                android:layout_
                android:layout_
                android:visibility="gone" />

            <FrameLayout
                android:id="@+id/tab5"
                android:layout_
                android:layout_
                android:visibility="gone" />
        </FrameLayout>

        <android.support.v4.view.ViewPager
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/pager"
            android:layout_
            android:layout_ />
    </LinearLayout>

</TabHost>

我想在每个选项卡中设置整个文本,我该怎么做?

我一直在尝试此代码来更改文本大小并获得此结果,

代码

 TextView x = (TextView) tabHost.getTabWidget().getChildAt(0).findViewById(android.R.id.title);
   x.setTextSize(10);
   tabHost.getTabWidget().getChildAt(0).getLayoutParams().width = 100;

   TextView x1 = (TextView) tabHost.getTabWidget().getChildAt(1).findViewById(android.R.id.title);
   x1.setTextSize(10);
   tabHost.getTabWidget().getChildAt(1).getLayoutParams().width = 90;

   TextView x2 = (TextView) tabHost.getTabWidget().getChildAt(2).findViewById(android.R.id.title);
   x2.setTextSize(10);
   tabHost.getTabWidget().getChildAt(2).getLayoutParams().width = 100;

   TextView x3 = (TextView) tabHost.getTabWidget().getChildAt(3).findViewById(android.R.id.title);
   x3.setTextSize(10);
   tabHost.getTabWidget().getChildAt(3).getLayoutParams().width = 40;

   TextView x4 = (TextView) tabHost.getTabWidget().getChildAt(4).findViewById(android.R.id.title);
   x4.setTextSize(10);
   tabHost.getTabWidget().getChildAt(4).getLayoutParams().width = 40;

结果图片

但我希望输出为这张图片

根据上图,我的标签小部件应该是可移动的,我该怎么做?

【问题讨论】:

您是否尝试从库中扩展 shouldExpand? github.com/LordZoltan/PagerSlidingTabStrip.Net/wiki/… 【参考方案1】:
TextView x = (TextView) tabHost.getTabWidget().getChildAt(0).findViewById(android.R.id.title);
    x.setTextSize(25);

更多详情请参考以下链接

Change text size on tabHost

How to change the font size of tabhost in android

【讨论】:

如何改变每个tab的宽度? tabHost.getTabWidget().getChildAt(0).getLayoutParams().width = 50; BlueG... 检查我编辑的问题,我想按照我的描述输出。【参考方案2】:

您可以改用 TabLayout 和 Viewpager,并将 tabMode 设置为可滚动,参见下面的代码:

    <android.support.design.widget.TabLayout
        android:id="@+id/tabs"
        android:layout_
        android:layout_
        app:tabGravity="center"
        app:tabMode="scrollable" />

【讨论】:

【参考方案3】:
 app:tabMode="scrollable"
 app:tabGravity="fill"

在你的标签xml中使用这一行,它会做到的。

【讨论】:

【参考方案4】:

您还可以自定义标签的文本和背景。请参阅此博客以获取非常好的 tutorial 以了解如何操作。

【讨论】:

【参考方案5】:

简单易做只需将样式添加到您的 xml 文件中,声明您想要的大小。

<style name="CustomTheme" parent="@android:style/Theme">
    <item name="android:tabWidgetStyle">@style/CustomTabWidget</item>
</style>
<style name="CustomTabWidget" parent="@android:style/Widget.TabWidget">
    <item name="android:textAppearance">@style/CustomTabWidgetText</item>
</style>
<style name="CustomTabWidgetText" 
    parent="@android:style/TextAppearance.Widget.TabWidget">
    <item name="android:textSize">100sp</item>
    <item name="android:textStyle">**strong text**</item>
</style>

不要忘记在 manifast 文件中添加带有样式名称的主题。

【讨论】:

【参考方案6】:
<android.support.design.widget.TabLayout
        android:id="@+id/tabs"
        android:layout_
        android:layout_
        app:tabMode="scrollable"/>

使用 app:tabMode="scrollable"

【讨论】:

【参考方案7】:

只需将 TabLayout 放在 Horizo​​ntalScrollView 中即可:

<HorizontalScrollView
             android:layout_
             android:layout_>
                <android.support.design.widget.TabLayout
                 android:id="@+id/tabs"
                 android:layout_
                 android:layout_ />
    </HorizontalScrollView>

【讨论】:

【参考方案8】:
<style name="MyTabLayout" parent="Base.Widget.Design.TabLayout">
    <item name="tabTextAppearance">@style/MyTabTextAppearance</item>
<style name="MyTabTextAppearance" parent="TextAppearance.AppCompat.Button">
    <item name="android:textSize">18sp</item>
    <item name="android:textColor">@android:color/white</item>
    <item name="textAllCaps">true</item>
<com.google.android.material.tabs.TabLayout
    android:id="@+id/tab_layout"
    android:layout_
    android:layout_
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="@dimen/margin_15"
    android:background="@android:color/transparent"
    android:nestedScrollingEnabled="true"
    android:scrollbarThumbVertical="@color/white"
    android:textAlignment="center"
    app:tabGravity="center"
    app:tabIndicatorAnimationDuration="1"
    app:tabIndicatorColor="@color/white"
    app:tabMode="scrollable"
    app:tabSelectedTextColor="@color/white"
    app:tabTextAppearance="@style/MyTabTextAppearance"
    app:tabTextColor="@color/white" />

 tabLayout.addTab(tabLayout.newTab().setText(R.string.casa))
    tabLayout.addTab(tabLayout.newTab().setText(R.string.fdr_dps))
    tabLayout.addTab(tabLayout.newTab().setText(R.string.loan))

你试试吧,我希望它有效

【讨论】:

【参考方案9】:
<TabHost
     android:id="@+id/tabhost"
     android:layout_
     android:layout_
     android:layout_alignParentTop="true"
     android:layout_alignParentLeft="true">

     <LinearLayout
         android:layout_
         android:layout_
         android:orientation="vertical" >

         <TabWidget
             android:id="@android:id/tabs"
             android:layout_
             android:layout_
             >

         </TabWidget>


         <FrameLayout
             android:id="@android:id/tabcontent"
             android:layout_
             android:layout_
             android:layout_weight="0" />

         <android.support.v4.view.ViewPager
             android:id="@+id/viewpager"
             android:layout_
             android:layout_
             />
     </LinearLayout>
 </TabHost>

代码:

for(int i=0;i<tabhost.getTabWidget().getChildCount();i++)

    TextView tv = (TextView) tabhost.getTabWidget().getChildAt(i).findViewById(android.R.id.title);
    tv.setTextColor(Color.parseColor(SM.getTheme_colour()));
    tv.setTypeface(font_k);

此代码适用于 tabhost 更改文本颜色、字体(字体样式)以及文本大小。

【讨论】:

以上是关于在android中更改选项卡中的文本大小的主要内容,如果未能解决你的问题,请参考以下文章

在选项卡中的列表视图中刷新活动 (Android)

引导选项卡中的数据表大小不正确

如何使用 Android 代码中的 TabLayout 更改选定的选项卡文本颜色?

Android - 一个选项卡中的多个片段

Angular Material Tab : 如果当前选项卡中的表单脏了,则防止 mat-tab-group 的选项卡更改

如何完全删除选项卡中的活动选项卡指示器?