随着Google最近发布的设计支持库,推出了许多酷炫的新视图.使用一些新的组件(例如CoordinatorLayout)可能(!)使您能够实现滚动行为.
我尝试了一些内置的滚动行为,但没有什么是为我工作,
我的布局中有一个底线(LinearLayout)代替FloatingActionButton
在这里我想要什么
>这个屏幕底部的OnLaunch应该出现.
>在回收站底部的滚动条上应该向下滚动.
>在滚动浏览底部栏的向下滚动应该会弹出
这是我的代码:
main_activty.xml
<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:fitsSystemWindows="true"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:fitsSystemWindows="true" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <include layout="@layout/toolbar_srp" /> <android.support.design.widget.TabLayout android:id="@+id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" android:elevation="5dp" app:tabGravity="fill" app:tabIndicatorColor="@android:color/white" app:tabMode="fixed" /> </android.support.design.widget.AppBarLayout> <!-- All Scrollable Views --> <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" /> <!-- Bottom bar--> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" android:background="#a0000000" android:orientation="horizontal" android:paddingBottom="@dimen/padding_small" android:paddingTop="@dimen/padding_small"> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.33" android:gravity="center" android:paddingBottom="@dimen/padding_small" android:paddingTop="@dimen/padding_small" android:text="AC" android:textColor="@color/white" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.33" android:gravity="center" android:paddingBottom="@dimen/padding_small" android:paddingTop="@dimen/padding_small" android:text="Sleeper" android:textColor="@color/white" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.33" android:gravity="center" android:paddingBottom="@dimen/padding_small" android:paddingTop="@dimen/padding_small" android:text="Premium" android:textColor="@color/white" /> </LinearLayout> </android.support.design.widget.CoordinatorLayout>
fragment.xml(这里我把我的回收器视图代码)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/white" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:paddingBottom="@dimen/padding_small" android:paddingTop="@dimen/padding_small" android:weightSum="1"> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.33" android:background="@drawable/bg_srp_sorter" android:clickable="true" android:gravity="center" android:paddingBottom="@dimen/padding_small" android:paddingTop="@dimen/padding_small" android:text="Departure" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.33" android:background="@drawable/bg_srp_sorter" android:gravity="center" android:paddingBottom="@dimen/padding_small" android:paddingTop="@dimen/padding_small" android:text="Duration" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.33" android:gravity="center" android:paddingBottom="@dimen/padding_small" android:paddingTop="@dimen/padding_small" android:text="Price" /> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="@color/lite_gray"></View> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:weightSum="1"> <android.support.v7.widget.RecyclerView android:id="@+id/bus_list_recycler_view" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" /> </LinearLayout> </LinearLayout>
toolbar.xml
<?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/colorPrimary" app:layout_scrollFlags="scroll|enterAlways" android:minHeight="?attr/actionBarSize"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:weightSum="1"> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.10"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/abc_ic_ab_back_mtrl_am_alpha" /> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.78" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:weightSum="1"> <TextView android:id="@+id/toolbar_title_source" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.47" android:ellipsize="end" android:singleLine="true" android:text="Thiruvananthapuram " android:textColor="@color/white" android:textSize="@dimen/label_text_size_large" /> <TextView android:id="@+id/toolbar_title_arrow" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.08" android:text="@string/char_right" android:textColor="@color/white" android:textSize="@dimen/label_text_size_large" android:textStyle="bold" /> <TextView android:id="@+id/toolbar_title_destination" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.47" android:ellipsize="end" android:singleLine="true" android:text=" Cochin" android:textColor="@color/white" android:textSize="@dimen/label_text_size_large" /> </LinearLayout> <TextView android:id="@+id/toolbar_sub_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="2 Seat(s)" android:textColor="@color/lite_gray" android:textSize="@dimen/label_text_size_normal" /> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.13"> <ImageView android:layout_width="30dp" android:layout_height="30dp" android:scaleType="fitCenter" android:src="@drawable/filter" /> </LinearLayout> </LinearLayout> </android.support.v7.widget.Toolbar>
解决方法
由于您正在使用CoordinatorLayout,您可以创建一个可以实现您所请求的自定义行为,如下所示:
创建一个扩展CoordinatorLayout.Behavior< View>以下示例:
创建一个扩展CoordinatorLayout.Behavior< View>以下示例:
public class QuickReturnFloaterBehavior extends CoordinatorLayout.Behavior<View> { private int distance; public QuickReturnFloaterBehavior(Context context,AttributeSet attrs) { super(context,attrs); } @Override public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout,View child,View directTargetChild,View target,int nestedScrollAxes) { return (nestedScrollAxes & ViewCompat.SCROLL_AXIS_VERTICAL) != 0; } @Override public void onNestedPreScroll(CoordinatorLayout coordinatorLayout,int dx,int dy,int[] consumed) { if (dy > 0 && distance < 0 || dy < 0 && distance > 0) { child.animate().cancel(); distance = 0; } distance += dy; final int height = child.getHeight() > 0 ? (child.getHeight()) : 600/*update this accordingly*/; if (distance > height && child.isShown()) { hide(child); } else if (distance < 0 && !child.isShown()) { show(child); } } private void hide(View view) { view.setVisibility(View.GONE);// use animate.translateY(height); instead } private void show(View view) { view.setVisibility(View.VISIBLE);// use animate.translateY(-height); instead } }
现在应用此行为将其添加到您的布局
app:layout_behavior="com.example.QuickReturnFloaterBehavior"