Нека да кажем, че моят долен лист има линии на джаджи, както следва: Ако искам да покажа само първите два реда (т.е. първите две LinearLayout
s), но не и останалите джаджи по-долу. Не искам те да се видят първоначално. Как мога да задам правилната височина на зрението? Hard-кодиране app:behavior_peekHeight
вероятно няма да работи, така че ще трябва да го зададете програмисти, но как да се изчисли височината?
Или има по-препоръчителен начин да го получитесъщия резултат? Искам да кажа, че ако тествам Google Карти, дългото натискане на място първо показва само заглавната част като долния лист, но когато се опитам да превъртя долния лист, изглежда, че заглавната част (която може би не е била истинска долният лист) се замества от истински долен лист, който съдържа всички елементи. Ако моето обяснение не е достатъчно, моля, опитайте Google Карти сами.
<android.support.v4.widget.NestedScrollView
android:id="@+id/bottom_sheet"
app:layout_behavior="android.support.design.widget.BottomSheetBehavior"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView/>
<android.support.v7.widget.AppCompatSpinner/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView/>
<TextView/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView/>
<TextView/>
</LinearLayout>
<android.support.v7.widget.RecyclerView/>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
Отговори:
1 за отговор № 1Бих решил това с помощта на ViewTreeObserver.OnGlobalLayoutListener
да изчакате да се постави долния лист и след това да се обадите BottomSheetBehavior.setPeekHeight()
с y-координата на първия изглед, който не искате да видите.
private BottomSheetBehavior<View> behavior;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
View bottomSheet = findViewById(R.id.bottomSheet);
behavior = BottomSheetBehavior.from(bottomSheet);
final LinearLayout inner = findViewById(R.id.inner);
inner.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
inner.getViewTreeObserver().removeOnGlobalLayoutListener(this);
View hidden = inner.getChildAt(2);
behavior.setPeekHeight(hidden.getTop());
}
});
}
В този случай, дъното ми е a NestedScrollView
притежаващ a LinearLayout
който държи много TextView
с. Нагласяйки височината на върха, за да бъде горната част на третата TextView
(получено от getChildAt(2)
), долният ми лист завършва точно два TextView
докато е сгъната.