布局如下:上面是一个描述有:头像和部分信息的布局,底部是一个RecyclerView;

想法:想实现RecyclerView向上滚动的时候,隐藏上面的头像布局信息;使用了

CoordinatorLayout  AppBarLayout可以实现;AppBarLayout包裹需要滑动隐藏的布局,并设置需要滚动布局的app:layout_scrollFlags="scroll|enterAlways"属性

这里可以实现:RecycleView向上滑动时隐藏,但是如果RecycleView向下滑动,并没有滑动到顶部时,头像所在的布局就会跟着滚动下来。

起初以为可以设置layout_scrollFlags来避免这个问题,更换了下面的好像都不行

<!-- Scroll 表示向下滚动时,这个View会被滚出屏幕范围直到隐藏.
enterAlways 表示向上滚动时,这个View会随着滚动手势出现,直到恢复原来的位置.
   app:layout_scrollFlags="scroll|enterAlways"
layout_scrollFlags中的几个值:
scroll: 所有想滚动出屏幕的view都需要设置这个flag, 没有设置这个flag的view将被固定在屏幕顶部。
enterAlways:这个flag让任意向下的滚动都会导致该view变为可见,启用快速“返回模式”。
enterAlwaysCollapsed:当你的视图已经设置minHeight属性又使用此标志时,你的视图只能已最小高度进入,只有当滚动视图到达顶部时才扩大到完整高度。
exitUntilCollapsed:滚动退出屏幕,最后折叠在顶端。
【注意】: 设置了layout_scrollFlags标志的View必须在没有设置的View的之前定义,这样可以确保设置过的View都从上面移出, 只留下那些固定的View在下面。
app:layout_scrollFlags="scroll|enterAlways" 使用这个属性;当底部RecyclerView没有滑动到顶部的时候,要隐藏的布局就会自动出现;
想要实现的目的:在RecyclerView滑动到顶部时,隐藏的布局才出现 app:layout_scrollFlags="scroll|exitUntilCollapsed" 使用上面的属性会显得卡顿
       enterAlwaysCollapsed:属性:滑动到顶部时,有时不会自动出现;并且SwipeRefreshLayout的刷新事件也会调用 -->

所以采用了ScrollView包裹,头布局和RecycleView的形式;但是:如果采用这个形式:ScrollView和RecycleView的滑动事件就会出现冲突;导致RecycleView向上滑动的时候特别卡顿。

其中遇到ScrollView和RecycleView上拉加载跟滑动冲突的事件,网上找到的方法:将RecycleView的滑动事件屏蔽,交给了ScrollView来执行

其中RecycleView的上拉加载事件,也就要交给ScrollView来实现;网上找到的是自定义了ScrollView,代码如下:

 /**
* 屏蔽 滑动事件
* Created by fc on 2015/7/16.
*/
public class MyScrollView extends ScrollView {
private int downX;
private int downY;
private int mTouchSlop; public boolean isTop() {
return isTop;
} public void setTop(boolean top) {
isTop = top;
} private boolean isTop = false;//是不是滑动到了最低端 ;使用这个方法,解决了上拉加载的问题
private OnScrollToBottomListener onScrollToBottom; public MyScrollView(Context context) {
super(context);
mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
} public MyScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
} public MyScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
} @Override
protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX,
boolean clampedY) {
super.onOverScrolled(scrollX, scrollY, clampedX, clampedY);
if(scrollY != && null != onScrollToBottom &&isTop()){
onScrollToBottom.onScrollBottomListener(clampedY);
}
} public void setOnScrollToBottomLintener(OnScrollToBottomListener listener){
onScrollToBottom = listener;
} public interface OnScrollToBottomListener{
public void onScrollBottomListener(boolean isBottom);
} @Override
public boolean onInterceptTouchEvent(MotionEvent e) {
int action = e.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
setTop(false);
downX = (int) e.getRawX();
downY = (int) e.getRawY();
Log.i("-----::----downY-----::",downY+"");
break;
case MotionEvent.ACTION_MOVE:
int moveY = (int) e.getRawY();
Log.i("-----::----moveY-----::",moveY+"");
      /****判断是向下滑动,才设置为true****/
if(downY-moveY>){
setTop(true);
}else{
setTop(false);
}
if (Math.abs(moveY - downY) > mTouchSlop) {
return true;
}
}
return super.onInterceptTouchEvent(e);
}
}

调用代码

public class ScrollingActivity extends AppCompatActivity implements  SwipeRefreshLayout.OnRefreshListener {

    private FullyLinearLayoutManager layoutManager;
private int lastVisibleItem = ;
private boolean isover = false;
private SwipeRefreshLayout srfl_my_dynamic;
private MyScrollView scrollView;//含有头的头布局和RecyclerView的
private RecyclerView lvHpDynamicPost;
// private AppBarLayout appbar;//上推隐藏;下拉显示的头布局 private RelativeLayout rl_head_bg;//表示标题头
private int currentPage = ;//定义当前页为第1页
private int pageSize = ;//定义每页加载20条
private MadeListAdapter dynamticListAdapter;//动态适配器
private ArrayList<String> dataList; @TargetApi(Build.VERSION_CODES.M)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scrolling);
/*Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);*/
srfl_my_dynamic = (SwipeRefreshLayout) findViewById(R.id.srfl_my_dynamic);
scrollView = (MyScrollView) findViewById(R.id.scrollView);
scrollView.smoothScrollTo(, );
lvHpDynamicPost = (RecyclerView) findViewById(R.id.recview);
rl_head_bg = (RelativeLayout) findViewById(R.id.rl_head_bg); //设置刷新时动画的颜色,可以设置4个
srfl_my_dynamic.setColorSchemeResources(android.R.color.holo_blue_light, android.R.color.holo_red_light, android.R.color.holo_orange_light, android.R.color.holo_green_light); scrollView.setOnScrollToBottomLintener(new MyScrollView.OnScrollToBottomListener() { @Override
public void onScrollBottomListener(boolean isBottom) {
    /**这里遇到一个问题,当数据加载完成后,向上滑动ScrollView,还会提示一遍“没有更多数据了”,所以多加了一个向下滑动的标记isTop;如果是判断向下滑动,并且isBottom是滑动到了最低端才加载数据**/
if (isBottom&&scrollView.isTop()) {
//GetToast.showToast(ScrollingActivity.this,isBottom+"");
if (srfl_my_dynamic.isRefreshing()) {
srfl_my_dynamic.setRefreshing(false);
}
currentPage++;
if (currentPage <= ) {
queryDynamtic(currentPage);
} else {
GetToast.showToast(ScrollingActivity.this, "没有更多数据了");
}
}else{
//GetToast.showToast(ScrollingActivity.this,isBottom+"");
}
}
});
lvHpDynamicPost.setHasFixedSize(true);
layoutManager = new FullyLinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
layoutManager.setSmoothScrollbarEnabled(true);
lvHpDynamicPost.setLayoutManager(layoutManager);
dataList = new ArrayList<>();
queryDynamtic(currentPage);
dynamticListAdapter = new MadeListAdapter(dataList);
lvHpDynamicPost.addItemDecoration(new DividerItemDecoration(
this, LinearLayoutManager.HORIZONTAL, , getResources().getColor(R.color.colorPrimary))); srfl_my_dynamic.setOnRefreshListener(this); /*lvHpDynamicPost.addOnScrollListener(new OnVerticalScrollListener()
);*/
lvHpDynamicPost.setAdapter(dynamticListAdapter);
} private void queryDynamtic(int currentPage) {
for (int i = currentPage * + currentPage; i < + currentPage * ; i++) {
dataList.add("张三莉莉" + i);
}
if (null != dynamticListAdapter) {
dynamticListAdapter.notifyDataSetChanged();
}
} @Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId(); //noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
} /**
* RecyclerView 滚动到顶端
*
* @param recyclerView
* @return
*/
public static boolean isSlideToTop(RecyclerView recyclerView) {
return recyclerView.computeVerticalScrollOffset() <= ;
} @Override
public void onRefresh() {
currentPage = ;
GetToast.showToast(ScrollingActivity.this, String.valueOf(currentPage));
dataList.clear();
queryDynamtic(currentPage);
if (srfl_my_dynamic.isRefreshing()) {
srfl_my_dynamic.setRefreshing(false);
}
}
/****(上滑 up)(下滑 down)(顶部 top)(底部 bottom)
* 这个方法利用了View的一个方法。public boolean canScrollVertically (int direction)
这个方法是判断View在竖直方向是否还能 向上,向下 滑动。 根据上面的例子,应该可以看出。 -1 表示 向上, 1 表示向下。 同理还有 public boolean canScrollHorizontally (int direction) 方法用来判断 水平方向的滑动。 具体的使用方法可以参考 官方文档 实现这个自定义的Listener之后你就可以在RecycyclerView的setOnScrollListener方法中使用了,像系统的使用方法一样。
* ****/
/*public class OnVerticalScrollListener
extends RecyclerView.OnScrollListener {
@Override
public final void onScrolled(RecyclerView recyclerView, int dx, int dy) {
//解决RecyclerView和SwipeRefreshLayout共用存在的bug
srfl_my_dynamic.setEnabled(layoutManager.findFirstCompletelyVisibleItemPosition() == 0);
if (!recyclerView.canScrollVertically(-1)) {
onScrolledToTop();
} else if (!recyclerView.canScrollVertically(1)) {
onScrolledToBottom();
} else if (dy < 0) {
onScrolledUp();
} else if (dy > 0) {
onScrolledDown();
}
} public void onScrolledUp() {
} public void onScrolledDown() {
} public void onScrolledToTop() {
isTop = true;
Toast.makeText(ScrollingActivity.this, "滑动到了顶端", Toast.LENGTH_SHORT).show();
} public void onScrolledToBottom() {
Toast.makeText(ScrollingActivity.this, "底部", Toast.LENGTH_SHORT).show();
//if (newState == RecyclerView.SCROLL_STATE_IDLE ) {
if (srfl_my_dynamic.isRefreshing()) {
srfl_my_dynamic.setRefreshing(false);
}
currentPage++;
if (currentPage <= 4) {
Toast.makeText(ScrollingActivity.this, currentPage + "", Toast.LENGTH_SHORT).show();
queryDynamtic(currentPage);
} else {
Toast.makeText(ScrollingActivity.this, "没有更多数据了", Toast.LENGTH_SHORT).show();
}
//}
}
}
*/ static class ViewHolder extends RecyclerView.ViewHolder { TextView tv_zan;
ViewHolder(View view) {
super(view);
tv_zan= (TextView) view.findViewById(android.R.id.text1);
}
}
private class MadeListAdapter extends RecyclerView.Adapter{
ArrayList<String> data; public MadeListAdapter(ArrayList<String> data) {
this.data = data;
} @Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_1, null);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
view.setLayoutParams(lp);
return new ViewHolder(view);
} @Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
ViewHolder viewHolder = (ViewHolder) holder;
String text= data.get(position);
viewHolder.tv_zan.setText(text);
} @Override
public long getItemId(int position) {
return position;
} @Override
public int getItemCount() {
return data.size();
}
} /*protected boolean isSlideToBottom(RecyclerView recyclerView) {
if (recyclerView == null) return false;
if (recyclerView.computeVerticalScrollExtent() + recyclerView.computeVerticalScrollOffset()
>= recyclerView.computeVerticalScrollRange())
return true;
return false;
} @Override
public void onOffsetChanged(AppBarLayout appBarLayout, int i) {
//super.onOffsetChanged(appBarLayout, i);
如果您使用的是LinearLayoutManager或StaggeredGridLayoutManager,
它们都有一个scrollToPositionWithOffset(int position,int offset)方法,第一个参数是item的position值,
第二个参数是第一个参数对应的item距离RecyclerView的顶部(Top)的距离(px)
if (srfl_my_dynamic == null) return;
layoutManager.scrollToPositionWithOffset(0,10);
if(isSlideToTop(lvHpDynamicPost)){
srfl_my_dynamic.setEnabled(i >= 0 ? true : false);
//appbar.setVisibility(View.VISIBLE);
}else{
//appbar.setVisibility(View.GONE);
}
}
*/ }

设置RecycleView的分割线样式

/**
* Created by amssy on 2016/7/18.
*/
public class DividerItemDecoration extends RecyclerView.ItemDecoration { private Paint mPaint;
private Drawable mDivider;
private int mDividerHeight = ;//分割线高度,默认为1px
private int mOrientation;//列表的方向:LinearLayoutManager.VERTICAL或LinearLayoutManager.HORIZONTAL
private static final int[] ATTRS = new int[]{android.R.attr.listDivider}; /**
* 默认分割线:高度为2px,颜色为灰色
*
* @param context
* @param orientation 列表方向
*/
public DividerItemDecoration(Context context, int orientation) {
if (orientation != LinearLayoutManager.VERTICAL && orientation != LinearLayoutManager.HORIZONTAL) {
throw new IllegalArgumentException("请输入正确的参数!");
}
mOrientation = orientation; final TypedArray a = context.obtainStyledAttributes(ATTRS);
mDivider = a.getDrawable();
a.recycle();
} /**
* 自定义分割线
*
* @param context
* @param orientation 列表方向
* @param drawableId 分割线图片
*/
public DividerItemDecoration(Context context, int orientation, int drawableId) {
this(context, orientation);
mDivider = ContextCompat.getDrawable(context, drawableId);
mDividerHeight = mDivider.getIntrinsicHeight();
} /**
* 自定义分割线
*
* @param context
* @param orientation 列表方向
* @param dividerHeight 分割线高度
* @param dividerColor 分割线颜色
*/
public DividerItemDecoration(Context context, int orientation, int dividerHeight, int dividerColor) {
this(context, orientation);
mDividerHeight = dividerHeight;
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setColor(dividerColor);
mPaint.setStyle(Paint.Style.FILL);
} //获取分割线尺寸
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
outRect.set(, , , mDividerHeight);
} //绘制分割线
@Override
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
super.onDraw(c, parent, state);
if (mOrientation == LinearLayoutManager.VERTICAL) {
drawVertical(c, parent);
} else {
drawHorizontal(c, parent);
}
} //绘制横向 item 分割线
private void drawHorizontal(Canvas canvas, RecyclerView parent) {
final int left = parent.getPaddingLeft();
final int right = parent.getMeasuredWidth() - parent.getPaddingRight();
final int childSize = parent.getChildCount();
for (int i = ; i < childSize; i++) {
final View child = parent.getChildAt(i);
RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) child.getLayoutParams();
final int top = child.getBottom() + layoutParams.bottomMargin;
final int bottom = top + mDividerHeight;
if (mDivider != null) {
mDivider.setBounds(left, top, right, bottom);
mDivider.draw(canvas);
}
if (mPaint != null) {
canvas.drawRect(left, top, right, bottom, mPaint);
}
}
} //绘制纵向 item 分割线
private void drawVertical(Canvas canvas, RecyclerView parent) {
final int top = parent.getPaddingTop();
final int bottom = parent.getMeasuredHeight() - parent.getPaddingBottom();
final int childSize = parent.getChildCount();
for (int i = ; i < childSize; i++) {
final View child = parent.getChildAt(i);
RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) child.getLayoutParams();
final int left = child.getRight() + layoutParams.rightMargin;
final int right = left + mDividerHeight;
if (mDivider != null) {
mDivider.setBounds(left, top, right, bottom);
mDivider.draw(canvas);
}
if (mPaint != null) {
canvas.drawRect(left, top, right, bottom, mPaint);
}
}
}
}

布局代码

<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/srfl_my_dynamic"
android:layout_width="match_parent"
android:layout_height="match_parent"> <!--<android.support.design.widget.CoordinatorLayout
android:id="@+id/coorLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
> <android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#00ff99">--> <test.demo.com.view.MyScrollView
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ffffff">
<!-- Scroll 表示向下滚动时,这个View会被滚出屏幕范围直到隐藏.
enterAlways 表示向上滚动时,这个View会随着滚动手势出现,直到恢复原来的位置. app:layout_scrollFlags="scroll|exitUntilCollapsed"
使用上面的属性会显得卡顿
app:layout_scrollFlags="scroll|enterAlways" layout_scrollFlags中的几个值:
scroll: 所有想滚动出屏幕的view都需要设置这个flag, 没有设置这个flag的view将被固定在屏幕顶部。
enterAlways:这个flag让任意向下的滚动都会导致该view变为可见,启用快速“返回模式”。
enterAlwaysCollapsed:当你的视图已经设置minHeight属性又使用此标志时,你的视图只能已最小高度进入,只有当滚动视图到达顶部时才扩大到完整高度。
exitUntilCollapsed:滚动退出屏幕,最后折叠在顶端。
【注意】: 设置了layout_scrollFlags标志的View必须在没有设置的View的之前定义,这样可以确保设置过的View都从上面移出, 只留下那些固定的View在下面。 app:layout_scrollFlags="scroll|enterAlways" 使用这个属性;当底部RecyclerView没有滑动到顶部的时候,要隐藏的布局就会自动出现;
想要实现的目的:在RecyclerView滑动到顶部时,隐藏的布局才出现
enterAlwaysCollapsed:属性:滑动到顶部时,有时不会自动出现;并且SwipeRefreshLayout的刷新事件也会调用
-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<RelativeLayout
android:id="@+id/rl_head_bg"
android:layout_width="match_parent"
android:layout_height="286dp"
android:minHeight="286dp"
app:layout_scrollFlags="scroll"
android:background="@mipmap/beijing2x"
android:orientation="horizontal">
<RelativeLayout
android:id="@+id/rl_back"
android:layout_width="45dp"
android:layout_height="65dp">
<ImageView
android:id="@+id/iv_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginTop="20dp"
android:background="@mipmap/public_back_btn_down"/>
</RelativeLayout>
<FrameLayout
android:id="@+id/ll_head"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:layout_gravity="bottom"
android:gravity="center"
android:layout_centerHorizontal="true"> <LinearLayout
android:layout_alignParentBottom="true"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_gravity="center"
android:gravity="center"
android:layout_centerHorizontal="true">
<ImageView
android:id="@+id/iv_head"
android:layout_width="90dp"
android:layout_height="90dp"
android:layout_marginTop="3dp"
android:layout_alignTop="@+id/rl_back"
android:layout_centerHorizontal="true"
android:src="@mipmap/moren_head_icon"
android:gravity="center" /> <TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:gravity="center_vertical"
android:text="哈哈哈魔女"
android:textColor="@android:color/white"
android:textSize="20sp" />
<TextView
android:id="@+id/tv_hp_express_company"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:gravity="center_vertical"
android:textColor="@android:color/white"
android:text="魔女俱乐部"
android:textSize="14sp" /> <TextView
android:id="@+id/tv_hp_express_part"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:layout_marginBottom="10dp"
android:text="集训营"
android:gravity="center_vertical"
android:textColor="@android:color/white"
android:textSize="14sp" />
<ImageView
android:id="@+id/btn_concern"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:gravity="center_vertical"
android:textSize="14sp" />
</LinearLayout>
</FrameLayout>
<LinearLayout
android:layout_alignParentBottom="true"
android:layout_width="match_parent"
android:layout_height="56dp"
android:orientation="horizontal"
android:background="@android:color/darker_gray"
android:layout_gravity="center"
android:layout_centerHorizontal="true">
<!--关注布局-->
<LinearLayout
android:id="@+id/ll_concern_tt"
android:layout_width="0dp"
android:layout_weight=""
android:layout_marginTop="6dp"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center"
android:layout_centerHorizontal="true"> <TextView
android:id="@+id/tv_hp_sendPageCount_tt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:gravity="center_vertical"
android:textColor="@android:color/white"
android:text="他的关注"
android:textSize="16sp" />
<TextView
android:id="@+id/tv_hp_send_tt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:layout_marginBottom="3dp"
android:text=""
android:textColor="@android:color/white"
android:textSize="16sp" />
</LinearLayout> <TextView
android:layout_width="0.5dp"
android:layout_weight="0.001"
android:layout_height="match_parent"
android:layout_marginTop="6dp"
android:layout_marginBottom="6dp"
android:background="@android:color/white"
/>
<!--粉丝布局-->
<LinearLayout
android:id="@+id/ll_fans_tt"
android:layout_width="0dp"
android:layout_weight=""
android:layout_marginTop="6dp"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center"> <TextView
android:id="@+id/tv_hp_takePageCount_tt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:gravity="center"
android:text="他的粉丝"
android:textColor="@android:color/white"
android:textSize="16sp" />
<TextView
android:id="@+id/tv_hp_take_tt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="@android:color/white"
android:layout_marginBottom="3dp"
android:text=""
android:textSize="16sp" />
</LinearLayout>
</LinearLayout>
</RelativeLayout> <android.support.v7.widget.RecyclerView
android:id="@+id/recview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
> </android.support.v7.widget.RecyclerView>
</LinearLayout>
</test.demo.com.view.MyScrollView> </android.support.v4.widget.SwipeRefreshLayout>
<!--
</android.support.design.widget.CoordinatorLayout>--> <!-- <?xml version="1.0" encoding="utf-8"?>
<android.support.design.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"
android:orientation="vertical">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"> <android.support.v7.widget.Toolbar
android:id="@+id/third_activity_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize" /> <android.support.design.widget.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_scrollFlags="scroll|enterAlways"
app:tabIndicatorColor="@color/medium_blue"
app:tabSelectedTextColor="@color/medium_blue"
app:tabTextAppearance="@style/TabText"
app:tabTextColor="@color/gray_text" />
</android.support.design.widget.AppBarLayout> <android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>-->

SwipeRefreshLayout嵌套ScrollView包裹复杂头布局和RecyclerView的更多相关文章

  1. SwipeRefreshLayout嵌套ScrollView实现下拉刷新

    API doc:http://developer.android.com/reference/android/support/v4/widget/SwipeRefreshLayout.html 首先须 ...

  2. Scrollview包裹布局问题。

    输入框获取焦点,键盘弹出,背景图片上移: https://blog.csdn.net/wljian1/article/details/79962802 android:scrollbarThumbVe ...

  3. 仿喜马拉雅实现ListView添加头布局和脚布局

     ListView添加头布局和脚布局 之前学习喜马拉雅的时候做的一个小Demo,贴出来,供大家学习参考: 如果我们当前的页面有多个接口.多种布局的话,我们一般的选择无非就是1.多布局:2.各种复杂滑动 ...

  4. Android CoordinatorLayout实现多列表切换并和头布局联动;

    注意:不是双列表联动,是多列表和头布局联动: 大概就是和饿了么店铺首页类似的布局框架吧,头布局显示时,列表RecyclerView或ScrollView和头布局一起滚动,头布局完全隐藏后列表再去滚动, ...

  5. listview的头布局把我的ACTION_DOWN事件给吃了.....

    因为头布局的viewpager自己处理点击事件 public boolean dispatchTouchEvent(MotionEvent ev) { switch (ev.getAction()) ...

  6. android 项目学习随笔九(ListView加头布局)

    1.缓冲背景色 <ListView android:id="@+id/lv_list" android:layout_width="match_parent&quo ...

  7. Android ScrollView嵌套ScrollView滚动的问题解决办法

    引用:http://mengsina.iteye.com/blog/1707464 http://fenglog.com/article.asp?id=449 Android ScrollView嵌套 ...

  8. 手把手教你给RecycleView添加头布局和尾布局

    RecycleView想必大家都不陌生,它已他的高拓展性取代了传统布局显示,同时配合协调布局,可以实现很多意想不到的酷炫交互,今天就和大家介绍一下,如何给RecycleView添加头布局和尾布局,同时 ...

  9. ListView实现下拉刷新(二)隐藏头布局

    一.问题分析 在上一篇中,我们将头布局加到了ListView上.但是没有隐藏他.你可能会想,隐藏还不简单,直接给它设置为GONE属性不就可以了吗,在需要的时候再设定为可见.没错,这正是ListView ...

随机推荐

  1. 【解决】AWS服务控制台中上传文件失败

    使用IE 11,在 AWS Services Console 中不管是 S3 还是 Elastic Beanstalk 的页面中上传页面都会失败,提示信息如下: A problem occurred ...

  2. 查看MS SQL SERVER 错误日志

    查看目的: 错误日志的查看是确保过程已成功完成(例如,备份和恢复操作,批处理命令,或其他脚本和过程).这可以帮助检测任何当前或潜在的问题,包括自动恢复信息(尤其是如果SQL Server实例已停止并重 ...

  3. winform窗体之间通过 windows API SendMessage函数传值

    -----------------------------------------------------------‘接收窗体’代码.cs------------------------------ ...

  4. canvas生成二维码,并下载保存为本地的图片

    function getTicket(id,salt){//qrcode生成canvas二维码 $(".zc-mask").show(); $(".edit-box&qu ...

  5. reverse iterator

    Problem 1: vector<int> coll = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; vector<int>::const_iterator ...

  6. 通过Windows组策略限制证书组织流氓软件的安装运行

    https://liwei2.com/2015/11/27/378.html关于如何提取证书,请参阅:https://www.zhihu.com/question/26917038http://www ...

  7. Do things for others

    早上,按照平常的时间去吃早饭,食堂格外的空旷,打饭的员工说今天人很少,我说昨天是有元旦晚会,她说今天是放假,我后来想,还是她说的更有道理.她看的比我清楚更清楚! 幸亏昨晚上记录下了早上要帮别人搜论文的 ...

  8. ThinkPad W520 在 Windows Server 2012 / R2 中安装驱动

    1.安装Intel Chipset Device Software (INF Update Utility).2.安装ThinkPad ACPI电源管理驱动.3.安装电源管理软件.4.安装英特尔核芯显 ...

  9. maven导入本地jar包

    <dependency> <groupId>com.qrcode</groupId> <artifactId>qrcode</artifactId ...

  10. Windows程序设再读笔记01-起步

    1.从程序员角度看,统一的界面意味着编程人员可以使用windows自带的例程来构建许多的功能,例如菜单,对话框等.只用几行代码就可以实现很多复杂的功能.但是这同时也增加了一些限制,使得做出一个个性化的 ...