【问题标题】:Different width for Navigation Drawer in Tablet and Phone平板电脑和手机导航抽屉的宽度不同
【发布时间】:2015-04-18 21:59:48
【问题描述】:
我正在尝试为我的一个项目和here 实施材料设计,提到了以下内容,
nav抽屉最大宽度为标准的5倍
增量(移动设备上为 56dp,平板电脑上为 64dp)。
所以我想知道如何为手机和平板电脑的导航抽屉实现这些宽度。我想为各个设备(手机或平板电脑)制作不同的宽度。
我很想使用 XML,即使这也可以使用 Java 来完成。
谢谢。
【问题讨论】:
标签:
android
android-layout
material-design
tablet
android-screen-support
【解决方案1】:
在您的项目中创建 values-sw600dp 文件夹并在其中添加 dimens.xml 文件。
在 dimens.xml 文件中定义 values 和 values-sw600dp 文件夹的宽度
对于值-sw600dp/dimens.xml
<resources>
<dimen name="width">300dp</dimen></resources>
对于值/dimens.xml
<resources><dimen name="width">150dp</dimen> </resources>
以这种方式调用它
android:layout_width="@dimens/width"
【解决方案2】:
你需要为每个设备定义两个不同的dimens.xml,然后你只需要从你的布局中引用dimen
├── res
│ ├── values
│ │ ├── dimens.xml // Contains an item with 56dp
│ ├── values-sw600dp
│ │ ├── dimens.xml // Contains an item with 64dp
【解决方案3】:
在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;
}
顺便说一句,在您的情况下,我应该使用之前的答案(每个版本/模式/设备的维度)。