對於經常要在一個窗口裏面切換多佈局的,如果只單純的使用手勢切換,多少還是有點費勁,官方給我們提供了一個組件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了):