Android中不同大小的标签

时间:2010-08-24 15:36:21

标签: android tabs width android-tabhost tabwidget

我有一个带有4个标签的应用程序。默认情况下,每个标签宽度为屏幕宽度的1/4。我怎样才能覆盖这个?

我需要标签为每个标签设置不同的宽度。关于如何实现这一目标的任何想法?

4 个答案:

答案 0 :(得分:2)

试试这个:

tabHost.getTabWidget().getChildAt(0).getLayoutParams().height = 35; 

答案 1 :(得分:1)

最后,我设法使用ToggleButton设置了不同大小的标签。

我的XML就像这样

<LinearLayout
  android:id="@+id/tabs"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:orientation="horizontal"
  android:layout_below="@id/header"
>

  <ToggleButton
  android:id="@+id/tab1"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
    android:drawableRight="@drawable/icon_home"
    android:textOn=""
    android:textOff=""
    android:background="@drawable/tabselector"
    android:paddingLeft="15dip"
    android:paddingRight="15dip"
    android:layout_weight="0"
    />
        <ImageView
    android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:src="@drawable/top_menubar_separator" />

<ToggleButton
  android:id="@+id/tab2"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
    android:drawableRight="@drawable/icon_store"
    android:textOn="Store"
    android:textOff="Store"
    android:background="@drawable/tabselector"
    android:paddingLeft="15dip"
    android:paddingRight="15dip"
    android:layout_weight="2"
    />

每个ToggleButton都是一个标签。这里的技巧是使用重量来扩展标签以完全填满屏幕。

teab_selector.xml看起来像这样

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item   android:drawable="@drawable/top_menubar_selected"
            android:state_pressed="true"
           />
 <item  android:drawable="@drawable/top_menubar_selected"
            android:state_checked="true"
           />
      <item     android:drawable="@drawable/top_menubar_1px" />
</selector>

当选择一个新按钮时,我仍然需要对按下按钮的逻辑进行编码,然后使用ta活动启动一个intent,但到目前为止看起来很不错。

答案 2 :(得分:0)

试试这个:

<TabWidget android:layout_width="wrap_content" ... />

答案 3 :(得分:0)

为了仍然使用FragmentTabHost和TabWidget的人,可以使用PreDrawListener上的ViewTreeObserver来获取标签以包裹文本而不使用字内中断策略。选项卡指示器视图,然后在其中设置文本。像这样的东西

    final View newTabView = LayoutInflater.from(this).inflate(R.layout.tab_view, null);
    mTabHost.addTab(mTabHost.newTabSpec(index + "").setIndicator(newTabView),
            YourClassArgument.class, null);
    final TextView titleTextView = newTabView.findViewById(R.id.tabTextView);
    titleTextView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
        @Override
        public boolean onPreDraw() {
            titleTextView.getViewTreeObserver().removeOnPreDrawListener(this);
            LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) newTabView.getLayoutParams();
            layoutParams.width = (int) Math.ceil(titleTextView.getLayout().getLineWidth(0))
                    + newTabView.getPaddingLeft() + newTabView.getPaddingRight();
            newTabView.setLayoutParams(layoutParams);
            return false;
        }
    });
    titleTextView.setText(tabTitle);