Android 입문 Activity Group+GridView 탭 탭 구현 방법

안 드 로 이 드 프로그램 에서 많은 클 라 이언 트 소프트웨어 와 브 라 우 저 소프트웨어 는 Tab 페이지 라벨 로 인터페이스 프레임 워 크 를 구축 하 는 것 을 좋아한다.독자 들 은 TabHost 와 TabActivity 의 조합 을 사용 하 는 것 을 바로 생각 할 수 있 습 니 다.사실은 가장 많이 사용 하 는 것 은 그들 이 아니 라 GridView 와 Activity Group 의 조합 입 니 다.사용자 가 GridView 에서 하 나 를 선택 할 때마다 Activity Group 은 해당 하 는 Activity 의 Window 를 View 로 Activity Group 이 지정 한 용기(LinearLayout)에 추가 합 니 다.
먼저 본 사례 가 실 행 된 효과 도 를 다음 과 같이 붙 입 니 다.

ImageAdapter 는 이 인 스 턴 스 의 관건 중 하나 로 BaseAdapter 에 계승 되 고 사용자 정의 방법 을 추가 합 니 다.ImageAdapter 의 원본 코드 는 다음 과 같 습 니 다.

package com.ActivityGroupDemo;

import android.content.Context;
import android.graphics.drawable.ColorDrawable;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
/**
 * 
 * @author GV
 *
 */
public class ImageAdapter extends BaseAdapter {
 private Context mContext; 
 private ImageView[] imgItems;
 private int selResId;
  public ImageAdapter(Context c,int[] picIds,int width,int height,int selResId) { 
    mContext = c; 
    this.selResId=selResId;
    imgItems=new ImageView[picIds.length];
    for(int i=0;i<picIds.length;i++)
    {
     imgItems[i] = new ImageView(mContext); 
     imgItems[i].setLayoutParams(new GridView.LayoutParams(width, height));//  ImageView   
     imgItems[i].setAdjustViewBounds(false); 
     //imgItems[i].setScaleType(ImageView.ScaleType.CENTER_CROP); 
     imgItems[i].setPadding(2, 2, 2, 2); 
     imgItems[i].setImageResource(picIds[i]); 
    }
  } 
  public int getCount() { 
    return imgItems.length; 
  } 
 
  public Object getItem(int position) { 
    return position; 
  } 
 
  public long getItemId(int position) { 
    return position; 
  } 
 
  /** 
   *         
   */ 
  public void SetFocus(int index) 
  { 
    for(int i=0;i<imgItems.length;i++) 
    { 
      if(i!=index) 
      { 
       imgItems[i].setBackgroundResource(0);//        
      } 
    } 
    imgItems[index].setBackgroundResource(selResId);//       
  } 
  
  public View getView(int position, View convertView, ViewGroup parent) { 
    ImageView imageView; 
    if (convertView == null) { 
     imageView=imgItems[position];
    } else { 
      imageView = (ImageView) convertView; 
    } 
    return imageView; 
  } 
} 

그 중에서 SetFocus(int)라 는 방법 은 선택 한 효 과 를 실현 하 는 관건 이다.예 를 들 어 ABCD 4 개의 아 이 템 이 있 는데 C 가 선택 되 었 다 면 C 를 제외 한 아 이 템 은 모두 선택 되 지 않 은 스타일 로 설정 되 고 C 는 선택 한 스타일 로 설정 된다.
다음은 메 인 액 티 비 티 를 쓰기 시작 합 니 다.메 인 액 티 비 티 는 GridView 컨트롤 을 포함 하고 gvTopBar 라 는 이름 으로 두 가지 주의해 야 할 점 이 있 습 니 다.
1.SetNumColumns():setNumColumns 를 사용 하여 열 수 를 설정 해 야 합 니 다.이 GridView 는 한 줄 만 있 기 때 문 입 니 다.즉,모든 아 이 템 이 같은 줄 에 있 고 아 이 템 의 수량 은 열 수 입 니 다.
2.setSelector(new Color Drawable(Color.TRANSPARENT):시스템 이 기본적으로 선택 한 배경 색 을 투명 하 게 합 니 다.BaseAdapter 에 SetFocus()를 추가 하여 선택 한 스타일 을 바 꾸 었 기 때 문 입 니 다.

package com.ActivityGroupDemo;
import android.app.Activity;
import android.app.ActivityGroup;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.ViewGroup.LayoutParams;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.LinearLayout;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
/**
 * 
 * @author GV
 *
 */
public class ActivityGroupDemo extends ActivityGroup {

 private GridView gvTopBar;
 private ImageAdapter topImgAdapter;
 public LinearLayout container;//   sub Activity   

 /**        **/
 int[] topbar_image_array = { R.drawable.topbar_home,
  R.drawable.topbar_user, R.drawable.topbar_shoppingcart,
  R.drawable.topbar_note };
 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.main);
 gvTopBar = (GridView) this.findViewById(R.id.gvTopBar);
 gvTopBar.setNumColumns(topbar_image_array.length);//       
 gvTopBar.setSelector(new ColorDrawable(Color.TRANSPARENT));//          
 gvTopBar.setGravity(Gravity.CENTER);//     
 gvTopBar.setVerticalSpacing(0);//     
 int width = this.getWindowManager().getDefaultDisplay().getWidth()
  / topbar_image_array.length;
 topImgAdapter = new ImageAdapter(this, topbar_image_array, width, 48,
  R.drawable.topbar_itemselector);
 gvTopBar.setAdapter(topImgAdapter);//     Adapter
 gvTopBar.setOnItemClickListener(new ItemClickEvent());//       
 container = (LinearLayout) findViewById(R.id.Container);
 SwitchActivity(0);//     0 
 }
 class ItemClickEvent implements OnItemClickListener {

 public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
  long arg3) {
  SwitchActivity(arg2);
 }
 }
 /**
 *   ID     Activity
 * @param id GridView      
 */
 void SwitchActivity(int id)
 {
 topImgAdapter.SetFocus(id);//       
 container.removeAllViews();//           View
 Intent intent =null;
 if (id == 0 || id == 2) {
  intent = new Intent(ActivityGroupDemo.this, ActivityA.class);
 } else if (id == 1 || id == 3) {
  intent = new Intent(ActivityGroupDemo.this, ActivityB.class);
 } 
 intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
 //Activity    View
 Window subActivity = getLocalActivityManager().startActivity(
  "subActivity", intent);
 //    View
 container.addView(subActivity.getDecorView(),
  LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
 }
}

좋은 웹페이지 즐겨찾기