有没有办法阻止此ProgressBar
与工具栏一起上下滚动?现在我有两个工具栏,当RecyclerView
中有项目时,它们应该向上和向下滚动,问题是当没有任何结果显示时,滚动行为会影响工具栏下方的布局。看看:
毋庸置疑,在任何情况下都不应滚动进度条。这是布局:
activity_base.xml
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="64dp"
android:minHeight="64dp"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:layout_scrollFlags="scroll|enterAlways|snap"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
<android.support.v7.widget.Toolbar
android:id="@+id/toolbarBottom"
android:layout_width="match_parent"
android:layout_height="64dp"
android:minHeight="64dp"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:layout_gravity="bottom"
app:layout_scrollFlags="scroll|enterAlways|snap"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
android:visibility="visible">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<Spinner
android:id="@+id/spinner_sites"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
<Spinner
android:id="@+id/spinner_sort_field"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
<Spinner
android:id="@+id/spinner_sort_order"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
</LinearLayout>
</android.support.v7.widget.Toolbar>
</android.support.design.widget.AppBarLayout>
<include layout="@layout/activity_masterdetail"/>
<View
android:id="@+id/view_search_tint"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:alpha="0.0"
android:background="#88000000"
android:elevation="2dp"
android:layerType="hardware"
android:visibility="gone" />
<org.cryse.widget.persistentsearch.PersistentSearchView
android:id="@+id/searchview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:elevation="4dp"
app:persistentSV_logoString="@string/app_name"
app:persistentSV_searchTextColor="?android:textColorPrimary"
app:persistentSV_editTextColor="?android:textColorPrimary"
app:persistentSV_editHintText="Search"
app:persistentSV_editHintTextColor="?android:textColorHint"
app:persistentSV_displayMode="toolbar"
app:persistentSV_homeButtonMode="burger"
app:persistentSV_searchCardElevation="2dp"
app:persistentSV_customToolbarHeight="64dp"
app:layout_behavior=".ScrollingSearchViewBehavior"/>
</android.support.design.widget.CoordinatorLayout>
</android.support.v4.widget.DrawerLayout>
包含<include layout="@layout/activity_masterdetail"/>
是指向activity_fragment.xml
的参考号:
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/fragment_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
fragment_list.xml
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="visible"/>
<!-- include pogress bar-->
<include
android:id="@+id/progress_bar"
layout="@layout/progress_bar"
android:visibility="gone" />
</RelativeLayout>
progress_bar
现在只是您常规的磨机进度条运行:
<ProgressBar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.wrap_content.com/apk/res-auto"
android:id="@+id/pbLoading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:visibility="invisible"/>
正如您所看到的,除了SearchView之外,布局非常标准,所以我不知道为什么会出现这个问题。我发现从app:layout_behavior="@string/appbar_scrolling_view_behavior"
移除activity_fragment.xml
会阻止问题发生,但RecyclerView
未与工具栏对齐,结果会显示在整个屏幕上,覆盖工具栏和所有。那肯定不是我想要发生的事情。
将RecyclerView
的可见性标记为“已消失”也会停止ProgressBar
的滚动,但同样它不是集中的,这意味着问题仍然只是我不能滚动屏幕。几乎每个容器中都设置android:fitsSystemWindows="true"
属性也不起作用。我已经尝试过调整几乎所有我认为没有运气的布局属性,任何帮助都会受到赞赏。
答案 0 :(得分:0)
似乎我必须回答我自己的问题,这更像是一种解决方法,但确实有效。我会等待一个“实际”的答案,并在发布时将其标记为。
您需要做的是从app:layout_behavior="@string/appbar_scrolling_view_behavior"
移除activity_fragment.xml
属性,并在ProgressBar
隐藏setVisibility(View.GONE)
之后以编程方式添加该属性。每当您再次显示ProgressBar
时,您还必须确保将其删除。这通常可以在Asynctask的onPostExecute()
和onPreExecute()
方法中完成。为此,您需要保留对@+id/fragment_list
片段的引用。这是代码:
View parent;
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
// keeping a reference to the @+id/fragment_list fragment
parent = container;
// other code
task = new SearchResultsTask();
task.execute();
return view;
}
并SearchResultsTask
AsyncTask
:
@Override
protected void onPostExecute(List s) {
super.onPostExecute(s);
adapter.adds(s);
progressBar.setVisibility(View.GONE);
CoordinatorLayout.LayoutParams params =
(CoordinatorLayout.LayoutParams) parent.getLayoutParams();
// adding the behaviour programatically
params.setBehavior(new AppBarLayout.ScrollingViewBehavior());
parent.requestLayout();
rvList.setVisibility(View.VISIBLE);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
CoordinatorLayout.LayoutParams params =
(CoordinatorLayout.LayoutParams) parent.getLayoutParams();
// removing the behaviour
params.setBehavior(null);
parent.requestLayout();
progressBar.setVisibility(View.VISIBLE);
}