/ / Как да зададете височина на долната част на листа, за да покажете първоначално само определени части? - Android, оригинално оформление, Android widget, дъно

Как да зададете височина на долния лист, за да покажете първоначално само определени части? - Android, оригинално оформление, Android widget, дъно

Нека да кажем, че моят долен лист има линии на джаджи, както следва: Ако искам да покажа само първите два реда (т.е. първите две LinearLayouts), но не и останалите джаджи по-долу. Не искам те да се видят първоначално. Как мога да задам правилната височина на зрението? 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докато е сгъната.

въведете описанието на изображението тук въведете описанието на изображението тук