zoukankan      html  css  js  c++  java
  • ActivityGroup 实现tabHost

    引用:http://uuubd.iteye.com/blog/1487343

    原文地址:http://blog.csdn.net/hellogv/article/details/6057174 

         
         很多客户端软件和浏览器软件都喜欢用Tab分页标签来搭建界面框架。读者也许会马上想到使用TabHost 与 TabActivity的组合,其实最常用的不是它们,而是由GridView与ActivityGroup的组合。每当用户在GridView选中一项,ActivityGroup就把该项对应的Activity的Window作为View添加到ActivityGroup所指定的容器(LinearLayout)中。 

    效果图: 

     


    ImageAdapter是本实例的关键之一,它继承于BaseAdapter,并加入一些自定义的方法。ImageAdapter的源码如下: 
    Java代码  收藏代码
    1. package org.hwq.activitygroup.main;  
    2.   
    3. import android.content.Context;  
    4. import android.graphics.Color;  
    5. import android.view.View;  
    6. import android.view.ViewGroup;  
    7. import android.widget.BaseAdapter;  
    8. import android.widget.GridView;  
    9. import android.widget.ImageView;  
    10.   
    11. public class ImageAdapter extends BaseAdapter {  
    12.     private Context context;  
    13.     private ImageView[] img;  
    14.       
    15.     ImageAdapter(Context context,int weight,int height,int[] img){  
    16.         this.context = context;  
    17.         this.img = new ImageView[img.length];  
    18.         for(int i=0;i<img.length;i++){  
    19.             this.img[i] = new ImageView(context);  
    20.             this.img[i].setLayoutParams(new GridView.LayoutParams(weight,height));  
    21.             this.img[i].setAdjustViewBounds(false);  
    22.             this.img[i].setPadding(2222);  
    23.             this.img[i].setImageResource(img[i]);  
    24.         }  
    25.     }  
    26.       
    27.     public void focus(int id){  
    28.         for(int i=0;i<img.length;i++){  
    29.             if(i == id){  
    30.                 img[i].setBackgroundColor(Color.YELLOW);  
    31.             }else{  
    32.                 img[i].setBackgroundColor(Color.TRANSPARENT);  
    33.             }  
    34.         }  
    35.     }  
    36.   
    37.     public int getCount() {  
    38.         return img.length;  
    39.     }  
    40.   
    41.     public Object getItem(int position) {  
    42.         return position;  
    43.     }  
    44.   
    45.     public long getItemId(int position) {  
    46.         return position;  
    47.     }  
    48.   
    49.     public View getView(int position, View convertView, ViewGroup parent) {  
    50.         ImageView imageview;  
    51.         if(convertView == null){  
    52.             imageview = img[position];  
    53.         }else{  
    54.             imageview = (ImageView) convertView;  
    55.         }  
    56.         return imageview;  
    57.     }  
    58.   
    59. }  

    SetFocus(int)这个方法是个关键点,即实现选中的效果。例如有ABCD4个Item,其中C被选中了,那么除C以外的Item都被设置为未被选中的样式,而C则设置为选中的样式。 

    接下来就开始写主Activity,主Activity包含GridView控件,有2点是需要注意一下的。 

        SetNumColumns():必须要使用setNumColumns来设置列数,因为这个GridView只有一行,即所有的Item都在同一行,Item数量即为列数。 
        setSelector(new ColorDrawable(Color.TRANSPARENT)):把系统默认选中的背景色透明化,因为我们已经在BaseAdapter中加入了SetFocus()来改变选中的样式。 
    ActivityGroupActivity.java 
    Java代码  收藏代码
    1. package org.hwq.activitygroup.main;  
    2.   
    3. import android.app.ActivityGroup;  
    4. import android.content.Intent;  
    5. import android.graphics.Color;  
    6. import android.graphics.drawable.ColorDrawable;  
    7. import android.os.Bundle;  
    8. import android.view.Gravity;  
    9. import android.view.View;  
    10. import android.view.ViewGroup.LayoutParams;  
    11. import android.view.Window;  
    12. import android.widget.AdapterView;  
    13. import android.widget.GridView;  
    14. import android.widget.LinearLayout;  
    15.   
    16. public class ActivityGroupActivity extends ActivityGroup {  
    17.     private GridView gridview;  
    18.     private LinearLayout layout;  
    19.     private int[] img;  
    20.     private ImageAdapter adapter;  
    21.     @Override  
    22.     public void onCreate(Bundle savedInstanceState) {  
    23.         super.onCreate(savedInstanceState);  
    24.         setContentView(R.layout.main);  
    25.         img = new int[]{R.drawable.img1,R.drawable.img2,R.drawable.img3,R.drawable.img4};  
    26.         gridview = (GridView) findViewById(R.id.gridView1);  
    27.         layout = (LinearLayout) findViewById(R.id.linearlayout);  
    28.         gridview.setNumColumns(img.length);  
    29.         gridview.setSelector(new ColorDrawable(Color.TRANSPARENT));  
    30.         gridview.setGravity(Gravity.CENTER);  
    31.         gridview.setVerticalSpacing(0);  
    32.         int weight = getWindowManager().getDefaultDisplay().getWidth()/img.length;  
    33.         adapter = new ImageAdapter(this,weight,48,img);  
    34.         switchActivity(0);  
    35.         gridview.setAdapter(adapter);  
    36.         gridview.setOnItemClickListener(new GridviewItemListener());  
    37.     }  
    38.     class GridviewItemListener implements GridView.OnItemClickListener{  
    39.         public void onItemClick(AdapterView<?> parent, View view, int position,  
    40.                 long id) {  
    41.             switchActivity(position);  
    42.         }  
    43.     }  
    44.     public void switchActivity(int id){  
    45.         adapter.focus(id);  
    46.         layout.removeAllViews();  
    47.         Intent intent = null;  
    48.         if(id == 0){  
    49.             intent = new Intent(this,ActivityA.class);  
    50.         }else if(id == 1){  
    51.             intent = new Intent(this,ActivityB.class);  
    52.         }else if(id == 2){  
    53.             intent = new Intent(this,ActivityC.class);  
    54.         }else if(id == 3){  
    55.             intent = new Intent(this,ActivityD.class);  
    56.         }  
    57.         intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  
    58.         Window group = getLocalActivityManager().startActivity("", intent);  
    59.         layout.addView(group.getDecorView(),LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);  
    60.     }  
    61. }  


    main.xml 
    Java代码  收藏代码
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     android:layout_width="fill_parent"  
    4.     android:layout_height="fill_parent"  
    5.     android:orientation="vertical" >  
    6.   
    7.     <GridView  
    8.         android:id="@+id/gridView1"  
    9.         android:layout_width="fill_parent"  
    10.         android:layout_height="wrap_content"  
    11.         android:numColumns="3" >  
    12.     </GridView>  
    13.     <LinearLayout  
    14.         android:id="@+id/linearlayout"  
    15.         android:layout_width="fill_parent"  
    16.         android:layout_height="match_parent"  
    17.         >  
    18.     </LinearLayout>  
    19. </LinearLayout>  


    demo源码:
  • 相关阅读:
    第十九题
    第十八题
    第十六题
    win7/64+pip+pygame=pygame安装
    win7/64+python3.4+pyinstall3+tkinter+smtp=图形界面群发邮件客户端
    字典的.get方法
    列表推导式
    第一张
    多线程服务端简易版基于TCP协议的传输
    线程中的锁的相关问题
  • 原文地址:https://www.cnblogs.com/sode/p/2717707.html
Copyright © 2011-2022 走看看