3

我的问题与在 Android 平台上为不同的屏幕密度使用不同的布局有关。

假设我有四个 main.xml 文件(每个文件在它们各自的文件夹中对应的屏幕密度:ldpi、mdpi、hdpi 和 xhdpi),假设它们一开始都是相同的。但是假设我想摆脱一些用于 ldpi 布局的 UI 元素。当 Java 端尝试在 ldpi 手机上的 ldpi 布局中查找该视图时,我该如何处理以避免出现空指针异常?我应该检查一下 findviewbyid 是否返回 null 并从那里继续吗?

我意识到你应该在你的应用程序中保持统一,但有时似乎只是摆脱一个方便但不必要的 UI 元素会更有意义。我喜欢在这些新手机上拥有额外的空间,但是如果/当需要进行 ldpi 布局时,我宁愿不要把所有东西都塞进去,因为它看起来更好,只是为了摆脱一些东西,如果那有意义的话!

4

3 回答 3

2

这是一个很好的问题。空值检查可能是解决方案之一。另一种解决方案是检查屏幕属性。看这个例子:

public static boolean isTabletPC(Context context) {
        boolean isHoneycomb = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB;
        boolean hasLargeScreen = (context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK)
                >= Configuration.SCREENLAYOUT_SIZE_LARGE;
        return isHoneycomb & hasLargeScreen;
    }
于 2012-06-06T07:41:53.173 回答
0

从 api lvl 11 开始,您可能希望为此使用片段。这样,您的 Java 代码始终处理肯定存在的视图,并且您的布局可以显示(或不显示)某些处理自己业务的片段。

我建议不要乱扔代码,检查你有什么样的屏幕,并检查屏幕中是否有某个视图。

如果您查看链接页面上的图一,您会看到我的意思的一个清晰示例:

不同设备上的片段

于 2012-06-06T07:51:53.157 回答
0

这与处理任何可选元素的方式相同。检查它是否存在(不为空)并进行相应处理。如果不存在View, findViewById将返回 null 并且您可以在块View内部进一步操作,if(null != view){}或者如果有多个可以分组的可选元素,您可以使用实例变量。

HoneycombGallery演示提供了如何使用布局检测设备属性的想法(尽管在演示中,它是针对片段完成的,它可以应用于任何视图)

于 2012-06-06T07:44:45.357 回答