平板电脑和 Phone 中导航抽屉的宽度不同
Different width for Navigation Drawer in Tablet and Phone
我正在尝试为我的一个项目实施 material 设计 here,提到以下内容,
The maximum width of the nav drawer is 5 times the standard
increment (56dp on mobile and 64dp on tablet).
所以我想知道如何为手机和平板电脑的导航抽屉实现这些宽度。我想为各自的设备设置不同的宽度,phone 或平板电脑。
我很乐意使用 XML,即使这也可以使用 Java 来完成。
谢谢。
您需要为每个设备定义两个不同的dimens.xml,然后您只需要从您的布局中引用尺寸
├── res
│ ├── values
│ │ ├── dimens.xml // Contains an item with 56dp
│ ├── values-sw600dp
│ │ ├── dimens.xml // Contains an item with 64dp
在您的项目中创建 values-sw600dp 文件夹并在其中添加 dimens.xml 文件。
在 values 和 values-sw600dp 文件夹的 dimens.xml 文件中定义宽度
对于values-sw600dp/dimens.xml
<resources>
<dimen name="width">300dp</dimen></resources>
对于values/dimens.xml
<resources><dimen name="width">150dp</dimen> </resources>
这样调用
android:layout_width="@dimens/width"
在 java 中,我做了以下操作来固定纵向和横向模式的宽度,您可以使用带有显示指标的 ifs 将其扩展到显示器。
// 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;
}
顺便说一句,在你的情况下,我应该使用之前的答案(每个 version/mode/device 的维度)。
我正在尝试为我的一个项目实施 material 设计 here,提到以下内容,
The maximum width of the nav drawer is 5 times the standard increment (56dp on mobile and 64dp on tablet).
所以我想知道如何为手机和平板电脑的导航抽屉实现这些宽度。我想为各自的设备设置不同的宽度,phone 或平板电脑。
我很乐意使用 XML,即使这也可以使用 Java 来完成。
谢谢。
您需要为每个设备定义两个不同的dimens.xml,然后您只需要从您的布局中引用尺寸
├── res
│ ├── values
│ │ ├── dimens.xml // Contains an item with 56dp
│ ├── values-sw600dp
│ │ ├── dimens.xml // Contains an item with 64dp
在您的项目中创建 values-sw600dp 文件夹并在其中添加 dimens.xml 文件。 在 values 和 values-sw600dp 文件夹的 dimens.xml 文件中定义宽度
对于values-sw600dp/dimens.xml
<resources>
<dimen name="width">300dp</dimen></resources>
对于values/dimens.xml
<resources><dimen name="width">150dp</dimen> </resources>
这样调用
android:layout_width="@dimens/width"
在 java 中,我做了以下操作来固定纵向和横向模式的宽度,您可以使用带有显示指标的 ifs 将其扩展到显示器。
// 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;
}
顺便说一句,在你的情况下,我应该使用之前的答案(每个 version/mode/device 的维度)。