嗯,很遗憾,当我的应用已经完成并且功能齐全时,我会遇到不同的屏幕尺寸。
我找到了关于不同设备/分辨率/ dpi实现的千个答案,我试图从每个设备中学到一些东西。
我的目标是不使用不同的密度文件夹,而是为每个布局分辨率/ dpi调整现有图片的大小/重新定位。由于调整大小而导致的图片模糊不清对我来说并不重要。我的应用程序是一个学校项目,我需要在几天内启动它。
我的想法是创建一组巨大的布局文件夹,如:
layout-normal-mdpi
layout-normal-hdpi
layout-normal-xhdpi
layout-normal-xxhdpi
layout-normal-xxxhdpi
layout-large-mdpi
layout-large-hdpi
layout-large-xhdpi
layout-large-xxhdpi
layout-large-xxxhdpi
layout-xlarge-mdpi
layout-xlarge-hdpi
layout-xlarge-xhdpi
layout-xlarge-xxhdpi
layout-xlarge-xxxhdpi
在此处复制/粘贴我的活动,并使用所需的DP值设置每个活动对象,以使应用程序在大多数设备上可用/可查看。
在此之后,我将创建尽可能多的虚拟设备来正确测试和编辑图形。
再次,我通过这种方式失败了(除了优质的DPI分辨率)?
您是否有更好的想法让我的应用与大多数设备兼容?
我的应用程序大部分都是以平板电脑为目标,我想让它与4英寸以上的手机兼容。
上一个问题:
使用像我这样的密度值:
layout-normal -hdpi
是一个很好的实践?它将在未来的Android版本中实现吗?或者最好避免像我们这样的DPI值:
布局正常
非常感谢您的帮助。
这是我作为Galaxy S7 Edge创建的虚拟设备的屏幕截图。它加载 layout-normal-xxxhdpi 布局。
答案 0 :(得分:2)
我建议您不要创建所有这些布局,但要创建不同的dimens.xml文件,这样您就必须创建一个布局,每个视图都有一个大小属性,Android会根据设备屏幕尺寸自动生成。 这是一个例子:
布局:
<ImageView
android:id="@+id/image_cat"
android:layout_width="@dimen/width_category_image_carousel"
android:layout_height="0dp"
android:layout_weight="2"
android:foregroundGravity="center_horizontal|bottom" />
sw300dp的文件DIMENS.XML(这表示最小宽度,无论方向,都必须为300dp)
<resources >
<dimen name="width_category_image_carousel">220dp</dimen>
</resources>
您必须根据要支持的不同大小的屏幕在资源目录的values目录中创建更多文件dimens.xml。 您可以在此处找到有关如何定义不同尺寸的更多信息: https://developer.android.com/guide/practices/screens_support.html#NewQualifiers
答案 1 :(得分:0)
再好吧,我正在以这种方式失败(除了优质的DPI 分辨率)?
布局可能完全不同。某些视图可能不在屏幕上。某些文字可能不包含在其布局中。当然,ImageViews会被拉伸。
您是否有更好的想法让我的应用与大多数设备兼容?
是。您可以根据layout_weight属性构建布局。
https://developer.android.com/guide/topics/ui/layout/linear.html
这适用于LinearLayout,但也可以稍微不同的方式使用RelativeLayout。 此属性的目标是为布局内的每个视图提供总大小的一定百分比。
使用的例子。
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="5">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="1" />
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3"
android:text="2" />
<ImageView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="3" />
</LinearLayout>
通过这种方式,您可以构建UI,使其适应每种屏幕尺寸和密度。
但要小心,有关于使用此属性的警告。如果您使用具有layout_weight
属性的嵌套布局,则渲染视图的效果将显着降低。
答案 2 :(得分:0)
假设您关注的图像质量因为根据可用空间调整大小,我会执行以下操作:
在res / values中,我将创建一个drawables.xml文件:
<drawable name="image1">@drawable/image1_360</drawable>
在values-hdpi中,我会用
替换该图像 <drawable name="image1">@drawable/image1_540</drawable>
,类似于xhdpi和xxhdpi
在values-w600dp中,我会用
替换该图像<drawable name="image1">@drawable/image1_540</drawable>
并且类似地用于更高密度的桶
在values-w720dp中,我会用
替换该图像<drawable name="image1">@drawable/image1_720</drawable>
和值-w720dp-hdpi with
<drawable name="image1">@drawable/image1_1080</drawable>
在values-w1000dp中,我会用
替换该图像<drawable name="image1">@drawable/image1_1080</drawable>
这可能会根据您的实际需要而有所不同,但我们的想法是将值文件夹用于不同的屏幕尺寸&amp;密度桶组合,并使用可绘制的XML标记引用drawable。