Android 프로젝트 실전 시 뮬 레이 션 네트워크 상단 탐색 표시 줄 효과

시간 이 지 날수 록 현재 의 소프트웨어 가 요구 하 는 내용 이 점점 많아 지고 있 기 때문에 작은 화면 에 더 많은 내용 을 표시 할 수 있어 야 한다.먼저 우 리 는 아래쪽 메뉴 표시 줄 을 생각 할 것 이다.그러나 가끔 은 왕 이 뉴스 가 표시 해 야 할 내용 이 너무 많 고 홈 페이지 에 모두 표시 하려 고 하기 때문에 상단 네 비게 이 션 표시 줄 을 추가 했다.그러나 안 드 로 이 드 와 같은 모 바 일 장치 의 메모리 가 제한 되 어 있 습 니 다.그렇게 많은 인터페이스 가 메모리 에 캐 시 되면 메모리 가 넘 치기 쉽 습 니 다.이것 은 비교적 치 명 적 이기 때문에 고려 할 수 밖 에 없습니다.비록 저 는 이전에 도 왕 이의 상단 네 비게 이 션 바 를 해 본 적 이 있 지만 방식 이 좋 지 않 습 니 다.마치 viewpager 를 사용 하여 복잡 한 화면 을 만 드 는 것 과 같 습 니 다.그림 이 메모 리 를 너무 많이 차지 하기 때문에 메모리 가 넘 치기 쉽 습 니 다.오늘 의 내용 을 배 웠 습 니 다.여러분 이 비교 해 보면 알 수 있 을 것 입 니 다.<
오늘 이 루어 질 효 과 를 먼저 살 펴 보 자.

상단 내 비게 이 션 의 구체 적 인 사용 할 그림 과 구 조 는 모두 가 스스로 조정 한다.
앞 에 밑 에 메뉴 표시 줄 이 소개 되 어 있 기 때문에 중복 되 는 코드 는 붙 이지 않 습 니 다.마지막 으로 저도 다운로드 주 소 를 붙 여 여러분 이 관심 이 있 으 면 직접 다운로드 하 겠 습 니 다.
우선 상단 탐색 표시 줄 의 레이아웃 파일 을 보십시오.

<?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" > 
 <include layout="@layout/head" /> 
 
 <LinearLayout 
 android:layout_width="fill_parent" 
 android:layout_height="wrap_content"> 
 <RadioGroup 
 android:id="@+id/add_tab_group" 
 android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:gravity="center" 
 android:paddingTop="6dp" 
 android:paddingBottom="6dp" 
 android:background="@drawable/big_button_up" 
 android:orientation="horizontal" 
  > 
 
 <RadioButton 
  android:id="@+id/main_tab_addExam" 
  style="@style/MMTabButton1" 
  android:layout_weight="1.0" 
  android:checked="true" 
  android:text="    " /> 
 
 <RadioButton 
  android:id="@+id/main_tab_myExam" 
  style="@style/MMTabButton1" 
  android:layout_weight="1.0" 
  
  android:text="    " /> 
 
 <RadioButton 
  android:id="@+id/main_tab_message" 
  style="@style/MMTabButton1" 
  android:layout_weight="1.0" 
  android:text="    " /> 
 
 <RadioButton 
  android:id="@+id/main_tab_testing" 
  style="@style/MMTabButton1" 
  android:layout_weight="1.0" 
  android:text="  " /> 
 <RadioButton 
  android:id="@+id/main_tab_settings" 
  style="@style/MMTabButton1" 
  android:layout_weight="1.0" 
  android:text="  " /> 
 </RadioGroup> 
 
 </LinearLayout> 
 
 <LinearLayout 
 android:id="@+id/container" 
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent" 
 android:layout_weight="1" > 
 </LinearLayout> 
</LinearLayout> 
구체 적 인 너비 스타일 은 여러분 스스로 조절 할 수 있 습 니 다.그리고 핵심 클래스 를 보 세 요.

import android.app.ActivityGroup; 
import android.app.AlertDialog; 
import android.app.LocalActivityManager; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.view.View; 
import android.view.animation.Animation; 
import android.view.animation.AnimationUtils; 
import android.widget.Button; 
import android.widget.LinearLayout; 
import android.widget.RadioGroup; 
import android.widget.TextView; 
import android.widget.RadioGroup.OnCheckedChangeListener; 
 
public class AddExamActivity extends ActivityGroup { 
 
 protected Button btn_leftTop, btn_rightTop; 
 protected TextView tv_head; 
 
 private static LocalActivityManager manager; 
 private RadioGroup radioGroup; 
 private static LinearLayout container; 
 public static Context context; 
 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 // TODO Auto-generated method stub 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.addexam); 
 context=this; 
 initHead(); 
 
 manager=getLocalActivityManager(); 
 container= (LinearLayout)findViewById(R.id.container); 
 radioGroup=(RadioGroup) this.findViewById(R.id.add_tab_group); 
 
 container.removeAllViews(); 
 container.addView(manager.startActivity( 
 "PAGE_0", 
 new Intent(context, MyExamActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) 
 .getDecorView()); 
 
 radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
 
 @Override 
 public void onCheckedChanged(RadioGroup group, int checkedId) { 
 // TODO Auto-generated method stub 
 switch (checkedId) { 
 case R.id.main_tab_addExam://     
  container.removeAllViews(); 
  container.addView(manager.startActivity( 
  "PAGE_0", 
  new Intent(context, MyExamActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) 
  .getDecorView()); 
  break; 
 case R.id.main_tab_myExam://     
  container.removeAllViews(); 
  container.addView(manager.startActivity( 
  "PAGE_1", 
  new Intent(context, MyMessageActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) 
  .getDecorView()); 
  break; 
 case R.id.main_tab_message://     
  container.removeAllViews(); 
  container.addView(manager.startActivity( 
  "PAGE_2", 
  new Intent(context, SettingActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) 
  .getDecorView()); 
  break; 
 case R.id.main_tab_testing://   
  container.removeAllViews(); 
  container.addView(manager.startActivity( 
  "PAGE_3", 
  new Intent(context, TestingActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) 
  .getDecorView()); 
  break; 
 case R.id.main_tab_settings://   
  container.removeAllViews(); 
  container.addView(manager.startActivity( 
  "PAGE_4", 
  new Intent(context, MyExamActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) 
  .getDecorView()); 
  break; 
 default: 
  //tabHost.setCurrentTabByTag("    "); 
  break; 
 } 
 } 
 }); 
 } 
 public static void changeTo(){ 
 Animation slideLeftIn = AnimationUtils.loadAnimation(context, R.anim.slide_bottom_in_no_alpha); 
 
 container.removeAllViews(); 
 container.addView(manager.startActivity( 
 "PAGE_4", 
 new Intent(context, MyExamActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) 
 .getDecorView()); 
 container.startAnimation(slideLeftIn); 
 } 
 protected void initHead() { 
 btn_leftTop = (Button) findViewById(R.id.btn_leftTop); 
 btn_rightTop = (Button) findViewById(R.id.btn_rightTop); 
 tv_head = (TextView) findViewById(R.id.tv_head); 
 
 btn_leftTop.setVisibility(View.INVISIBLE); 
 tv_head.setText("    "); 
 } 
 
 @Override 
 public boolean onKeyDown(int keyCode, KeyEvent event) { 
 // TODO Auto-generated method stub 
 
 if (keyCode == KeyEvent.KEYCODE_BACK) { 
 
 AlertDialog.Builder builder = new AlertDialog.Builder(getParent()); 
 builder.setMessage("      ?") 
  .setCancelable(false) 
  .setPositiveButton("  ", 
  new DialogInterface.OnClickListener() { 
  public void onClick(DialogInterface dialog, 
   int id) { 
   finish(); 
   System.exit(0); 
  } 
  }) 
  .setNegativeButton("  ", 
  new DialogInterface.OnClickListener() { 
  public void onClick(DialogInterface dialog, 
   int id) { 
   dialog.cancel(); 
  } 
  }); 
 AlertDialog alert = builder.create(); 
 alert.show(); 
 return true; 
 } 
 
 return super.onKeyDown(keyCode, event); 
 } 
} 
이곳 은 액 티 비 티 그룹 을 이 어 받 아 사용 하지 않 은 친 구 는 바 이 두 에서 검색 해 보면 알 수 있다.
LocalActivity Manager 를 사용 하여 하위 activity 를 시 작 했 습 니 다.여기 Context 와 LinearLayout 는 static 정적 을 사 용 했 습 니 다.이것 은 변태 적 인 수요 로 인해 저 는 이렇게 할 수 밖 에 없 었 습 니 다.이 두 변 수 를 static 로 설정 하지 않 았 으 면 좋 겠 습 니 다.static 의 생명 주기 가 매우 길 기 때 문 입 니 다.특히 Context 는 static 로 설정 하지 마 십시오.그러면 현재 activity 는 소각 되 기 어렵 습 니 다.사실 tabhost 를 사용 하면 충분히 실현 할 수 있 지만 왜 tabhost 를 사용 하지 않 았 는 지 는 모두 가 알 고 있 을 것 이 라 고 믿 습 니 다.메모 리 를 고려 하지 않 으 면 저도 사용 할 것 입 니 다.
이상 이 바로 본문의 전체 내용 입 니 다.여러분 께 참고 가 될 수 있 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기