2012-07-26 33 views
2

我已经阅读了一些实现应用页面底部标签的代码。代码里面没有弃用的方法/类,对我来说这是一个实现标签的非常简单和干净的方法。在android中实现选项卡的最佳方式?

但我听说实现标签的新方法是使用片段。

那么,哪一个更好?为什么?

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" > 

    <TabHost 
     android:id="@+id/edit_item_tab_host" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" > 

     <TabWidget 
      android:id="@android:id/tabs" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="bottom" /> 


      <FrameLayout 
       android:id="@android:id/tabcontent" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:paddingTop="65px" > 

      <LinearLayout 
       android:id="@+id/edit_item_date_tab" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:orientation="vertical" 
       android:padding="5px" > 

       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="date" 
        android:textStyle="bold" /> 

      </LinearLayout> 

      <LinearLayout 
       android:id="@+id/edit_item_geocontext_tab" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:orientation="vertical" 
       android:padding="5px" > 

       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="lieu" 
        android:textStyle="bold" /> 
      </LinearLayout> 

      <LinearLayout 
       android:id="@+id/edit_item_text_tab" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:orientation="vertical" 
       android:padding="5px" > 
      </LinearLayout> 
     </FrameLayout> 
    </TabHost> 

</LinearLayout> 

MainActivity类:

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TabHost; 
import android.widget.TabHost.TabSpec; 

public class MainActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 



     TabHost tab_host = (TabHost) findViewById(R.id.edit_item_tab_host); 
     // don't forget this setup before adding tabs from a tabhost using a xml view or you'll get an nullpointer exception 
     tab_host.setup(); 

     TabSpec ts1 = tab_host.newTabSpec("TAB_DATE"); 
     ts1.setIndicator("tab1"); 
     ts1.setContent(R.id.edit_item_date_tab); 
     tab_host.addTab(ts1); 

     TabSpec ts2 = tab_host.newTabSpec("TAB_GEO"); 
     ts2.setIndicator("tab2"); 
     ts2.setContent(R.id.edit_item_geocontext_tab); 
     tab_host.addTab(ts2); 

     TabSpec ts3 = tab_host.newTabSpec("TAB_TEXT"); 
     ts3.setIndicator("tab3"); 
     ts3.setContent(R.id.edit_item_text_tab); 
     tab_host.addTab(ts3); 

     tab_host.setCurrentTab(0); 




     } 
} 

回答

2

A TabHost不能包含片段(好吧,它可以,但它真的很棘手)所以我不建议今天使用它。

片段要走的路,如果你想要实现的新标签机制(被整合到“新” ActionBar在Android 3.0中提供),同时继续支持旧的Android版本有ActionBarSherlock,一个开源项目,该项目通过单一API便利在所有Android版本中使用操作栏设计模式。

现在很多流行的应用程序使用这个项目(包括谷歌应用程序),所以它值得一看。

+0

但是,actionBar总是在nexus 5设备中返回null 那么我该怎么办 – 2014-11-10 07:57:15

0

甲片段表示行为或在 活动的用户界面的一部分。

The android developer guide.

你的问题似乎很奇怪的措辞一点。您询问Tabs位于页面的底部,但询问您是否应该使用Fragments。这是两个不同的主题。

是的,你应该使用Fragments,这是android正在采取的路线,将来还会继续。

Tabs在屏幕底部或顶部是设计决定。取决于什么会更舒适的用户体验,与Fragments真的没有太大的关系。

+0

雅,重点不在于标签的位置。 因此,我发布的代码不应该被认为是android开发人员实现制表符的正确方法吗? – 2012-07-26 18:55:10

+0

我编辑了我的问题 – 2012-07-26 18:56:58

0

Google推出了一个名为BottomNavigationView的新视图,该视图是Android应用的标准底部导航栏。按照指导原则,您可以添加最多5个(标准)项目,并且非常简单,就像android的NavigationView一样。

请确实访问Component Guidelines,了解更多关于设计。

相关问题