/** * build the MiniDrawer * * @param ctx * @return */ public View build(Context ctx) { mContainer = new LinearLayout(ctx); if (mInnerShadow) { if (!mInRTL) { mContainer.setBackgroundResource(R.drawable.material_drawer_shadow_left); } else { mContainer.setBackgroundResource(R.drawable.material_drawer_shadow_right); } } // create and append recyclerView mRecyclerView = new RecyclerView(ctx); mContainer.addView( mRecyclerView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); // set the itemAnimator mRecyclerView.setItemAnimator(new DefaultItemAnimator()); // some style improvements on older devices mRecyclerView.setFadingEdgeLength(0); // set the drawing cache background to the same color as the slider to improve performance // mRecyclerView.setDrawingCacheBackgroundColor(UIUtils.getThemeColorFromAttrOrRes(mActivity, // R.attr.material_drawer_background, R.color.material_drawer_background)); mRecyclerView.setClipToPadding(false); // additional stuff mRecyclerView.setLayoutManager(new LinearLayoutManager(ctx)); // adapter mDrawerAdapter = new DrawerAdapter(); mRecyclerView.setAdapter(mDrawerAdapter); // if the activity with the drawer should be fullscreen add the padding for the statusbar if (mDrawer != null && mDrawer.mDrawerBuilder != null && (mDrawer.mDrawerBuilder.mFullscreen || mDrawer.mDrawerBuilder.mTranslucentStatusBar)) { mRecyclerView.setPadding( mRecyclerView.getPaddingLeft(), UIUtils.getStatusBarHeight(ctx), mRecyclerView.getPaddingRight(), mRecyclerView.getPaddingBottom()); } // if the activity with the drawer should be fullscreen add the padding for the navigationBar if (mDrawer != null && mDrawer.mDrawerBuilder != null && (mDrawer.mDrawerBuilder.mFullscreen || mDrawer.mDrawerBuilder.mTranslucentNavigationBar)) { mRecyclerView.setPadding( mRecyclerView.getPaddingLeft(), mRecyclerView.getPaddingTop(), mRecyclerView.getPaddingRight(), UIUtils.getNavigationBarHeight(ctx)); } // set the adapter with the items createItems(); return mContainer; }
public Materialize build() { // we need an activity for this if (mActivity == null) { throw new RuntimeException("please pass an activity"); } // if the user has not set a drawerLayout use the default one :D mScrimInsetsLayout = (ScrimInsetsFrameLayout) mActivity.getLayoutInflater().inflate(R.layout.materialize, mRootView, false); // check if the activity was initialized correctly if (mRootView == null || mRootView.getChildCount() == 0) { throw new RuntimeException( "You have to set your layout for this activity with setContentView() first. Or you build the drawer on your own with .buildView()"); } // get the content view View originalContentView = mRootView.getChildAt(0); boolean alreadyInflated = originalContentView.getId() == R.id.materialize_root; // define the statusBarColor if (mStatusBarColor == 0 && mStatusBarColorRes != -1) { mStatusBarColor = mActivity.getResources().getColor(mStatusBarColorRes); } else if (mStatusBarColor == 0) { mStatusBarColor = UIUtils.getThemeColorFromAttrOrRes( mActivity, R.attr.colorPrimaryDark, R.color.materialize_primary_dark); } // handling statusBar / navigationBar tinting mScrimInsetsLayout.setInsetForeground(mStatusBarColor); mScrimInsetsLayout.setTintStatusBar(mTintStatusBar); mScrimInsetsLayout.setTintNavigationBar(mTintNavigationBar); // if we are fullscreen remove all insets mScrimInsetsLayout.setSystemUIVisible(!mFullscreen && !mSystemUIHidden); // do some magic specific to the statusBar if (!alreadyInflated && mTranslucentStatusBar) { if (Build.VERSION.SDK_INT >= 19 && Build.VERSION.SDK_INT < 21) { UIUtils.setTranslucentStatusFlag(mActivity, true); } if (Build.VERSION.SDK_INT >= 19) { if (mTranslucentStatusBarProgrammatically) { mActivity .getWindow() .getDecorView() .setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); } } if (Build.VERSION.SDK_INT >= 21) { UIUtils.setTranslucentStatusFlag(mActivity, false); if (mTranslucentStatusBarProgrammatically) { mActivity.getWindow().setStatusBarColor(Color.TRANSPARENT); } } mScrimInsetsLayout.getView().setPadding(0, UIUtils.getStatusBarHeight(mActivity), 0, 0); } // do some magic specific to the navigationBar if (!alreadyInflated && mTranslucentNavigationBar) { if (Build.VERSION.SDK_INT >= 19 && Build.VERSION.SDK_INT < 21) { UIUtils.setTranslucentNavigationFlag(mActivity, true); } if (Build.VERSION.SDK_INT >= 19) { if (mTranslucentNavigationBarProgrammatically) { mActivity .getWindow() .getDecorView() .setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); UIUtils.setTranslucentNavigationFlag(mActivity, true); } } if (Build.VERSION.SDK_INT >= 21) { if (mTranslucentNavigationBarProgrammatically) { mActivity.getWindow().setNavigationBarColor(Color.TRANSPARENT); } } } // set the flags if we want to hide the system ui if (mSystemUIHidden) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { View decorView = this.mActivity.getWindow().getDecorView(); decorView.setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); } } // only add the new layout if it wasn't done before if (!alreadyInflated) { // remove the contentView mRootView.removeView(originalContentView); } else { // if it was already inflated we have to clean up again mRootView.removeAllViews(); } // create the layoutParams to use for the contentView FrameLayout.LayoutParams layoutParamsContentView = new FrameLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); // if we have a translucent navigation bar set the bottom margin if (!mFullscreen && mTranslucentNavigationBar && Build.VERSION.SDK_INT >= 19) { layoutParamsContentView.bottomMargin = UIUtils.getNavigationBarHeight(mActivity); } // add the contentView to the drawer content frameLayout mScrimInsetsLayout.getView().addView(originalContentView, layoutParamsContentView); // if we have a mContainer we use this one mContentRoot = mScrimInsetsLayout.getView(); if (mContainer != null) { mContentRoot = mContainer; mContentRoot.addView( mScrimInsetsLayout.getView(), new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); } // set the id so we can check if it was already inflated mContentRoot.setId(R.id.materialize_root); // make sure we have the correct layoutParams if (mContainerLayoutParams == null) { mContainerLayoutParams = new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); } // add the drawerLayout to the root mRootView.addView(mContentRoot, mContainerLayoutParams); // set activity to null as we do not need it anymore this.mActivity = null; // create a Materialize object with the builder return new Materialize(this); }