如何在运行时基于设备(手机或平板电脑)更改if-else语句?

时间:2017-07-27 13:05:57

标签: android android-layout

要确定设备类型(即手机或平板电脑),Determine if the device is a smartphone or tablet? “isTablet”是保存设备类型的变量。 要在java类中动态更改图标:

if(isTablet){
// apply tablet icon
}else{
//apply phone icon
}

但是,如果我有两组图标(一组用于手机,另一组用于尺寸大于手机图标的平板电脑)那么,如何使用if-else语句动态设置图标?

3 个答案:

答案 0 :(得分:1)

编辑:

您想要使用平板电脑和智能手机的特定设置。在这种情况下,您不能只使用屏幕密度,因为它并不总是只与屏幕尺寸相关。

检查此问题并回答如何确定它是平板电脑还是智能手机:Determine if the device is a smartphone or tablet?

您不需要在任何设备屏幕上手动更改图标,它会自动选择合适的密度。

您的图标应该有多种尺寸,每个屏幕密度一个,但它们必须位于密度文件夹中。

您会注意到您的应用包含以drawable-开头的文件夹,例如drawable-xhdpi。这些是密​​度(xhdpi等)。您可以找到每种尺寸on the documentation的规格。 为您的图标生成每个尺寸并放入这些文件夹,即可完成。

启动器图标也应放在这样的文件夹中,但理想情况下应放在" mipmap-xhdpi"和相关的文件夹。您可以查看this answer,其中包含有关mipmap和drawable文件夹的详细信息。

答案 1 :(得分:0)

不幸的是,你不能以编程方式执行此操作。

但是,您可以将drawable放在一个文件夹数组中,以获得(接近)您想要的效果。

屏幕尺寸由它们的尺寸和像素密度定义,这为您提供了一些看起来像这样的选项:

抽拉-大HDPI, 提拉 - XLARGE,华电国际, 提拉 - 大xhdpi, 提拉 - XLARGE-xhdpi, 等...

例如,nexus 7平板电脑被认为是大型hdpi设备。相比之下,手机可能被认为是普通的mdpi设备。

可在此处找到广泛的屏幕指标列表:https://material.io/devices/

您也可以参考支持多种屏幕尺寸的文档:https://developer.android.com/guide/practices/screens_support.html

答案 2 :(得分:0)

在我看来,问题不应该是“用户是手机还是平板电脑”,因为这隐藏了真正的问题:“设备上的用户是否足够大,我应该显示不同的用户界面?”

通常认为,任何宽度至少为600dp(最短尺寸)的设备都是用于这些目的的“平板电脑”。事实证明,Android资源框架使得在这些情况下使用不同的drawable非常容易。

您可能已经将图标拆分为不同的分辨率:

/res/drawable-mdpi/icon.png
/res/drawable-xhdpi/icon.png
etc

使用相同的模式,但为“平板电脑”版本添加sw600dp限定符:

/res/drawable-sw600dp-mdpi/icon.png
/res/drawable-sw600dp-xhdpi/icon.png
etc

现在根本不需要编写任何Java代码。如果您有<ImageView>标记指定android:src="@drawable/icon",它会自动在较小的屏幕上使用“手机”版本,并在任何至少600dp宽的屏幕上使用“平板电脑”版本。