예 를 들 어 Android 에서 ViewPager 의 PagerTitleStrip 하위 컨트롤 을 설명 합 니 다.

8927 단어 AndroidViewPager
먼저 간단 한 것 을 보고,먼저 효과 도 를 올 려 눈길 을 끈 다.
2016323142630338.png (300×500) 2016323142717616.png (300×500)
세 페이지 사이 의 미끄럼 은 위의 제목 을 가지 고 한 조각 미 끄 러 집 니 다.
PagerTitleStrip 에 대한 android 의 공식 설명 을 보십시오.
PagerTitleStrip 은 ViewPager 의 현재 페이지,이전 페이지 와 다음 페이지 에 대한 비 상호작용 표시 기 입 니 다.이것 은 자주 ViewPager 컨트롤 의 키 컨트롤 로 XML 레이아웃 파일 에 추 가 됩 니 다.레이아웃 파일 에 하위 컨트롤 로 ViewPager 에 추가 합 니 다.그리고 안 드 로 이 드:layotgravity 속성 을 TOP 또는 BOTTOM 으로 설정 하여 ViewPager 의 상단 이나 아래쪽 에 표시 합 니 다.각 페이지 의 제목 은 어댑터 의 getPageTitle(int)함 수 를 통 해 ViewPager 에 제 공 됩 니 다.
두 가 지 를 강조 하 다.
1.먼저,글 에서 언급 한 바 와 같이 레이아웃 파일 에 하위 컨트롤 로 ViewPager 에 추가 합 니 다.
2,2,제목 가 져 오기 어댑터 의 getPageTitle(int)함 수 를 다시 써 서 가 져 옵 니 다.
이 두 가지 점 에 근거 하여 우 리 는 코드 를 볼 수 있다.
1.XML 레이아웃 파일:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 tools:context="com.example.testviewpage_2.MainActivity" > 
 
 <android.support.v4.view.ViewPager 
  android:id="@+id/viewpager" 
  android:layout_width="wrap_content" 
  android:layout_height="200dip" 
  android:layout_gravity="center"> 
   
  <android.support.v4.view.PagerTitleStrip 
   android:id="@+id/pagertitle" 
   android:layout_width="wrap_content" 
   android:layout_height="wrap_content" 
   android:layout_gravity="top" 
   /> 
   
 </android.support.v4.view.ViewPager> 
 
</RelativeLayout> 
우리 가.PagerTitleStrip 을 ViewPager 의 하위 컨트롤 로 직접 삽입 하 는 것 을 똑똑히 보 았 습 니 다.이것 은 첫걸음 이다.물론 android:layoutgravity="의 값 은 top 또는 bottom 으로 설정 해 야 합 니 다.제목 표시 줄 을 상단 이나 아래쪽 에 표시 합 니 다.
2.어댑터 의 getPageTitle()함수 재 작성
여러분 들 이 전체적인 인식 을 가지 기 편리 하도록 먼저 전체 코드 를 붙 인 다음 에 하나씩 말씀 드 리 겠 습 니 다.

package com.example.testviewpage_2; 

import java.util.ArrayList; 
import java.util.List; 
import android.app.Activity; 
import android.os.Bundle; 
import android.support.v4.view.PagerAdapter; 
import android.support.v4.view.PagerTitleStrip; 
import android.support.v4.view.ViewPager; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
 
public class MainActivity extends Activity { 
 
 private View view1, view2, view3; 
 private List<View> viewList;// view   
 private ViewPager viewPager; //    viewPager 
  
 private List<String> titleList; //       
  
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
  super.onCreate(savedInstanceState); 
  setContentView(R.layout.activity_main); 
  viewPager = (ViewPager) findViewById(R.id.viewpager); 
  LayoutInflater inflater = getLayoutInflater(); 
  view1 = inflater.inflate(R.layout.layout1, null); 
  view2 = inflater.inflate(R.layout.layout2, null); 
  view3 = inflater.inflate(R.layout.layout3, null); 
 
  viewList = new ArrayList<View>();//        View      
  viewList.add(view1); 
  viewList.add(view2); 
  viewList.add(view3); 
   
  titleList = new ArrayList<String>();//      Title   
  titleList.add("  "); 
  titleList.add("  "); 
  titleList.add("  "); 
 
  PagerAdapter pagerAdapter = new PagerAdapter() { 
 
   @Override 
   public boolean isViewFromObject(View arg0, Object arg1) { 
    // TODO Auto-generated method stub 
    //     key,  view,        View arg0         
    return arg0 == viewList.get((int)Integer.parseInt(arg1.toString())); 
   } 
 
   @Override 
   public int getCount() { 
    // TODO Auto-generated method stub 
    return viewList.size(); 
   } 
 
   @Override 
   public void destroyItem(ViewGroup container, int position, 
     Object object) { 
    // TODO Auto-generated method stub 
    container.removeView(viewList.get(position)); 
   } 
 
   @Override 
   public Object instantiateItem(ViewGroup container, int position) { 
    // TODO Auto-generated method stub 
    container.addView(viewList.get(position)); 
     
    //          (position)  Key    
    return position; 
   } 
    
   @Override 
   public CharSequence getPageTitle(int position) { 
    // TODO Auto-generated method stub 
    return titleList.get(position); 
   } 
  }; 
 
  viewPager.setAdapter(pagerAdapter); 
 
 } 
 
} 

3.변수

private List<String> titleList; //       
세 페이지 에 해당 하 는 제목 을 저장 하기 위해 String 배열 을 신 청 했 습 니 다.
4.초기 화

titleList = new ArrayList<String>();//      Title   
titleList.add("  "); 
titleList.add("  "); 
titleList.add("  "); 
초기 화 단계 에 배열 을 초기 화 하 는 코드 가 추가 되 었 습 니 다.
5,다시 쓰기 CharSequence getPageTitle(int)함수

@Override 
public CharSequence getPageTitle(int position) { 
 // TODO Auto-generated method stub 
 return titleList.get(position); 
} 
위치 에 따라 현재 대응 하 는 제목 을 되 돌려 줍 니 다.
이 는 getPageTitle()함수 만 재 작성 한 것 으로 위치 에 따라 다른 문자열 로 되 돌아 가면 위의 제목 표시 줄 기능 을 수행 할 수 있 습 니 다.첫 번 째 와 두 번 째 단 계 는 배열 과 초기 화 에 관 한 것 입 니 다.사실은 모두 이 단계 입 니 다.사실은 우 리 는 아래 의 이 코드 로 그들 을 대체 할 수 있 습 니 다.

@Override 
public CharSequence getPageTitle(int position) { 
 // TODO Auto-generated method stub 
 switch (position) { 
 case 0: 
  return "  "; 
 case 1: 
  return "  "; 
 case 2: 
  return "  "; 
 
 default: 
  return ""; 
 } 
} 
이런 효 과 는 똑 같 습 니 다.코드 가 잘 유지 되 지 않 을 뿐 입 니 다.
제목 설정
Page 의 Title 을 분리 한 사용자 정의 View 는 title 의 스타일 과 텍스트 를 유연 하 게 설정 할 수 있 습 니 다.
효과:
2016323142741204.jpg (1022×854)
2016323142803623.jpg (1034×834)
xml 사용:

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" 
 android:id="@+id/pager" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent"> 
 
 <android.support.v4.view.PagerTitleStrip 
  android:id="@+id/pager_title_strip" 
  android:layout_width="match_parent" 
  android:layout_height="30dp" 
  android:layout_gravity="bottom" 
  android:paddingTop="4dp" 
  android:paddingBottom="4dp" /> 
</android.support.v4.view.ViewPager> 

  android:layout_gravity 제어 제목 의 위치  일반 값 은 bottom 또는 top 입 니 다.
오픈 소스 프로젝트 ImageLoader 에서 이 걸 사 용 했 습 니 다.한참 을 찾 았 지만 findbyid 를 보지 못 했 습 니 다.
원래 원본 코드 에 서 는 ViewPager 의 하위 컨트롤 이 라 고 생각 했 습 니 다.
부분 소스 코드:

@Override 
 protected void onAttachedToWindow() { 
  super.onAttachedToWindow(); 
 
  final ViewParent parent = getParent(); 
  if (!(parent instanceof ViewPager)) { 
   throw new IllegalStateException( 
     "PagerTitleStrip must be a direct child of a ViewPager."); 
  } 
 
  final ViewPager pager = (ViewPager) parent; 
  final PagerAdapter adapter = pager.getAdapter(); 
 
  pager.setInternalPageChangeListener(mPageListener); 
  pager.setOnAdapterChangeListener(mPageListener); 
  mPager = pager; 
  updateAdapter(mWatchingAdapter != null ? mWatchingAdapter.get() : null, adapter); 
 } 

  분석:onAttached ToWindow()에서 parent-view 를 직접 찾 아 ViewPager 라면 사용 할 수 있 으 며,그렇지 않 으 면 이상 을 직접 던 집 니 다.
title 값 설정:
PagerAdapter 에 getPageTitle()이 있 습 니 다.다시 써 야 합 니 다.그리고 페이지 에 따라 다른 title 을 되 돌려 줄 수 있 습 니 다.

@Override 
public CharSequence getPageTitle(int position) { 
 switch (position) { 
  case 0: 
   return getString(R.string.title_list); 
  case 1: 
   return getString(R.string.title_grid); 
  default: 
 return null; 
 } 
} 
  PageTitleStrip 의 updateText()소스 코드 에 view Pager 의 adapter.getPageTitle 을 호출 하여 title 을 가 져 와 설정 합 니 다.

좋은 웹페이지 즐겨찾기