Как изменить цвет выбранной вкладки в хосте вкладок Android?

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

@SuppressWarnings("deprecation")
public class TabHostActivity extends TabActivity {

    private TabHost tabHost;
    private int currentTab = 0;
    private int lastTab = 0;

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            requestWindowFeature(Window.FEATURE_NO_TITLE);
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);

            setContentView(R.layout.activity_tabhost);
            UserAccount userAccount = new UserAccount();

            tabHost = (TabHost) findViewById(android.R.id.tabhost);


            TabSpec tab1 = tabHost.newTabSpec("First Tab");
            tab1.setContent(new Intent(this, HomeActivity.class));
            tab1.setIndicator("",getResources().getDrawable(R.drawable.home_icon));
            tabHost.addTab(tab1);

            TabSpec tab2 = tabHost.newTabSpec("Second Tab");
            tab2.setContent(new Intent(this, About.class));
            tab2.setIndicator("",getResources().getDrawable(R.drawable.about_icon));
            tabHost.addTab(tab2);


            TabSpec tab3 = tabHost.newTabSpec("Third Tab");
            tab3.setContent(new Intent(this, GridViewActivity.class));
            tab3.setIndicator("",getResources().getDrawable(R.drawable.gallery_icon));
            tabHost.addTab(tab3);


            getTabHost().setOnTabChangedListener(new OnTabChangeListener() {
                 public void onTabChanged(String tabId)
                 {
                        currentTab = getTabHost().getCurrentTab();

                        setCurrentTabColor();

                        lastTab =currentTab;
                 }
            });

            getTabWidget().getChildAt(lastTab).setBackgroundColor(Color.GRAY);
        }

        public void setCurrentTabColor(){
            getTabWidget().getChildAt(currentTab).setBackgroundColor(Color.GRAY);
            getTabWidget().getChildAt(lastTab).setBackgroundColor(Color.parseColor("#FCAFA6"));
        }
}

это мой xml для tabhost, в котором цвет фона моего виджета вкладки установлен на розовый

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

    <LinearLayout
        android:id="@+id/LinearLayout01"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical">

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1" >
        </FrameLayout>

        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0"
            android:background="#FCAFA6" >
        </TabWidget>
    </LinearLayout>

</TabHost>

person KirbyAbadilla    schedule 12.11.2014    source источник
comment
Есть ли особая причина, по которой вы используете TabActivity и другие классы, которые устарели более 3 лет?   -  person ianhanniballake    schedule 12.11.2014
comment
потому что мне не удалось сделать мои классы фрагментарными   -  person KirbyAbadilla    schedule 12.11.2014


Ответы (1)


во-первых, в своей деятельности я создал экземпляр своего хоста вкладок

tabHost = (FragmentTabHost) findViewById(R.id.tabContainer);
tabHost.setup(this, getSupportFragmentManager(), R.id.tabContent);
    tabHost.addTab(tabHost.newTabSpec("1").setIndicator("New Tab"),
            PageFragment.class, null);

Я написал метод для обновления цвета моих вкладок в зависимости от того, был ли он выбран.

protected void updateTabs() {



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

        if (tabHost.getTabWidget().getChildAt(i).isSelected()) {
            SessionState.getSelectedIndex().setSelectedPage(i);
            tabHost.getTabWidget()
                    .getChildAt(i)
                    .setBackgroundResource(
                            R.drawable.tab_selected_background);
        } else {

            tabHost.getTabWidget()
                    .getChildAt(i)
                    .setBackgroundResource(
                            R.drawable.tab_unselected_background);

        }
    }

}

затем я вызывал этот метод каждый раз, когда вкладка менялась

tabhost.setOnTabChangedListener(new OnTabChangeListener() {

        @Override
        public void onTabChanged(String tabId) {
            updateTabs();
        }
    });

надеюсь, это поможет

person wolfaviators    schedule 21.05.2015