Как стилизовать FragmentTabHost внутри фрагмента

Это мой xml:

<android.support.v4.app.FragmentTabHost
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="match_parent"
>

<LinearLayout
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    >

    <FrameLayout
        android:id="@+id/realtabcontent"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"

        />

</LinearLayout>

И это Фрагмент хостинга.

public class TabPractice extends Fragment{
 private FragmentTabHost mTabHost;

//Mandatory Constructor
    public TabPractice() {
    }

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);




    }
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.tabs_practice,container, false);


        mTabHost = (FragmentTabHost)rootView.findViewById(android.R.id.tabhost);
        mTabHost.setup(getActivity(), getChildFragmentManager(), R.id.realtabcontent);

        mTabHost.addTab(mTabHost.newTabSpec("Practice All").setIndicator("Practice All"),
                WelcomeScreen.class, null);
        mTabHost.addTab(mTabHost.newTabSpec("Practive Fav").setIndicator("Practive Fav"),
                FavoriteList.class, null);



        return rootView;

    }

}

Вот как выглядит моя вкладка, я не понимаю, как оформить эти вкладки. В большинстве примеров, объясняющих стилизацию, в XML есть TabWidget, который, когда я пытаюсь добавить его в свой макет, не работает.

1) Может ли кто-нибудь помочь мне понять, чем хостинг FragmenttabHost в Fragment (mycode - из какого-то учебника) отличается от наличия его в FragmentActivity?

2) Как я могу стилизовать вкладку в моем коде??

Благодарю.

1 ответ

Сделайте свой XML следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <android.support.v4.app.FragmentTabHost
        android:id="@android:id/tabhost"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical" >

            <TabWidget
                android:id="@android:id/tabs"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="0"
                android:orientation="horizontal" />

            <View
                android:layout_width="match_parent"
                android:layout_height="1dp"
                android:background="@color/dark_blue" />

            <FrameLayout
                android:id="@android:id/tabcontent"
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:layout_weight="0" />

            <FrameLayout
                android:id="@+id/realtabcontent"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:background="@android:color/white" />
        </LinearLayout>
    </android.support.v4.app.FragmentTabHost>
</LinearLayout>

и код для вкладок в вашем TabPracticeFragment следующее:

mTabHost = (FragmentTabHost) view.findViewById (android.R.id.tabhost);

mTabHost.setup(getActivity(), getChildFragmentManager(), R.id.realtabcontent);

View tabIndicatorToday = LayoutInflater.from(getActivity()).inflate(R.layout.tab_indicator, mTabHost.getTabWidget(), false);
((TextView) tabIndicatorToday.findViewById(R.id.tv_tab_txt)).setText(getResources().getString(R.string.today));

mTabHost.addTab(mTabHost.newTabSpec(getResources().getString(R.string.today)).setIndicator(tabIndicatorToday), EntriesTodayFragment.class, null);

View tabIndicatorLive = LayoutInflater.from(getActivity()).inflate(R.layout.tab_indicator, mTabHost.getTabWidget(), false);
((TextView) tabIndicatorLive.findViewById(R.id.tv_tab_txt)).setText(getResources().getString(R.string.live));

и tab_indicator XML в drawables следующим образом:

 <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="0dp"
        android:layout_height="50dp"
        android:layout_weight="1"
        android:background="@color/white"
        android:orientation="horizontal" >

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/tv_tab_txt"
                style="?android:attr/tabWidgetStyle"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:gravity="center"
                android:paddingBottom="10dp"
                android:paddingTop="10dp"
                android:text="@string/live"
                android:textColor="@drawable/tab_text_color"
                android:textStyle="bold" />

            <View
                android:layout_width="match_parent"
                android:layout_height="4dp"
                android:layout_gravity="bottom"
                android:background="@drawable/tab_underline_selector" />
        </LinearLayout>

        <View
            android:layout_width="1dp"
            android:id="@+id/tabs_divider_view"
            android:layout_height="30dp"
            android:layout_marginBottom="10dp"
            android:layout_marginTop="10dp"
            android:background="@color/grey_background" />

    </LinearLayout>

Теперь вы можете настроить фон вкладок, выделенный цвет и линию под вкладками по своему усмотрению. Надеюсь, поможет.

Другие вопросы по тегам