ViewPager是个让使用者能左右切换view的功能,而ViewPager是直接继承ViewGroup类,这里可以把它想像成一个容器,这样可以帮助接下来对它的功能有比较好的理解。与多数容器相同,需要透过Adapter绑定资料,这个部分将在接下来的程序码详细讲解。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.viewpager.widget.ViewPager
android:id="@+id/vw1"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.viewpager.widget.PagerTabStrip
android:id="@+id/tabstrip"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="50dp"/>
</androidx.viewpager.widget.ViewPager>
</RelativeLayout>
这里我有偷加了一个功能,PagerTabStrip。它的功能是负责做到标题栏,让每个view都有属於自己的标题。不过这里要稍微注意一下,PagerTabStrip必须是ViewPager的子类标签,否则是会出错的。
而view的设定就直接在res/layout中加入xml档。如法炮制三份来做测试。
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tx1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="tb1"
android:textSize="30sp"/>
</LinearLayout>
接者是Adapter的设定和继承,ViewPager的Adapter是需要继承PagerAdapter,并加入以下函式。
class MyPagerAdapters extends PagerAdapter{
@Override
public int getCount() {
return ViewContain.size();
}
@Override
public void destroyItem(ViewGroup container,int position,Object object){
((ViewPager)container).removeView(ViewContain.get(position));
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
//新增vieww
((ViewPager) container).addView(ViewContain.get(position));
return ViewContain.get(position);
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
@Override
public CharSequence getPageTitle(int position){
//在TabStrip的文字
return titlecontain.get(position);
}
}
}
这样基本完成ViewPager的资料配置,这里可以先看函式,而有些变数的部分我接者以下程序码配合注解讲解。
public class MainActivity extends AppCompatActivity {
//负责储存view的部分
ArrayList<View> ViewContain = new ArrayList<View>();
//负责存title
ArrayList<String> titlecontain = new ArrayList<String>();
ViewPager pager ;
PagerTabStrip tabstrip;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pager = (ViewPager)findViewById(R.id.vw1);
tabstrip = (PagerTabStrip) findViewById(R.id.tabstrip);
//取消tab下面的长横线
tabstrip.setDrawFullUnderline(false);
//设定tab的背景色
tabstrip.setBackgroundResource(R.color.teal_200);
//设定当前tab页签的下划线颜色
tabstrip.setTabIndicatorColorResource(R.color.purple_200);
View view1 = LayoutInflater.from(this).inflate(R.layout.layout_tb1,null);
View view2 = LayoutInflater.from(this).inflate(R.layout.layout_tb2,null);
View view3 = LayoutInflater.from(this).inflate(R.layout.layout_tb3,null);
ViewContain.add(view1);
ViewContain.add(view2);
ViewContain.add(view3);
titlecontain.add("今日头条");
titlecontain.add("今日热点");
titlecontain.add("今日财经");
pager.setAdapter(new MyPagerAdapters());
pager.setCurrentItem(1);//指定跳到某页,一定得设置在setAdapter後面
}
class MyPagerAdapters extends PagerAdapter{
@Override
public int getCount() {
return ViewContain.size();
}
@Override
public void destroyItem(ViewGroup container,int position,Object object){
((ViewPager)container).removeView(ViewContain.get(position));
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
//新增vieww
((ViewPager) container).addView(ViewContain.get(position));
return ViewContain.get(position);
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
@Override
public CharSequence getPageTitle(int position){
//在TabStrip的文字
return titlecontain.get(position);
}
}
}
其实也就短短的几行程序码,在设定上非常单纯,大家也可以自己玩看看PagerTabStrip的属性设定,试看看不同的效果。
今天ViewPager讲到这边,谢谢大家~!
<<: [Day 27] Android Studio 七日陨石开发:又到了开启相簿的季节
哈罗大家好~ 昨天我们初步了解如何制作一个简单的 Power BI 视觉化报表,让我们可以针对想要了...
今天就来继续介绍 trait、parent、association、alias! alias 简单来...
接续昨天。 到到二个页面的程序码中,新增一字串变数,也在生命周期中,使此变数会等於第二页的文字格变数...
货比三家不吃亏,使用前请详阅说明书 继昨天谈到架站工具蛮多种的,认清需求与目标之後,从原本五样工具先...
前言 经过了二十一天,进入到了实作的部分,接下来就会建置一系列实际连线至DB并透过Restful沟通...