راهنمایی درباره استفاده از Coordinator Layout
من توی برنامه میخوام برای صفحه نمایش پروفایل کاربر از scroll Coordinator Layout استفاده کنم. توی استک و چند تا سایت خارجی یه سری آموزش پیدا کردم ولی در همشون بعد از اسکرول شدن صفحه عکس بالای صفحه محو و تولبار نمایش داده میشه ولی من میخوام که پس از محو عکس یه لایه زیر تولبار اضافه بشه طوری که هم تولبار و داشته باشم و هم لایه ای که جدید و بعد از اسکرول اضافه شده
برای انجام این کار چکاری باید بکنم ؟
من دو تا فایل Xml براتون اینجا میذارم،که با توجه به نیازتون می تونید اونارو تغییر بدین و یا دوتا فایل رو با هم ترکیب کنید تا فقط یه فایل Layout داشته باشین.اما همه خصوصیاتی که توی هر دو فایل هست رو باید مدنظر داشته باشین(برای شروع بهتره اول فایلا رو کپی کنید).
فایل app_bar_activity_main.xml :
<?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:fitsSystemWindows="true"
android:nestedScrollingEnabled="true">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
android:fitsSystemWindows="true"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/main.collapsing"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<ImageView
android:id="@+id/imageView111"
android:layout_width="match_parent"
android:layout_height="150dp"
android:background="#ff0000" />
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"
app:layout_collapseMode="pin"
app:popupTheme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<TextView
android:id="@+id/txt_actionbar_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:text="Toolbar"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#000000" />
</android.support.v7.widget.Toolbar>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_activity_main" />
</android.support.design.widget.CoordinatorLayout>
فایل content_activity_main.xml :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
android:gravity="center_horizontal"
android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/app_bar_activity_main">
<ImageView
android:id="@+id/imageView222"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="#00ff00" />
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/imageView222"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
</RelativeLayout>
توی این دو فایل، imageView111 بعد از اسکرول محو میشه،اما imageView222 بعد از اسکرول،زیر Toolbar،قرار می گیره.پس شما باید لایه مورد نظر
خودتونو به جای imageView222 قرار بدین و بقیه محتوای لایه xml رو هم توی NestedScrollView قرار بدین.
چون از NestedScrollView استفاده کردین،با کد زیر مشکلتون حل میشه :
NestedScrollView scroller = (NestedScrollView) findViewById(R.id.myScroll);
if (scroller != null) {
scroller.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
@Override
public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
if (scrollY > oldScrollY) {
Log.i(TAG, "Scroll DOWN");
}
if (scrollY < oldScrollY) {
Log.i(TAG, "Scroll UP");
}
if (scrollY == 0) {
Log.i(TAG, "TOP SCROLL");
}
if (scrollY == (v.getChildAt(0).getMeasuredHeight() - v.getMeasuredHeight())) {
Log.i(TAG, "BOTTOM SCROLL");
}
}
});
}
اما اگه بعدا خواستین از RecyclerView استفاده کنید،از آموزشی که توی این لینک هست استفاده کنید.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .