我有一个抽屉菜单,里面有不同的片段。每个片段
都应该使用一个默认工具栏,除了一个片段
需要折叠工具栏
。
如何在碎片的工具栏之间切换?
您可以轻松地从片段中获取工具栏,然后在片段
中修改或更改该工具栏
的某些属性。
要从您的< code>Activity中获取< code >工具栏,您可以考虑使用此。
Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
现在,您需要在< code>onResume函数中的< code>Toolbar上进行更改,然后在每次从< code>onStop函数内的< code>Fragment返回时撤消更改。否则,当从导航抽屉切换到其他< code >片段时,在< code >片段中所做的更改也将延续到其他片段。
但在您的情况下,我建议每个Fragment
都应该有自己的Toolbar
,这样它们就不会相互冲突,并且可以根据需要进行修改。是的,从活动
中删除工具栏
。
因此,将<code>工具栏</code>添加到<code>片段</code〕的布局中,如下所示。
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimaryDark"/>
然后在片段
中找到它
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment, container, false);
Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar);
// Modify your Toolbar here.
// ...
// For example.
// toolbar.setBackground(R.color.red);
// Create home button
AppCompatActivity activity = (AppCompatActivity) getActivity();
activity.setSupportActionBar(toolbar);
activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
并覆盖 onOptionsItemSelected
函数。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){
case android.R.id.home:
getActivity().onBackPressed();
}
return super.onOptionsItemSelected(item);
}
我发现最好的解决方案很容易崩溃,锁定它(保持在折叠模式)并解锁折叠工具栏。
private void collapseAppBar() {
// Collapse the AppBarLayout with animation
mAppBarLayout.setExpanded(false, true);
}
private void lockAppBar() {
/* Disable the nestedScrolling to disable expanding the
appBar with dragging the nestedScrollView below it */
ViewCompat.setNestedScrollingEnabled(nestedScrollView, false);
/* But still appBar is expandable with dragging the appBar itself
and below code disables that too
*/
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) mAppBarLayout.getLayoutParams();
AppBarLayout.Behavior behavior = (AppBarLayout.Behavior) params.getBehavior();
behavior.setDragCallback(new AppBarLayout.Behavior.DragCallback() {
@Override
public boolean canDrag(AppBarLayout appBarLayout) {
return false;
}
});
}
private void unLockAppBar() {
ViewCompat.setNestedScrollingEnabled(nestedScrollView, true);
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) mAppBarLayout.getLayoutParams();
AppBarLayout.Behavior behavior = (AppBarLayout.Behavior) params.getBehavior();
if (behavior != null) {
behavior.setDragCallback(new AppBarLayout.Behavior.DragCallback() {
@Override
public boolean canDrag(AppBarLayout appBarLayout) {
return true;
}
});
}
}
我以这种方式使用这些函数:
Fragment fragment = null;
Class fragmentClass;
switch (menuItem.getItemId()) {
case R.id.fragment1:
unLockAppBar();
fragmentClass = first_Fragment.class;
break;
case R.id.fragment2:
collapseAppBar();
lockAppBar();
fragmentClass = second_Fragment.class;
break;
case R.id.fragment3:
collapseAppBar();
lockAppBar();
fragmentClass = third_Fragment.class;
break;
看来你想实现这样的目标。
我做了一个带有公共工具栏的活动。切换到折叠工具栏片段时,我使工具栏透明,片段的工具栏接管。切换到其他片段时,工具栏的颜色保持不变。
这允许您在 xml 中管理完整的折叠工具栏的布局结构,并将逻辑保留在 Fragment 中。
希望这会有所帮助。请参阅链接的gif图。
动图要点
问题内容: 我有一个这样布置的应用程序,mainactivity包含2个带有相应片段的选项卡,第一个片段具有可正常使用的回收站视图,我试图在人向上或向下滚动时添加视差效果,不是确保我是否应该将其添加到片段的xml或mainactivity的xml中,我将其添加到mainactivity的xml并将片段包含为我的recyclerview,不用说视差不起作用,现在应用程序无法打开,我立即获取NullP
我正在我的应用程序中使用ViewPager进行滑动效果。 我使用pager.setPageMargin()使下一个视图和上一个视图可见,不幸的是我的下一个视图与当前视图重叠。 下面是我的代码 我在用寻呼机里的片段。我得到的输出与这个线程的附加,但需要视图被适当地放置与out over lapping 上图所标部分应在中心卡后面。
我有一个ViewPagerContainer片段,在应用程序启动时加载。ViewPagerContainer片段将两个选项卡(选项卡A和选项卡B)添加到操作栏。选项卡B有两个项目的列表视图。 我所做的:我在选项卡B片段中的列表视图项上附加了一个click listener,这样当用户单击一个项时,它会在第一个片段(即选项卡B下)内打开另一个片段(子片段)。 我陷入困境的地方:当用户按下后退按钮时,
我所有的片段都是通过(main Active)控制的,在main Active中实现了一个,所有的子片段都是通过抽屉布局的列表项点击推送的。我面临的问题是,在通过抽屉布局推送一个片段后,我想将抽屉图标更改为的后退图标,以便用户可以导航到以前的片段并处理android的回调。id.home在同一个片段中或在主活动中。
我有一个片段,我想在其中使用折叠工具栏布局 当collapsing_toolbar展开时,我希望显示图像,当折叠时,我希望只有@id/custom_layout。custom_layout是一个带有文本视图和图像视图的相对布局。 我想要有完全相同的行为,就像我有以下行为一样: 而不是自定义布局。 为什么这是不工作?即使折叠ToobarLayout扩展我看到的ImageView和自定义布局。 !!注
我试着从一个片段到主要片段。编译器不喜欢我的代码,但我不确定是什么问题。转换片段的最佳实践是什么? //这是我要导航到的主片段的xml 2019-07-12 17:49:45.091 959 4-9594/com.example.cribb E/AndroidRuntime:致命异常:主进程:com.example.cribb,PID:9594 Android.content.res.resour