为什么Tab主机不在android中显示图标?

时间:2014-03-30 11:15:26

标签: android android-layout tabs android-tabhost fragment-tab-host

以下是设置tabhost的代码,但有两个问题

  1. 如果文字太长,文字会转到下一行,我可以减少 大小并强制它到单行?
  2. 所有图标都不显示,即使我确定图像src是正确的

    public class MainActivity extends FragmentActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            FragmentTabHost tabHost = (FragmentTabHost)findViewById(android.R.id.tabhost);
    
            tabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);
            tabHost.addTab(tabHost.newTabSpec("restaurant").setIndicator("Restaurant",getResources().getDrawable(R.drawable.food)),PlaceList.class, null);
            tabHost.addTab(tabHost.newTabSpec("attraction").setIndicator("Attraction",getResources().getDrawable(R.drawable.view)), PlaceList.class, null);
            tabHost.addTab(tabHost.newTabSpec("map").setIndicator("Map",getResources().getDrawable(R.drawable.map)),Map.class,null);
            tabHost.addTab(tabHost.newTabSpec("planner").setIndicator("Planner",getResources().getDrawable(R.drawable.plan)),Planner.class, null);
        }
     }
    

1 个答案:

答案 0 :(得分:5)

在致电TabSpec.setIndicator时,您传递的Drawable will only be visible if the label is null or empty.只要确保TextView仅限于一行,就可以循环TabWidget.getTabCount 1}},然后调用TabWidget.getChildTabViewAtView.findViewById以获取用于设置标题的TextView。之后,只需拨打TextView.setSingleLine

    final TabWidget tabWidget = tabHost.getTabWidget();
    for (int i = 0; i < tabWidget.getTabCount(); i++) {
        final View tab = tabWidget.getChildTabViewAt(i);
        final TextView title = (TextView) tab.findViewById(android.R.id.title);
        title.setSingleLine();
    }

或者,您可以通过为Widget.TabWidget创建样式来扩充自己的标签布局。

<style name="Your.TabWidget" parent="@android:style/Widget.TabWidget">
    <item name="android:tabLayout">@layout/your_tab_layout</item>
</style>

在您的父主题中为item创建一个新的android:tabWidgetStyle以应用它。