首页 文章

导航架构组件 - 具有CollapsingToolbar的详细信息视图

提问于
浏览
26

新导航组件的拟议实践在I / O中提供,具有以下模板和建议的理念:

  • 应用程序的一个活动

  • 活动包含工具栏和底部导航栏

典型的应用程序通常具有详细视图,其中包含CollapsingToolbar . 如何在该架构下构建它?

  • 将工具栏移动到每个片段XML?

  • 以编程方式实施折叠工具栏?

  • 将细节片段移动到它自己的活动(它可能会使用它自己的深层链接)和'break'哲学?

2 回答

  • 0

    尝试

    appBarLayout = (AppBarLayout) findViewById(R.id.appbar);
    
    
    if(expandToolbar){
                    appBarLayout.setExpanded(true,true);
                }else{
                    appBarLayout.setExpanded(false,true);
                }
    

    这是一个usufal链接disable expand on CollapsingToolbarLayout for certain fragments

    也可以为其他人改变工具的某些部分,你应该在单独的XML中编写自定义工具栏视图,并尝试用语法夸大细节中的自定义视图,然后隐藏旧工具栏中未使用的元素(如果有的话) .

    setSupportActionBar(toolbar);
    View logo = getLayoutInflater().inflate(R.layout.view_logo, null);
    toolbar.addView(logo);
    

    这就是你如何隐藏不需要的视图

    for (int i = 0; i < toolbar.getChildCount(); ++i) {
            View child = toolbar.getChildAt(i);
    
            // here u can hide all text views for example.
            if (child instanceof TextView) {
                child.setVisibility(View.GONE );
            }
        }
    

    这种方式比编写两个活动要好得多

  • 0

    我们假设我们有

    • 应用程序的一个活动

    • 活动包含工具栏和底部导航栏

    应用程序所需的工具栏的所有可能外观都应在该单个工具栏中实现,并且可以作为当前活动的片段进行控制 . 不违反依赖性反转原则所有需要活动工具栏中的功能的片段必须实现接口 . 您可以使用OnBackStackChangedListener来检查视图的更新

    getFragmentManager().addOnBackStackChangedListener(
        new FragmentManager.OnBackStackChangedListener() {
            @Override
            public void onBackStackChanged() {
                Fragment visibleFragment = ...
                if(visibleFragment instanceof ToolbarControlFragment) {
                    if(visibleFragment.shouldExpandToolbar()) {
                        // set AppBarLayout expanded state
                    }
                    // ...
                }
            }
        }
    );
    

    当Fragment需要OptionsMenu时,您可能还记得这个原则 .

    我通常建议只有一个由活动控制的底部导航栏和碎片中的几个工具栏 . 这降低了复杂性并使应用程序的组件更加独立 .

相关问题