平板电脑和 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 的维度)。