折叠工具栏布局在不同的片段上使用相同的工具栏,具体取决于行为

时间:2015-08-24 13:20:05

标签: android android-fragments android-appcompat android-collapsingtoolbarlayout android-appbarlayout

我尝试通过提供一些Material Design行为来更新我的应用。到目前为止,我的应用程序有一个导航抽屉和一个MainActivity,它根据抽屉菜单中的项目点击加载所需的片段(如下所示:)

enter image description here

点击" Consejos"它将片段替换为欲望内容,如下所示

MainActivity

private void selectItem(String title, int id) {
        Bundle args = new Bundle();
        args.putString(PlaceholderFragment.ARG_SECTION_TITLE, title);

        Fragment fragment = PlaceholderFragment.newInstance(title);
        fragment.setArguments(args);
        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager
                .beginTransaction()
                .replace(R.id.main_content, fragment)
                .commit();


        switch (id) {
            case R.id.nav_localizacion:
                //Snackbar.make(mSnackBarView, R.string.menu_localization, Snackbar.LENGTH_SHORT).show();
                mCurrentSelectedPosition = 0;
                LocalizacionFragment fragment_localizacion = new LocalizacionFragment();
//                fragmentManager = getSupportFragmentManager();
//                Snackbar.make(mSnackBarView, R.string.menu_localization, Snackbar.LENGTH_SHORT).show();
                fragmentManager
                        .beginTransaction()
                        .replace(R.id.main_content, fragment_localizacion)
                        .commit();
                break;
            case R.id.nav_productos:
                Snackbar.make(mSnackBarView, R.string.menu_productos, Snackbar.LENGTH_SHORT).show();
                mCurrentSelectedPosition = 1;
                fragmentManager
                        .beginTransaction()
                        .replace(R.id.main_content, fragment)
                        .commit();
                break;
            case R.id.nav_consejos:
                Snackbar.make(mSnackBarView, R.string.menu_consejos, Snackbar.LENGTH_SHORT).show();
                mCurrentSelectedPosition = 3;
                ConsejosFragment fragment_consejo = new ConsejosFragment();
//                final Fragment fragment_consejo = new ConsejosFragment();
                fragmentManager
                        .beginTransaction()
                        .replace(R.id.main_content, fragment_consejo)
                        .commit();
//                getSupportFragmentManager().beginTransaction().add(R.id.main_content, fragment_consejo).commit();
                break;
            default:
                break;
        }


        drawerLayout.closeDrawers(); // Cerrar drawer

        setTitle(title); // título actual

    }

它打开了这个:

enter image description here

然后,如果你点击" Recetas"再次用欲望内容替换片段:

enter image description here

但是,如果你点击一个项目,我想打开另一个片段并使用AppBarLayout和CollapsingToolbarLayout来显示带有配方的图像。

这是食谱内容描述的布局:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/main_content_recetas"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

<android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="@dimen/detail_backdrop_height"
        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">

            <ImageView
                android:id="@+id/backdrop"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:fitsSystemWindows="true"
                android:scaleType="centerCrop"
                android:src="@drawable/redono_ternera_mechado"
                app:layout_collapseMode="parallax" />


            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar_view"
                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>

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:paddingTop="24dp">

            <include layout="@layout/card_layout" />

            <include layout="@layout/card_layout" />

            <include layout="@layout/card_layout" />

        </LinearLayout>

    </android.support.v4.widget.NestedScrollView>

</android.support.design.widget.CoordinatorLayout>

这是RecipeDescription Fragment的代码

public class RecetaViewFragment extends Fragment {

    private Context context;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        /* Inflamos el layout */
        View v = inflater.inflate(R.layout.recetas_descripcion_layout, container, false);
        ImageView imageView = (ImageView) v.findViewById(R.id.backdrop);
        Picasso.with(context).load(R.drawable.sopa_goulash_ternera).into(imageView);

        Toolbar toolbar = (Toolbar) v.findViewById(R.id.toolbar_view);
        ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
        if (toolbar != null) {
            toolbar.setSubtitle("Descripción");
        }
        context = v.getContext();
        return v;
    }

但这是运行应用程序时发生的事情:

enter image description here

enter image description here

它在原始工具栏中嵌入了折叠工具栏,我的问题是我的方法是不是正确的方法。我的意思是,我必须只有一个工具栏然后应用或不应用折叠行为,无论我是否需要它,或者我必须找到一种方法来隐藏原始工具栏并使用这个(但是当我想要给出时会发生什么正确的导航到我的应用程序?)

谢谢,如果需要,请向我询问更多代码

1 个答案:

答案 0 :(得分:0)

就我而言,我遇到了类似的问题。

我的案例:

我想在Activity中使用工具栏,因为我有一个导航抽屉,但也想在片段中使用折叠工具栏。

我做了一件我很满意的改变。

在片段工具栏中我添加了这个:

android:layout_height="0dp"