对于经常要在一个窗口里面切换多布局的,如果只单纯的使用手势切换,多少还是有点费劲,官方给我们提供了一个组件ViewPager,可以做到很棒的切换。
实现思路:
1、先添加一个ViewPager组件;
2、创建几个XML布局;
3、使用适配器的方法将布局添加到组件中。
Activity布局:
<LinearLayout 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">
<android.support.v4.view.ViewPager
android:id="@+id/viewpager1"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v4.view.ViewPager>
</LinearLayout>
left_activity.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:background="@color/colorPrimary"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_gravity="center"
android:gravity="center"
android:text="过江千尺浪"
android:textColor="@android:color/white"
android:textSize="24sp"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
right_activity.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:background="@android:color/holo_blue_dark"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_gravity="center"
android:gravity="center"
android:text="入竹万杆斜"
android:textColor="@android:color/white"
android:textSize="24sp"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
Java代码:
public class MainActivity extends AppCompatActivity {
ViewPager viewPager;
List<View> views;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
hide_actionbar();
init();
// 找到布局
View left_view = View.inflate(MainActivity.this,R.layout.left_activity,null);
View right_view = View.inflate(MainActivity.this,R.layout.right_activity,null);
// 添加布局
views.add(left_view);
views.add(right_view);
// 添加适配器
viewPager.setAdapter(new MyAdapter(views));
}
// 隐藏actionbar,纯粹为了好看而已
private void hide_actionbar(){
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.hide();
}
}
// 初始化组件
private void init(){
viewPager = findViewById(R.id.viewpager1);
views = new ArrayList<>();
}
class MyAdapter extends PagerAdapter{
private List<View> views;
public MyAdapter(List<View> views) {
this.views = views;
}
// 得到view的总数量
@Override
public int getCount() {
return views.size();
}
// 一般返回一个true就行
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
@NonNull
@Override
// 添加布局组件
public Object instantiateItem(@NonNull ViewGroup container, int position) {
container.addView(views.get(position));
return views.get(position);
}
// 销毁布局组件
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView(views.get(position));
}
}
}
效果图(就不录GIF了):