首页 > 代码库 > Android实现网易新闻客户端效果

Android实现网易新闻客户端效果

tabhost_tabwidget.xml

[html] view plaincopyprint?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <TabHost xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:id="@android:id/tabhost"  
  4.     android:layout_width="match_parent"  
  5.     android:layout_height="match_parent" >  
  6.   
  7.     <LinearLayout  
  8.         android:layout_width="match_parent"  
  9.         android:layout_height="match_parent"  
  10.         android:orientation="vertical" >  
  11.   
  12.         <TabWidget  
  13.             android:id="@android:id/tabs"  
  14.             android:layout_width="match_parent"  
  15.             android:layout_height="wrap_content"  
  16.             android:orientation="horizontal" />  
  17.   
  18.         <FrameLayout  
  19.             android:id="@android:id/tabcontent"  
  20.             android:layout_width="match_parent"  
  21.             android:layout_height="match_parent"/>  
  22.       <!--   <FrameLayout   
  23.             android:id="@+id/real_tabcontent"  
  24.             android:layout_width="match_parent"  
  25.             android:layout_height="0dp"  
  26.             android:layout_weight="0"/> -->  
  27.     </LinearLayout>  
  28.   
  29. </TabHost>  


[java] view plaincopyprint?
  1. package com.jackie;  
  2.   
  3. import android.app.Activity;  
  4. import android.app.Fragment;  
  5. import android.app.FragmentTransaction;  
  6. import android.content.Context;  
  7. import android.os.Bundle;  
  8. import android.text.TextUtils;  
  9. import android.view.View;  
  10. import android.widget.ImageView;  
  11. import android.widget.TabHost;  
  12. import android.widget.TabHost.OnTabChangeListener;  
  13. import android.widget.TabWidget;  
  14.   
  15. import com.jackie.R;  
  16. /* 
  17.  * ____________ 
  18.  * |          | 
  19.  * |          | 
  20.  * |tabcontent| 
  21.  * |显示标签页  | 
  22.  * |__________|  区域是由tabhost控制, 显示内容的区域为tabcontent 
  23.  * tab标签 组合 fragment 
  24.  */  
  25. public class TestTabWidget extends Activity {  
  26.     TabHost tabHost;  
  27.     Fragment fragment;  
  28.     @Override  
  29.     protected void onCreate(Bundle savedInstanceState) {  
  30.         super.onCreate(savedInstanceState);  
  31.         setContentView(R.layout.tabhost_tabwidget);  
  32.         tabHost = (TabHost) findViewById(android.R.id.tabhost);  
  33.         tabHost.setup();  
  34.         tabHost.setOnTabChangedListener(new OnTabChangeListener() {  
  35.               
  36.             @Override  
  37.             public void onTabChanged(String tabId) {  
  38.                 System.out.println("current tabid=" + tabId);  
  39.                 FragmentTransaction ft = getFragmentManager().beginTransaction();  
  40.                 if (TextUtils.equals("first", tabId)) {  
  41.                     //add/replace fragment first  
  42.                     fragmentnew Fragment1();  
  43.                     System.out.println("load frament1");  
  44.                 } else if (TextUtils.equals("second", tabId)) {  
  45.                     //add/replace fragment second  
  46.                     fragment new Fragment2();  
  47.                     System.out.println("load frament2");  
  48.                 } else if (TextUtils.equals("third", tabId)) {  
  49.                     //add/replace fragment third  
  50.                     fragment new Fragment3();  
  51.                     System.out.println("load frament3");  
  52.                 }  
  53.                 ft.replace(android.R.id.tabcontent, fragment, "fragment");  
  54.                 ft.commit();  
  55.             }  
  56.         });  
  57.         tabHost.addTab(tabHost.newTabSpec("first").setIndicator("First")  
  58.                 .setContent(new DummyTabFactory(this)));  
  59.         tabHost.addTab(tabHost.newTabSpec("second").setIndicator("Second")//setIndicator 设置标签样式  
  60.                 .setContent(new DummyTabFactory(this))); //setContent 点击标签后触发  
  61.         tabHost.addTab(tabHost.newTabSpec("third").setIndicator("Third")  
  62.                 .setContent(new DummyTabFactory(this)));  
  63.     }  
  64.       
  65.       
  66.     static class DummyTabFactory implements TabHost.TabContentFactory {  
  67.         private Context context;  
  68.         public DummyTabFactory(Context ctx) {  
  69.             this.context = ctx;  
  70.         }  
  71.         @Override  
  72.         public View createTabContent(String tag) {//创建宽高均为0的view   
  73.             View v = new ImageView(context);  
  74.             v.setMinimumWidth(0);  
  75.             v.setMinimumHeight(0);  
  76.             return v;  
  77.         }  
  78.           
  79.     }  
  80. }  

效果
      

当然,现在还只能通过点击上面的Tab来切换相应的Fragment,真正的网易菜单还可以左右滑动来切换的,这时候只需要为每个Fragment添加滑动事件实现相应的逻辑即可。

Android实现网易新闻客户端效果