Otu*_*uyh 4 android android-layout android-support-library android-design-library android-coordinatorlayout
我有两个问题:
1)当我的片段中没有NestedScrollView时,我能够阻止"扩展"功能,但是当我这样做时,它会不断扩展,即使使用:
appBarLayout.setExpanded(false);
appBarLayout.setActivated(false);
Run Code Online (Sandbox Code Playgroud)
当片段中有NestedScrollView时,有什么方法可以阻止工具栏的扩展?
2)即使我没有NestedScrollView,当我在工具栏中触摸我的手指时,我仍然能够展开它,并向下和向上滚动."扩张和崩溃"仍然有效.
当我触摸手指并向下和向上滚动时,如何禁用折叠操作并展开工具栏?
谢谢.
Edit1(更多信息):
这是我的片段的代码,在FrameLayout内部.
<android.support.v4.widget.NestedScrollView>
<LinearLayout>
<TextView />
<android.support.v7.widget.RecyclerView />
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
Run Code Online (Sandbox Code Playgroud)
这是我的活动结构:
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<android.support.design.widget.CoordinatorLayout>
<android.support.design.widget.AppBarLayout>
<android.support.design.widget.CollapsingToolbarLayout>
<android.support.v7.widget.Toolbar />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<FrameLayout
android:id="@+id/frame_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>
...
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)
编辑2:现在唯一的问题是: 当我在片段中有NestedScrollView时,有什么方法可以阻止工具栏的扩展?
rom*_*4ek 10
我到目前为止还遇到过这个问题,当我需要它可折叠或可扩展时,通过改变AppBarLayout
高度来重新解决它.因此,首先,您需要在默认dimens.xml
文件中定义下两个项目:
<dimen name="toolbar_height">56dp</dimen>
<dimen name="toolbar_expanded_height">256dp</dimen> // this can be whatever you need
Run Code Online (Sandbox Code Playgroud)
然后,防止AppBarLayout
和Toolbar
扩展/折叠的完整方法是:
public void disableCollapse() {
appbar.setActivated(false);
//you will need to hide also all content inside CollapsingToolbarLayout
//plus you will need to hide title of it
backdrop.setVisibility(View.GONE);
shadow.setVisibility(View.GONE);
collapsingToolbar.setTitleEnabled(false);
AppBarLayout.LayoutParams p = (AppBarLayout.LayoutParams) collapsingToolbar.getLayoutParams();
p.setScrollFlags(0);
collapsingToolbar.setLayoutParams(p);
collapsingToolbar.setActivated(false);
CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) appbar.getLayoutParams();
lp.height = getResources().getDimensionPixelSize(R.dimen.toolbar_height);
appbar.requestLayout();
//you also have to setTitle for toolbar
toolbar.setTitle(title); // or getSupportActionBar().setTitle(title);
}
Run Code Online (Sandbox Code Playgroud)
您可能还需要将状态栏高度添加到工具栏的高度(例如,如果您使用)fitsSystemWindows=true
,那么您需要更改
lp.height = getResources().getDimensionPixelSize(R.dimen.toolbar_height);
Run Code Online (Sandbox Code Playgroud)
至
lp.height = getResources().getDimensionPixelSize(R.dimen.toolbar_height) + (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ? getStatusBarHeight() : 0);
Run Code Online (Sandbox Code Playgroud)
和getStatusBarHeight()
方法实现:
protected int getStatusBarHeight() {
int result = 0;
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
result = getResources().getDimensionPixelSize(resourceId);
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
而且,最后,如果你想使你AppBarLayout
和Toolbar
可折叠/再次扩张,你必须使用下一个方法:
public void enableCollapse() {
appbar.setActivated(true);
collapsingToolbar.setActivated(true);
//you will need to show now all content inside CollapsingToolbarLayout
//plus you will need to show title of it
backdrop.setVisibility(View.VISIBLE);
shadow.setVisibility(View.VISIBLE);
collapsingToolbar.setTitleEnabled(true);
AppBarLayout.LayoutParams p = (AppBarLayout.LayoutParams) collapsingToolbar.getLayoutParams();
p.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED);
collapsingToolbar.setLayoutParams(p);
CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) appbar.getLayoutParams();
lp.height = getResources().getDimensionPixelSize(R.dimen.toolbar_expanded_height);
appbar.requestLayout();
//you also have to setTitle for toolbar
toolbar.setTitle(title); // or getSupportActionBar().setTitle(title);
}
Run Code Online (Sandbox Code Playgroud)
希望有所帮助!
要使用手指阻止滚动,您AppBarLayout
必须使用DragCallback
界面:
AppBarLayout layout = ...;
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) layout.getLayoutParams();
AppBarLayout.Behavior behavior = (AppBarLayout.Behavior) params.getBehavior();
behavior.setDragCallback(new AppBarLayout.Behavior.DragCallback() {
@Override
public boolean canDrag(@NonNull AppBarLayout appBarLayout) {
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
为了防止AppBarLayout
由于滚动而NestedScrollView
滚动,必须从以下行为中删除该行为NestedScrollView
:
NestedScrollView nestedScrollView = ...;
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) nestedScrollView.getLayoutParams();
params.setBehavior(null);
Run Code Online (Sandbox Code Playgroud)
您可以尝试的另一件事是从AppBarLayout子项中删除滚动标志:
AppBarLayout layout = ...;
View child = layout.getChildAt(0);
AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams) child.getLayoutParams();
params.setScrollFlags(0);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4358 次 |
最近记录: |