使用可滚动的 ActionBar 始终显示元素
Posted
技术标签:
【中文标题】使用可滚动的 ActionBar 始终显示元素【英文标题】:Element shown all the time with scrollable ActionBar 【发布时间】:2022-01-18 15:29:38 【问题描述】:我有显示元素列表的活动,以允许用户选择其中一个。此活动(与应用程序中的所有其他活动相同)具有 ActionBar
和活动标题。此栏是可滚动的,因此当用户向下滚动列表时,它会消失以在屏幕上显示更多元素。我喜欢这个功能,但我需要在屏幕末尾添加CheckBox
。没错,活动开始后,它显示在屏幕下方,用户必须向下滚动才能看到它。是否可以使从一开始就显示的复选框并且仅将列表扩展到ActionBar
的空间?
启动后的活动,其中复选框在屏幕下方不可见:
向下滚动后的活动:
预期结果 - 从一开始就显示复选框
我的布局代码很简单:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_
android:layout_>
<FrameLayout
android:id="@+id/pnSearch"
android:layout_
android:layout_>
<EditText
android:layout_
android:layout_
android:id="@+id/edSearch"
android:layout_gravity="center_horizontal"
android:inputType="text"
android:drawableLeft="@android:drawable/ic_menu_search"
android:maxLines="1" />
<ImageButton
android:id="@+id/btnSearchClear"
android:layout_
android:layout_
android:layout_marginRight="10dp"
android:layout_marginEnd="10dp"
android:layout_gravity="end|center_vertical"
android:background="@android:drawable/ic_menu_close_clear_cancel"
android:contentDescription="@null" />
</FrameLayout>
<ListView
android:id="@+id/listView"
android:layout_
android:layout_
android:layout_weight="1" />
<LinearLayout
android:id="@+id/pnShowOnlyAvailable"
android:layout_
android:layout_
android:layout_gravity="bottom">
<CheckBox
android:id="@+id/chbShowOnlyAvailable"
android:layout_
android:layout_
android:focusable="false"
android:padding="10dp"
android:focusableInTouchMode="false"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/title_show_only_available"/>
</LinearLayout>
</LinearLayout>
【问题讨论】:
使用RelativeLayout
或 ConstraintLayout
,目前您正在使用 LinearLayout
(所有项目都以线性方式,即彼此下方)。
感谢您的建议。我尝试将布局重写为 ConstraintLayout
并使用 CheckBox
约束到父底部,但行为仍然相同
【参考方案1】:
您可以尝试使用RelativeLayout
而不是LinearLayout
,并将您的视图的android:layout_alignParentBottom
参数设置为true
类似这样的:
<?xml version="1.0" encoding="utf-8"?>
<!-- RelativeLayout instead of LinearLayout -->
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_>
<FrameLayout
android:id="@+id/pnSearch"
android:layout_
android:layout_>
<EditText
android:layout_
android:layout_
android:id="@+id/edSearch"
android:layout_gravity="center_horizontal"
android:inputType="text"
android:drawableLeft="@android:drawable/ic_menu_search"
android:maxLines="1" />
<ImageButton
android:id="@+id/btnSearchClear"
android:layout_
android:layout_
android:layout_marginRight="10dp"
android:layout_marginEnd="10dp"
android:layout_gravity="end|center_vertical"
android:background="@android:drawable/ic_menu_close_clear_cancel"
android:contentDescription="@null" />
</FrameLayout>
<!-- height edited to "match_parent", weight removed-->
<ListView
android:id="@+id/listView"
android:layout_
android:layout_
android:layout_below="@id/pnSearch"/>
<!-- layout_alignParentBottom parameter added -->
<LinearLayout
android:id="@+id/pnShowOnlyAvailable"
android:layout_
android:layout_
android:layout_alignParentBottom="true">
<CheckBox
android:id="@+id/chbShowOnlyAvailable"
android:layout_
android:layout_
android:focusable="false"
android:padding="10dp"
android:focusableInTouchMode="false"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/title_show_only_available"/>
</LinearLayout>
</RelativeLayout>
【讨论】:
以上是关于使用可滚动的 ActionBar 始终显示元素的主要内容,如果未能解决你的问题,请参考以下文章