2016-02-01 3 views
0

Я пытаюсь получить аналогичный макет вкладки для этого, где есть день недели в верхней части и день месяца в нижней части вкладки. LayoutДобавить два текстовых элемента в TabView

Мне просто нужны некоторые идеи о том, как это сделать. Хотя я добавил два вкладки TextViews на вкладке, но не смог заставить их работать. Вот что я получил до сих пор.

private Toolbar toolbar; 
 

 
    @Override 
 
    protected void onCreate(Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 
     setContentView(R.layout.activity_main); 
 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
 
     setSupportActionBar(toolbar); 
 

 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
 
       this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
 
     drawer.setDrawerListener(toggle); 
 
     toggle.syncState(); 
 

 
     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
 
     navigationView.setNavigationItemSelectedListener(this); 
 

 
     toolbar = (Toolbar) findViewById(R.id.toolbar); 
 
     setSupportActionBar(toolbar); 
 
     toolbar.setElevation(0); 
 

 
     ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager); 
 
     setupViewPager(viewPager); 
 

 
     TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); 
 
     tabLayout.setupWithViewPager(viewPager); 
 
     setupNumTab(); 
 
    } 
 
    private void setupViewPager(ViewPager viewPager) { 
 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
 
     adapter.addFrag(new OneFragment(), "ONE", 1); 
 
     adapter.addFrag(new TwoFragment(), "TWO", 2); 
 
     adapter.addFrag(new ThreeFragment(), "THREE", 3); 
 
     adapter.addFrag(new FourFragment(), "FOUR", 4); 
 
     adapter.addFrag(new FiveFragment(), "FIVE", 5); 
 
     viewPager.setAdapter(adapter); 
 
    } 
 

 
    public void setupNumTab() { 
 
     LinearLayout layout = new LinearLayout(this); 
 
     layout.setOrientation(LinearLayout.VERTICAL); 
 
     TextView nameView = new TextView(this); 
 
     nameView.setText("TEST"); 
 
     layout.addView(nameView); 
 
     TextView anotherView = new TextView(this); 
 
     anotherView.setText("12"); 
 
     layout.addView(anotherView); 
 
     setContentView(layout); 
 
    }

+0

использовать пользовательскую вкладку – Elltz

ответ

0

Один из подходов заключается в использовании TabLayout и для каждого элемента, используйте customView.

А затем прикрепите его с помощью viewPager.

Если у вас есть много вкладок, чтобы показать, пойти на fragmentStatePagerAdapter или если у вас есть только 2 или 3 вкладки, используйте fragmentPagerAdapter. Вы можете прочитать о них больше.

ли что-то вроде этого ...

Допустим, это ваш один mainActivity макет XML.

<android.support.design.widget.TabLayout 
    android:id="@+id/tab_layout" 
    android:layout_width="match_parent" 
    android:layout_height="61.8dp" 
    android:background="#06acef" 
    android:elevation="0dp" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark" 
    app:elevation="0dp" 
    app:tabGravity="center" 
    app:tabIndicatorColor="@color/white" 
    app:tabMode="fixed" 
    app:tabPaddingEnd="-1dp" 
    app:tabPaddingStart="-1dp" 
    android:fillViewport="false"> 
</android.support.design.widget.TabLayout> 

    <ViewPager 
     android:id="@+id/view_pager" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 
    </ViewPager> 

Их родители могут быть LinearLayout или сказать RelativeLayout. Это зависит от вас, как вы это делаете.

Теперь создайте еще один макет для своей вкладки. говорят tab_layout.xml

<TextView 
    android:id="@+id/text1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 
<TextView 
    android:layout_below="@id/text2" 
    android:id="@+id/show_time_tab_date" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 

Теперь в вашей основной деятельности ..

внутри OnCreate() обратного вызова

ViewPageAdapter viewPageAdapter = new ViewPageAdapter(getSupportFragmentManager(), getApplicationContext(),this); 

     mViewPager.setAdapter(viewPageAdapter); 
     mTabLayout.setupWithViewPager(mViewPager); 

     // bind each tab data here 
     for (int i = 0; i < range; i++) { 
      TabLayout.Tab tab = mTabLayout.getTabAt(i); 
      tab.setCustomView(viewPageAdapter.getTabView(i)); 
     } 

Теперь ваш ViewPageAdapter

public class ViewPageAdapter extends FragmentStatePagerAdapter{ 
    @Override 
    public Fragment getItem(int position) { 

     return YoutFragment.newInstance(); 
    } 

    @Override 
    public int getCount() { 
     return 10; 
    } 

    public View getTabView(int position) { 
     LayoutInflater layoutInflater = LayoutInflater.from(mContext); 
     View tabView = layoutInflater.inflate(R.layout.your_custom_tab_layout, null, false); 
     TextView text1 = (TextView) tabView.findViewById(R.id.text1); 
     TextView text2 = (TextView) tabView.findViewById(R.id.text2); 
     text1.setText("text1"); 
     text2.setText("dateStr[1]"); 
     return tabView; 
    } 
} 

И наконец, вы r для каждого viewpagerAdapter, который вызывается внутри getItem() callback.

public class YourFragment extends Fragment{ 
     public static YourFragment newInstance(){ 
      return new YourFragment() 
     } 
} 
+0

Вау, это было так много помощи, но я получаю некоторые ошибки. Сначала я настраиваю свой код так же, как и в вашем ответе, но теперь я получаю сообщение об ошибке «java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0», когда TabLayout.Tab tab = mTabLayout.getTabAt (i); называется. –

+0

Yhay migth из-за размера вашего arraylist в адаптере viewpager. – Ritesh

+0

ViewPager создает количество возвращенных вами страниц в обратном вызове getCount(), а затем готовит его элементы из обратного вызова getItem(). Используйте отладчик или что-то или проверьте размер массива, который вы используете. – Ritesh

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