Отменить выбор вкладки в TabHost

1

У меня есть TabHost с 5 вкладками. Насколько я вижу, должна быть одна вкладка, выбранная в любое время.

Мне нужен способ отменить выбор всех моих вкладок, чтобы никто не был выбран.

Если табус подразумевается под общим для того, чтобы одна вкладка была выбрана во все времена, как я могу заставить ее отображаться (речь на языке UI), как если бы вкладка не была выбрана?

Теги:
tabs
android-tabhost

3 ответа

1
Лучший ответ

Это невозможно AFAIK. но да, вы можете установить выбранный цвет табуляции, чтобы он выглядел так, как будто он не выбран и устанавливает пустой макет поверх него, управляя глобальной переменной, когда вы делаете ее "невыбранной" и настраиваете нормальный макет, когда вы хотите, чтобы он отображался нормально для пользователя, Но это своего рода трюк.

Надеюсь, ты получишь мою мысль!

РЕДАКТИРОВАТЬ :

Предположим, вы String what="disappear" где-то в вашем коде, чтобы показать его "unselected", и вы можете использовать эту функцию для изменения цвета вкладки:

Main.class:

//Change The Backgournd Color of Tabs
    public void setTabColor(TabHost tabhost) {


        for(int i=0;i<tabhost.getTabWidget().getChildCount();i++)
        {
                tabhost.getTabWidget().getChildAt(i).setBackgroundColor(Color.parseColor("#FFFFFF"))); //unselected white colored                   
        }

            if(!what.equals("disappear"))
                 tabhost.getTabWidget().getChildAt(tabhost.getCurrentTab()).setBackgroundColor(Color.parseColor("FF0000"))); // selected red colored

            else
                 tabhost.getTabWidget().getChildAt(tabhost.getCurrentTab()).setBackgroundColor(Color.parseColor("FFFFFF"))); // selected but show as unselected with white color


    }

И в вашем классе активности (который открывается этой выбранной вкладкой):

FirstActivity.class:

if(what.equals("disappear"))
      setContentView(R.layout.blank);
else
      setContentView(R.layout.first_layout);

blank.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical"
  android:id="@+id/layout"
  android:background="#ffffff"  
  android:gravity="center">
  <!-- You can make background transperent by setting it to "00ffffff" -->
  <!-- You can also add this textview to guide user -->
  <!--
      <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Click Any Tab To Start
         />
  -->
</LinearLayout>
  • 0
    Можете ли вы дать мне несколько основных шагов, как это сделать? Как, если есть системные цвета, которые я должен использовать для этого? Как именно создать пустой макет и установить его в качестве конкретной вкладки?
  • 0
    @Eitan: пожалуйста, смотрите мои изменения.
Показать ещё 2 комментария
4

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

final TabWidget tabWidget = tabHost.getTabWidget();
final int n = tabWidget.getChildCount();
for (int i = 0; i < n; ++i) {
    tabWidget.getChildAt(i).setSelected(false);
}

или вы можете добавить скрытую вкладку и выбрать ее, если хотите отменить выбор вкладки

tabHost.addTab(
            tabHost.newTabSpec("hiddenTab").setIndicator(""),
            MyFragment.class,
            null
    );

tabHost.getTabWidget().getChildTabViewAt(hiddenTabIndex).setVisibility(View.GONE);

и выберите эту вкладку, когда захотите

tabHost.setCurrentTab(hiddenTabIndex);
  • 0
    Это должен быть принятый ответ
0

С этой целью, возможно, использование tabHost не является правильным способом?

  • 0
    Что вы предлагаете в качестве альтернативы?
  • 0
    Ну, я думал о глобальном макете, содержащем все ваши вкладки в скрытом режиме ( View.GONE ), ожидаемом, который вы хотите показать. Но вам придется создать свой собственный макет, содержащий заголовки вкладок, поэтому, когда вы захотите отменить выбор всех вкладок, вы сможете установить желаемый фон для заголовков вкладок. Это не совсем чисто, но это работает. Надеюсь, вам не придется этого делать;)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню