协调者布局 CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout(写法很粗糙,但是很全,实现功能为主)
main_activity.xml走起:
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="15dp"
android:background="#ff0000"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<ImageView
app:layout_collapseMode="pin"
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_centerInParent="true"
android:src="@drawable/bbb"></ImageView>
<ScrollView
app:layout_collapseMode="pin"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:text="sdnfjsdnjfnsdjnf"
android:layout_width="match_parent"
android:layout_height="50dp"></TextView>
<TextView
android:text="sdnfjsdnjfnsdjnf"
android:layout_width="match_parent"
android:layout_height="50dp"></TextView>
<TextView
android:text="sdnfjsdnjfnsdjnf"
android:layout_width="match_parent"
android:layout_height="50dp"></TextView>
<TextView
android:text="sdnfjsdnjfnsdjnf"
android:layout_width="match_parent"
android:layout_height="50dp"></TextView>
<TextView
android:text="sdnfjsdnjfnsdjnf"
android:layout_width="match_parent"
android:layout_height="50dp"></TextView>
<TextView
android:text="sdnfjsdnjfnsdjnf"
android:layout_width="match_parent"
android:layout_height="50dp"></TextView>
<TextView
android:text="sdnfjsdnjfnsdjnf"
android:layout_width="match_parent"
android:layout_height="50dp"></TextView>
<TextView
android:text="sdnfjsdnjfnsdjnf"
android:layout_width="match_parent"
android:layout_height="50dp"></TextView>
<TextView
android:text="sdnfjsdnjfnsdjnf"
android:layout_width="match_parent"
android:layout_height="50dp"></TextView>
</LinearLayout>
</ScrollView>
</com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout>
<androidx.appcompat.widget.LinearLayoutCompat
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.google.android.material.tabs.TabLayout
android:background="#0000ff"
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<androidx.viewpager.widget.ViewPager
android:background="#00ff00"
android:id="@+id/view_pager2"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</androidx.appcompat.widget.LinearLayoutCompat>
<!-- <androidx.recyclerview.widget.RecyclerView-->
<!-- android:id="@+id/recyclerView"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="match_parent"-->
<!-- />-->
</androidx.coordinatorlayout.widget.CoordinatorLayout>
MainActivity:
package com.example.myapplication;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;
import com.google.android.material.tabs.TabLayout;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ViewPager viewPager = findViewById(R.id.view_pager2);
TabLayout tab = findViewById(R.id.tab_layout);
BlankFragment blankFragment = new BlankFragment();
BlankFragment2 blankFragment2 = new BlankFragment2();
List<Fragment> list = new ArrayList<>();
List<String> stringList = new ArrayList<>();
list.add(blankFragment);
list.add(blankFragment2);
stringList.add("技能鉴定");
stringList.add("是大家都");
ViewPageAdapter viewPageAdapter = new ViewPageAdapter(getSupportFragmentManager(), list, stringList);
viewPager.setAdapter(viewPageAdapter);
tab.setupWithViewPager(viewPager);
}
}
一些副用的layout:(widget.xml 用于RecyclerViewAdapter中填充TextView数据所用)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/texts"
android:layout_width="wrap_content"
android:layout_height="100dp"></TextView>
</LinearLayout>
BlankFragment:(只有一个RecyclerView)注:另外一个BlankFragment2 是默认创建的,其中毫无操作,大家自行创建就行
package com.example.myapplication;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
import java.util.List;
public class BlankFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View inflate = inflater.inflate(R.layout.fragment_blank, container, false);
RecyclerView recyclerView = inflate.findViewById(R.id.recyclerview);
GridLayoutManager gridLayoutManager = new GridLayoutManager(getContext(), 2, RecyclerView.VERTICAL, false) {
@Override
public boolean canScrollVertically() {
return true;
}
};
recyclerView.setLayoutManager(gridLayoutManager);
List<String> list = new ArrayList<>();
for (int i = 0; i < 100; i++) {
list.add("为所欲为");
}
TabScrollDoubleAdapter tabScrollDoubleAdapter = new TabScrollDoubleAdapter(getContext(), list);
recyclerView.setAdapter(tabScrollDoubleAdapter);
return inflate;
}
}
fragment_blank:(Fragment布局)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent"
tools:context=".BlankFragment">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent"></androidx.recyclerview.widget.RecyclerView>
</LinearLayout>
ViewPageAdapter:(Viewpager适配器,另:ViewPager也可与动态创建的Linearlayout联用)
package com.example.myapplication;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
import java.util.List;
public class ViewPageAdapter extends FragmentStatePagerAdapter {
private List<Fragment> mViewList;
private List<String> mStringList;
public ViewPageAdapter(@NonNull FragmentManager fm, List<Fragment> list, List<String> lists) {
super(fm);
this.mViewList = list;
this.mStringList = lists;
}
@NonNull
@Override
public Fragment getItem(int position) {
return mViewList.get(position);
}
@Override
public int getCount() {
return mStringList.size();
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return mStringList.get(position);
}
}
TabScrollDoubleAdapter(RecyclerView适配器)
package com.example.myapplication;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
public class TabScrollDoubleAdapter extends RecyclerView.Adapter<TabScrollDoubleAdapter.MyHolder> {
private Context context;
private List<String> data;
public TabScrollDoubleAdapter(Context context, List<String> data) {
this.context = context;
this.data = data;
}
@NonNull
@Override
public MyHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View inflate = LayoutInflater.from(context).inflate(R.layout.widget, null);
return new MyHolder(inflate);
}
@Override
public void onBindViewHolder(@NonNull MyHolder holder, int position) {
holder.textView.setText(data.get(position));
}
@Override
public int getItemCount() {
return data.size();
}
class MyHolder extends RecyclerView.ViewHolder{
TextView textView;
public MyHolder(@NonNull View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.texts);
}
}
}