2015-02-07 4 views
0

Я пытаюсь реализовать пять вкладок в подобном внешнем виде и чувствовать себя как приложение Instagram. Какова наилучшая практика для этого сейчас, когда TabHost и TabActivity устарели?Как реализовать вкладки в Android теперь, когда TabHosts устарели?

Я хочу иметь пять вкладок в верхней части экрана (под панелью действий), каждая из которых имеет чертеж, представляющий содержимое этой вкладки.

Поскольку вкладки всегда будут отображаться, я хочу иметь их в одном действии. Однако содержание каждой вкладки будет зависеть от того, какая вкладка была нажата. Поэтому я хочу иметь представление в той же Деятельности под вкладками, в которые я загружаю фрагменты, по одному за раз в зависимости от того, на каком нажатии.

Так, чтобы подвести итог: Я хочу иметь один активность с выступами в верхней и тем ниже них, в котором я загрузить один из пять различных фрагментов в то время.

Пожалуйста, помогите мне сделать это возможным без использования устаревших классов :)

+0

Проверить этот ответ может быть? http://stackoverflow.com/questions/10297293/android-how-can-i-replace-the-deprecated-tabhost – miselking

ответ

0

Я пытаюсь реализовать пять вкладок в том же выглядеть и чувствовать себя, как приложение Instagram

Поскольку не каждый использует Instagram , в будущем, пожалуйста, разместите снимок экрана о том, что вы хотите где-то, и ссылайтесь на него со своего вопроса.

Я хочу иметь одно действие с вкладками вверху и видом под ними, в котором я загружаю один из пяти разных фрагментов за раз.

Use FragmentTabHost. Или используйте ViewPager и индикатор с вкладками (например, TabPageIndicator с IconPagerAdapter от the ViewPagerIndicator library).

+0

В FragmentTabHost-API он говорит: «Вы обычно не использовать это, вместо используя вкладки панели действий. " Является ли это плохой практикой? У вас есть пример того, где успешно реализован FragmentTabHost? :) – epoxy

+0

@epoxy: «Является ли эта плохая практика каким-то образом?» - этот комментарий в документации устарел. Я подал [вопрос об этом] (https://code.google.com/p/android/issues/detail?id=73538) около 9 месяцев назад. «У вас есть пример того, где FragmentTabHost был успешно реализован?» - нет, поскольку большинство пользователей используют «ViewPager» и индикатор с вкладками. – CommonsWare

1

Вы можете использовать два новых класса для создания вкладок SlidingTabLayout, SlidingTabStrip, вы должны пройти ViewPager с некоторыми фрагментами этого класса, для пользовательского представления на каждой вкладке использования setCustomTabView. вы можете найти примеры с Google.

EDIT:

для пользовательского макета (шахтные содержат как изображение и текст) Настройка вкладка, как это:

slideTab = (SlidingTabLayout) findViewById(R.id.getbook_sliding_tabs); 
slideTab.setDistributeEvenly(true); 
slideTab.setCustomTabView(R.layout.cat_tab_layout, R.id.main_tab_title); 

cat_tab_layout:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:padding="6dip" 
    android:background="@drawable/cat_tab_background"> 

    <ImageView 
     android:id="@+id/main_tab_image" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/cat_all_book_icon" 
     android:layout_centerHorizontal="true"/> 

    <TextView 
     android:id="@+id/main_tab_title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="tab1" 
     android:textColor="@color/medium_gray" 
     android:layout_below="@id/main_tab_image" 
     android:layout_centerHorizontal="true"/> 

</RelativeLayout> 

сделать некоторые изменения в populateTabStrip() форме SlidingTabLayout класс:

adapter = (GetBookFragmentPagesAdapter)mViewPager.getAdapter();// get your view pager adapter 
for (int i = 0; i < adapter.getCount(); i++) { 
.... 
if (mTabViewLayoutId != 0) { 
    // If there is a custom tab view layout id set, try and inflate it 
    tabView = LayoutInflater.from(getContext()).inflate(mTabViewLayoutId, mTabStrip, false); 
    tabTitleView = (TextView) tabView.findViewById(mTabViewTextViewId); 

    ImageView tabImage = (ImageView)tabView.findViewById(R.id.main_tab_image); 
    tabImage.setImageResource(adapter.getImages(i)); // getImage() return image id for each tab 

} 

....

, то вы будете в конечном итоге с чем-то вроде этого:

enter image description here

+0

Позволяет ли SlidingTabLayout изменять вкладки с текста на значки? Я не могу найти пример, где это было сделано. Если это возможно, это решение является интересным. – epoxy

+0

@epoxy: уверен, что вы можете поместить любой пользовательский макет, я сделал это в своем приложении :), см. Мой отредактированный ответ. – mehdok

Смежные вопросы