tabhost练习,剥离自“去哪儿”

如下图(喜欢这种干净整洁):

1.MainActivity.java

  1 package com.example.tab1;
  2 
  3 import com.example.framgent.Fav_Fragment;
  4 import com.example.framgent.Index_Fragment;
  5 import com.example.framgent.Order_Fragment;
  6 import com.example.framgent.Setting_Fragment;
  7 import com.example.framgent.Uc_Fragment;
  8 import com.example.util.DummyTabContent;
  9 
 10 import android.os.Bundle;
 11 import android.support.v4.app.FragmentActivity;
 12 import android.view.LayoutInflater;
 13 import android.widget.ImageView;
 14 import android.widget.LinearLayout;
 15 import android.widget.TabHost;
 16 import android.widget.TabWidget;
 17 import android.widget.TextView;
 18 
 19 public class MainActivity extends FragmentActivity {
 20 
 21     TabHost tabHost;
 22     TabWidget tabWidget; 
 23     LinearLayout bottom_layout;
 24     int CURRENT_TAB = 0;    //设置常量
 25     Fav_Fragment homeFragment;
 26     Order_Fragment wallFragment;
 27     Uc_Fragment messageFragment;
 28     Setting_Fragment meFragment;
 29     Index_Fragment index_Fragment;
 30     android.support.v4.app.FragmentTransaction ft;
 31     LinearLayout tabIndicator1,tabIndicator2,tabIndicator3,tabIndicator4,tabIndicator5;
 32 
 33     @Override
 34     public void onCreate(Bundle savedInstanceState) {
 35         super.onCreate(savedInstanceState);
 36         setContentView(R.layout.activity_main);
 37         findTabView();
 38         tabHost.setup();
 39         
 40         /** 监听*/
 41         TabHost.OnTabChangeListener tabChangeListener = new TabHost.OnTabChangeListener(){
 42             @Override
 43             public void onTabChanged(String tabId) {
 44                 
 45                 /**碎片管理*/
 46                 android.support.v4.app.FragmentManager fm =  getSupportFragmentManager();
 47                 homeFragment = (Fav_Fragment) fm.findFragmentByTag("home");
 48                 wallFragment = (Order_Fragment) fm.findFragmentByTag("wall");
 49                 messageFragment = (Uc_Fragment) fm.findFragmentByTag("message");
 50                 meFragment = (Setting_Fragment) fm.findFragmentByTag("me");
 51                 index_Fragment    =(Index_Fragment) fm.findFragmentByTag("index");
 52                 ft = fm.beginTransaction();
 53                 
 54                 /** 如果存在Detaches掉 */
 55                 if(homeFragment!=null)
 56                     ft.detach(homeFragment);
 57                 
 58                 /** 如果存在Detaches掉 */
 59                 if(wallFragment!=null)
 60                     ft.detach(wallFragment);
 61                 
 62                 /** 如果存在Detaches掉 */
 63                 if(messageFragment!=null)
 64                     ft.detach(messageFragment);
 65                 
 66                 /** 如果存在Detaches掉 */
 67                 if(meFragment!=null)
 68                     ft.detach(meFragment);
 69                 
 70                 if(index_Fragment!=null)
 71                     ft.detach(index_Fragment);
 72                 
 73                 /** 如果当前选项卡是home */
 74                 if(tabId.equalsIgnoreCase("home")){
 75                     isTabHome();
 76                     CURRENT_TAB = 1;
 77                     
 78                 /** 如果当前选项卡是wall */
 79                 }else if(tabId.equalsIgnoreCase("wall")){    
 80                     isTabWall();
 81                     CURRENT_TAB = 2;
 82                     
 83                 /** 如果当前选项卡是message */
 84                 }else if(tabId.equalsIgnoreCase("index")){
 85                     isTabIndex();
 86                     CURRENT_TAB    =    5;
 87                 }else if(tabId.equalsIgnoreCase("message")){    
 88                     isTabMessage();
 89                     CURRENT_TAB = 3;
 90                     
 91                 /** 如果当前选项卡是me */
 92                 }else if(tabId.equalsIgnoreCase("me")){    
 93                     isTabMe();
 94                     CURRENT_TAB = 4;
 95                 }else{
 96                     switch (CURRENT_TAB) {
 97                     case 1:
 98                         isTabHome();
 99                         break;
100                     case 2:
101                         isTabWall();
102                         break;
103                     case 3:
104                         isTabMessage();
105                         break;
106                     case 4:
107                         isTabMe();
108                         break;
109                     case 5:
110                         isTabIndex();
111                         break;
112                     default:
113                         isTabHome();
114                         break;
115                     }        
116                     
117                 }
118                     ft.commit();    
119             }
120             
121         };
122         //设置初始选项卡  
123         tabHost.setCurrentTab(2);
124         tabHost.setOnTabChangedListener(tabChangeListener);
125         initTab();
126          /**  设置初始化界面  */
127         tabHost.setCurrentTab(2);
128 
129     }
130     
131     //判断当前
132     public void isTabHome(){
133         
134         if(homeFragment==null){        
135             ft.add(R.id.realtabcontent,new Fav_Fragment(), "home");                        
136         }else{
137             ft.attach(homeFragment);                        
138         }
139     }
140     
141     public void isTabWall(){
142         
143         if(wallFragment==null){
144             ft.add(R.id.realtabcontent,new Order_Fragment(), "wall");                        
145         }else{
146             ft.attach(wallFragment);                        
147         }
148     }
149     
150     public void isTabMessage(){
151         
152         if(messageFragment==null){
153             ft.add(R.id.realtabcontent,new Uc_Fragment(), "message");                        
154         }else{
155             ft.attach(messageFragment);                        
156         }
157     }
158     
159     public void isTabMe(){
160         
161         if(meFragment==null){
162             ft.add(R.id.realtabcontent,new Setting_Fragment(), "me");                        
163         }else{
164             ft.attach(meFragment);    
165         }
166     }
167     public void isTabIndex(){
168         if(index_Fragment==null){
169             ft.add(R.id.realtabcontent,new Index_Fragment(), "index");                        
170         }else{
171             ft.attach(index_Fragment);    
172         }
173     }
174     /**
175      * 找到Tabhost布局
176      */
177     public void findTabView(){
178         
179          tabHost = (TabHost) findViewById(android.R.id.tabhost);
180          tabWidget = (TabWidget) findViewById(android.R.id.tabs);
181          LinearLayout layout = (LinearLayout)tabHost.getChildAt(0);
182          TabWidget tw = (TabWidget)layout.getChildAt(1);
183          
184          tabIndicator1 = (LinearLayout) LayoutInflater.from(this)
185                  .inflate(R.layout.tab_indicator, tw, false);
186          TextView tvTab1 = (TextView)tabIndicator1.getChildAt(1);
187          ImageView ivTab1 = (ImageView)tabIndicator1.getChildAt(0);
188          ivTab1.setBackgroundResource(R.drawable.selector_mood_home);
189          tvTab1.setText(R.string.buttom_home);
190          
191          tabIndicator2 = (LinearLayout) LayoutInflater.from(this)
192                  .inflate(R.layout.tab_indicator, tw, false);
193          TextView tvTab2 = (TextView)tabIndicator2.getChildAt(1);
194          ImageView ivTab2 = (ImageView)tabIndicator2.getChildAt(0);
195          ivTab2.setBackgroundResource(R.drawable.selector_mood_wall);
196          tvTab2.setText(R.string.buttom_wall);
197          
198          tabIndicator3 = (LinearLayout) LayoutInflater.from(this)
199                  .inflate(R.layout.tab_indicator, tw, false);
200          TextView tvTab3 = (TextView)tabIndicator3.getChildAt(1);
201          ImageView ivTab3 = (ImageView)tabIndicator3.getChildAt(0);
202          ivTab3.setBackgroundResource(R.drawable.selector_mood_photograph);
203          tvTab3.setText(R.string.buttom_camera);
204           
205          tabIndicator4 = (LinearLayout) LayoutInflater.from(this)
206                  .inflate(R.layout.tab_indicator, tw, false);
207          TextView tvTab4 = (TextView)tabIndicator4.getChildAt(1);
208          ImageView ivTab4 = (ImageView)tabIndicator4.getChildAt(0);
209          ivTab4.setBackgroundResource(R.drawable.selector_mood_message);
210          tvTab4.setText(R.string.buttom_message);
211          
212          tabIndicator5 = (LinearLayout) LayoutInflater.from(this)
213                  .inflate(R.layout.tab_indicator, tw, false);
214          TextView tvTab5 = (TextView)tabIndicator5.getChildAt(1);
215          ImageView ivTab5 = (ImageView)tabIndicator5.getChildAt(0);
216          ivTab5.setBackgroundResource(R.drawable.selector_mood_my_wall);
217          tvTab5.setText(R.string.buttom_me);
218     }
219     
220     /** 
221      * 初始化选项卡
222      * 
223      * */
224     public void initTab(){
225         
226         TabHost.TabSpec tSpecHome = tabHost.newTabSpec("home");
227         tSpecHome.setIndicator(tabIndicator1);        
228         tSpecHome.setContent(new DummyTabContent(getBaseContext()));
229         tabHost.addTab(tSpecHome);
230         
231         TabHost.TabSpec tSpecWall = tabHost.newTabSpec("wall");
232         tSpecWall.setIndicator(tabIndicator2);        
233         tSpecWall.setContent(new DummyTabContent(getBaseContext()));
234         tabHost.addTab(tSpecWall);
235         
236         TabHost.TabSpec tSpecCamera = tabHost.newTabSpec("index");
237         tSpecCamera.setIndicator(tabIndicator3);        
238         tSpecCamera.setContent(new DummyTabContent(getBaseContext()));
239         tabHost.addTab(tSpecCamera);
240         
241        /* //拍照按钮监听事件,弹出dialog
242         tabIndicator3.setOnClickListener(new OnClickListener() {
243             @Override
244             public void onClick(View v) {
245                 
246                 Dialog choose = new Dialog(MainActivity.this,R.style.draw_dialog);
247                 choose.setContentView(R.layout.camera_dialog);
248                 // 设置背景模糊参数
249                 WindowManager.LayoutParams winlp = choose.getWindow()
250                         .getAttributes();
251                 winlp.alpha = 0.9f; // 0.0-1.0
252                 choose.getWindow().setAttributes(winlp);
253                 choose.show();// 显示弹出框
254             }
255         });*/
256         
257         TabHost.TabSpec tSpecMessage = tabHost.newTabSpec("message");
258         tSpecMessage.setIndicator(tabIndicator4);      
259         tSpecMessage.setContent(new DummyTabContent(getBaseContext()));
260         tabHost.addTab(tSpecMessage);
261         
262         TabHost.TabSpec tSpecMe = tabHost.newTabSpec("me");
263         tSpecMe.setIndicator(tabIndicator5);        
264         tSpecMe.setContent(new DummyTabContent(getBaseContext()));
265         tabHost.addTab(tSpecMe);
266         
267     }
268     
269 }

如上图所示,总共5个framgent及其对应的5个布局文件,下面给出示例代码,复杂漂亮的界面待你实现。

2.Fav_Fragment.java

 1 package com.example.framgent;
 2 
 3 
 4 import com.example.tab1.R;
 5 
 6 import android.os.Bundle;
 7 import android.support.v4.app.Fragment;
 8 import android.view.LayoutInflater;
 9 import android.view.View;
10 import android.view.ViewGroup;
11 import android.widget.TextView;
12 
13 public class Fav_Fragment extends Fragment{
14 
15     @Override
16     public void onCreate(Bundle savedInstanceState) {
17         // TODO Auto-generated method stub
18         super.onCreate(savedInstanceState);
19     }
20 
21     @Override
22     public View onCreateView(LayoutInflater inflater, ViewGroup container,
23             Bundle savedInstanceState) {
24         View view            = inflater.inflate(R.layout.fav, container, false);
25         return view;
26     }
27 
28 }

3.fav.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent" 
 5     android:background="@android:color/white"
 6     android:orientation="vertical">
 7           <TextView
 8               android:layout_width="wrap_content"
 9               android:layout_height="wrap_content"
10               android:padding="8dp"
11               android:text="酒店收藏"
12               android:textColor="#000"
13               android:textSize="17sp" />
14 
15 
16 </LinearLayout>

还有一些细节美化部分,具体的请看代码吧。

链接: http://pan.baidu.com/s/1hqms1Qc 密码: z9m7

原文地址:https://www.cnblogs.com/ning1121/p/4220247.html