Вкладки разных размеров в Android - PullRequest
6 голосов
/ 24 августа 2010

У меня есть приложение с 4 вкладками. По умолчанию ширина каждой вкладки составляет 1/4 ширины экрана. Как я могу переопределить это?

Мне нужно, чтобы у каждой вкладки была разная ширина Есть идеи, как этого добиться?

Ответы [ 4 ]

2 голосов
/ 19 марта 2012

Попробуйте это:

tabHost.getTabWidget().getChildAt(0).getLayoutParams().height = 35; 
1 голос
/ 25 августа 2010

Наконец-то мне удалось создать вкладки разных размеров с помощью 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 выглядит таккнопка, когда выбирается новый и запускается намерение с действием, но пока выглядит красиво.

0 голосов
/ 11 июня 2018

Ради кого-то, все еще использующего 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);
0 голосов
/ 25 августа 2010

Попробуйте это:

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