예 를 들 어 Android 에서 ViewPager 의 PagerTitleStrip 하위 컨트롤 을 설명 합 니 다.
세 페이지 사이 의 미끄럼 은 위의 제목 을 가지 고 한 조각 미 끄 러 집 니 다.
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 의 스타일 과 텍스트 를 유연 하 게 설정 할 수 있 습 니 다.
효과:
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 을 가 져 와 설정 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.