मैंने आपको बहुत कम कोड देने की कोशिश की जो मुझे ढूंढ रही है। यह एक वैकल्पिक समाधान है, लेकिन आप एक साधारण दृश्य को AppBarLayout बदलने की आवश्यकता होगी ... इस देखो:
<android.support.design.widget.CoordinatorLayout 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:id="@+id/annonce.main.coordinator"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="RtlHardcoded">
<android.support.v7.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<!-- here you put your search bar, can be any view !-->
<android.support.v7.widget.CardView
android:id="@+id/searchbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardElevation="4dp"
app:cardUseCompatPadding="true"
app:layout_behavior="[package].RecyclerSearchBehavior">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:hint="Pesquise aqui"
android:minHeight="58dp"/>
</android.support.v7.widget.CardView>
नोट: यह एक CoordinatorLayout के अंदर है।
public class RecyclerSearchBehavior extends CoordinatorLayout.Behavior<CardView> {
//Initial height and location
private int mViewHeight;
private int[] mViewStartLocation;
public RecyclerSearchBehavior(Context context, AttributeSet attrs) {
}
@Override
public boolean layoutDependsOn(CoordinatorLayout parent, final CardView child, View dependency) {
//the first function called. The initial variables settings.
//getting height
mViewHeight = child.getHeight();
//getting location on screen
mViewStartLocation = new int[2];
child.getLocationOnScreen(mViewStartLocation);
//if the dependecy is your recycler
if (dependency instanceof RecyclerView)
//add scroll listener
((RecyclerView) dependency).addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
}
//here the magic happens
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
//animate function
animate(child, dy);
}
});
return dependency instanceof RecyclerView;
}
private void animate(CardView child, int dy) {
//the initial position of your search bar is 0, because it is on top, so...
if (child.getY() <= 0)
//dy is an integer that shows you if user scrolls up or down
if (dy >= 0) {
//move to top is a negative value, so *-1
//if that is < than height, scrools up
if ((child.getY() * -1) <= (mViewHeight))
child.setTranslationY(child.getY() - dy * 0.1f);
} else {
//if the position of search bar is < than zero, scrolls down
if (child.getY() < 0)
child.setTranslationY(child.getY() - dy * 0.1f);
//else, put the view on 0y
else child.setY(0);
}
//else, put the view on 0y again. this function is called after any user
//touches... so everything happens fast and with numbers different than
//1
else child.setY(0);
}
}
और किया: एक व्यवहार है कि देखने खोज का उपयोग कर बार आप के प्रकार है बनाएँ। आपका "सर्च बार" यहां है।
यहां एकमात्र समस्या है, आपको रीसाइक्लिंग पर अपने पहले आइटम में पैडिंग जोड़ने या पहले आइटम के रूप में एक पारदर्शी दृश्य जोड़ने की आवश्यकता होगी।
स्रोत
2016-10-18 23:17:00
आप NestedScrollView AppbarLayout तहत स्क्रॉल करने के लिए करना चाहते हैं? – jayeshsolanki93
मैं नेस्टेडस्क्रॉल व्यू की सामग्री को खोज क्षेत्र को गले लगाने के लिए सामग्री चाहता हूं, लेकिन अभी खोज क्षेत्र के ऊपर कोई सामग्री दिखाई नहीं दे रही है, और इसके नीचे सामग्री से खोज क्षेत्र को अलग करने वाले ग्रे की एक पंक्ति है। संपादित करें: हाँ, यही वही है जो मैं चाहता हूं। – joharei
'एंड्रॉइड जोड़ने का प्रयास करें: fitsSystemWindows =" true "' AppbarLayout' और 'NestedScrollView' – jayeshsolanki93