I was trying to implement material design for one of my project and here, the following is mentioned,
The maximum width of the nav drawer is 5 times the standard
increment (56dp on mobile and 64dp on tablet).
So I would like to know how to implement these width for navigation drawer for mobile and tablets. I want to make different width to respective devices, either phone or tablets.
I would love to use XML even if this also can be done using Java.
Thank you.
Create values-sw600dp folder in your project and add dimens.xml file in it.
Define width in dimens.xml file of both values and values-sw600dp folder
For values-sw600dp/dimens.xml
<resources>
<dimen name="width">300dp</dimen></resources>
For values/dimens.xml
<resources><dimen name="width">150dp</dimen> </resources>
Call this in this manner
android:layout_width="@dimens/width"
You need to define two different dimens.xml corresponding to each device, then you just need to reference the dimen from your layouts
├── res
│ ├── values
│ │ ├── dimens.xml // Contains an item with 56dp
│ ├── values-sw600dp
│ │ ├── dimens.xml // Contains an item with 64dp
In java, I did the following to fix the width of portrait and landscape modes, you can extend it to the display using ifs with display metrics.
// Setup Navigation drawer
drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
View drawer = findViewById(R.id.scrimInsetsFrameLayout);
// Fix right margin to 56dp (portrait)
ViewGroup.LayoutParams layoutParams = drawer.getLayoutParams();
DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
layoutParams.width = displayMetrics.widthPixels - (56 * Math.round(displayMetrics.density));
}
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
layoutParams.width = displayMetrics.widthPixels + (20 * Math.round(displayMetrics.density)) - displayMetrics.widthPixels / 2;
}
BTW in your case I should use the answers before (dimen for each version/mode/device).