Android:如果宽度小于特定DP,则提供资源

6

如何在Android中使用资源限定符系统,以指定只有在宽度小于特定值时才应用某个资源?

举例来说,假设我想要在当前可用宽度高达320dp的情况下提供一个布局,而对于所有其他情况则提供另一个布局。以下是可能的解决方案:

layout-w320dp/mylayout.xml
layout/mylayout.xml

然而,根据我对资源匹配算法的理解,即使是一个大设备(比如横向放置的平板电脑)也符合w320dp - 因为可用宽度将大于320dp。因此,即使是更大的手机和平板电脑也总是选择从layout-w320dp资源中选取。只有当可用宽度小于320dp时才会选择来自layout文件夹的默认资源。那么,如何使用Android资源匹配系统表达“小于”关系呢?

我不认为你可以具体地做到这一点。你可以做所有大于某个值的部分,剩下的就是小的部分了。如果还有其他解决方案我很感兴趣。 - Ryan Heitner
如果您想使用相同的布局,请使用“layout-w400dp”。 - Mikooos
2个回答

7

糟糕!在发布问题后,我意识到解决这个问题的一种方法是否定方程,即:

layout-w320dp/mylayout.xml --> layout for screens larger than 320dp
layout/mylayout.xml  --> layout for up to 320dp

然而,我仍然想知道是否可以实现原始的“小于”关系,因为这使意图更加清晰。


0
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

float density  = getResources().getDisplayMetrics().density;
float dpHeight = metrics.heightPixels / density;
float dpWidth  = metrics.widthPixels / density;

if(dpWidth >= 360){
    //change your resource      
}

这个方法可以实现,但问题是如何使用框架资源限定符系统来实现。 - curioustechizen
将像素除以设备密度,将返回与您的框架实际对应的密度/像素。我不知道Android系统是否有这样的框架,因为他们已经通过资源文件夹名称在系统内进行管理。 - Barışcan Kayaoğlu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接