我有以下布局结构:
RelativeLayout
-LinearLayout(Vertical)
| ...
| ...
-LinearLayout(Vertical)
ListView
ListView
有一堆由ArrayAdapter
设置的项目。目前,只有ListView
可滚动,第一个LinearLayout
保留在其位置。但是,我希望整个屏幕可以滚动,所以如果用户滚动得足够远,ListView
可能占据整个屏幕,如果有足够的列表项。
此图片说明了所需的行为(滚动之前和之后)
红色框是第一个LinearLayout
,绿色框是LinearLayout
,ListView
感谢您的宝贵帮助!
答案 0 :(得分:2)
如果您不必使用RelativeLayout,您可以使用CoordinatorLayout尝试不同的结构,如下所示:
<CoordinatorLayout >
<AppBarLayout >
<CollapsingToolbarLayout >
<!-- first layout with the property layout_scrollFlags="scroll" -->
</CollapsingToolbarLayout >
</AppBarLayout >
<ListView > <!-- or RecyclerView to be more updated -->
</CoordinatorLayout >
如果你必须使用RelativeLayout,你可以选择在Scrollview中实现all(执行不良并重新发明轮子),或者你可以将你的视图添加为listview的标题
-----编辑只是为了清晰起见,这是我的布局
<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:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="it.italia.playground.CollapseActivity">
<android.support.design.widget.AppBarLayout
android:id="@+id/app_bar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginEnd="64dp"
app:expandedTitleMarginStart="48dp"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
android:padding="@dimen/padding16"
app:layout_collapseMode="parallax">
<ImageView
android:id="@+id/image"
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_alignParentTop="true"
android:layout_centerInParent="true"
android:maxHeight="@dimen/padding16"
android:scaleType="centerCrop"
android:src="@drawable/img"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/image"
android:layout_centerInParent="true"
android:layout_marginTop="@dimen/padding16"
android:text="text title"
/>
</RelativeLayout>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_layout"></include>
</android.support.design.widget.CoordinatorLayout>
答案 1 :(得分:1)
像wolfy所说,CoordinatorLayout
是最好的选择,但ListView
在这种情况下不起作用,因为它没有实现与CoordinatorLayout
通信所需的正确回调接口。
CoordinatorLayout
如何实际协调其子视图的滚动?
您需要为实现NestedScrollingChild
接口的View切换ListView
,您实际上不需要为这些方法编写代码,例如RecyclerView
或{{1}为你照顾这项工作;)
反过来,SwipeRefreshLayout
实现了NestedScrollingParent
界面,让您免除其他工作量(google doc):
此接口应由希望支持嵌套子视图委派的滚动操作的ViewGroup子类实现。
如果您需要刷卡刷新操作,CoordinatorLayout
会实现两个接口。查看视图层次结构,它位于SwipeRefreshLayout
和CoordinatorLayout
之间,因此它可以同时处理RecyclerView
和NestedScrollingChild
。
底线:为NestedScrollingParent
切换ListView
或者使ListView实现RecyclerView
。它应该以任何方式工作!
关于使用新APi处理滚动的两个很好的解释:
https://guides.codepath.com/android/Handling-Scrolls-with-CoordinatorLayout
https://lab.getbase.com/nested-scrolling-with-coordinatorlayout-on-android/
代码sample,用于从演示中实现NestedScrollingChild
。
答案 2 :(得分:0)
使用适合屏幕的scrolllayout并使listview包装内容
答案 3 :(得分:0)
您可以使用RecyclerView
代替ListView
,然后将列表打包在NestedScrollView
中并致电ViewCompat.setNestedScrollingEnabled(recyclerView, false)
。最重要的是,您可以使用另一个ScrollView
包含所有内容(图中的红色标记的视图),然后放置NestedScrollView
(绿色标记列表)作为一个孩子在里面。
NestedScrollView
负责动态设置的高度,否则recyclerView只会使用一个固定的高度。请注意,如果列表太长,可能会产生不必要的UI延迟,那么通过在列表中扩展不同的布局,将所有内容设置为适配器中列表的一部分会更有效。另一方面,这可能也有点棘手,因为整个布局现在是列表的一部分,并且所做的所有更改都需要通过适配器。
答案 4 :(得分:0)
这里是解决方案:
#!/bin/bash
for fileName in *.sto; do
protID_list=( $(grep -o "WP_.\{0,11\}" $fileName | sort | uniq) )
echo ${protID_list[@]}
file=$(echo $fileName | cut -d '_' -f 1,2,3)
file=$(echo $file'_protein.faa')
echo $file
for protID in ${protID_list[@]}; do
if [ -n "$protID" ]; then
gawk "/^>/{N=0}/^.*$protID/{N=1} {if(N)print}" $file >>
sequence_protein.file
fi
done
done
<强>输出:强>