我为不同的屏幕尺寸和设备使用不同的布局。我将片段与特定的布局文件夹一起使用。 概念很棒,对于具有大屏幕的平板电脑和设备我放置了一个布局文件 layout-sw600dp 和Android设法在不同设备上提供正确的布局。
我的错误是什么:如何找到我的代码中使用的布局。 对于不同的布局,我的片段需要稍微不同的代码。
一般来说,在我的碎片/活动中分离自定义布局编程逻辑的最佳实践是什么?
我的方法现在有点hacky并且与不同的Layout文件夹不同步。
private boolean isTabletDevice() {
if (android.os.Build.VERSION.SDK_INT >= 11) { // honeycomb
// test screen size, use reflection because isLayoutSizeAtLeast is
// only available since 11
Configuration con = getResources().getConfiguration();
try {
Method mIsLayoutSizeAtLeast = con.getClass().getMethod("isLayoutSizeAtLeast", int.class);
Boolean r = (Boolean) mIsLayoutSizeAtLeast.invoke(con, 0x00000004); // Configuration.SCREENLAYOUT_SIZE_XLARGE
return r;
} catch (Exception x) {
x.printStackTrace();
return false;
}
}
return false;
}
然后
if(isTabletDevice()) {
//findViewById(R.id.onlyInTabletLayoutButton);
}else{
//
}
答案 0 :(得分:2)
这是我个人使用的方法:
在每个布局中,我向布局的根添加Tag,并确保所有布局根具有相同的ID。例如,我将有一个类似的布局:
<RelativeLayout
android:id="@+id/rootView"
android:tag="landscapehdpi">
<!-- Rest of layout -->
</RelativeLayout>
然后又有一个像:
<RelativeLayout
android:id="@+id/rootView"
android:tag="portraitmdpi">
<!-- Rest of layout -->
</RelativeLayout>
然后,一旦布局膨胀,我使用:
View rootView = (View) findViewById(R.id.rootView);
这将返回当前正在使用的布局根目录。现在要确定它的确切布局并运行相应的代码,我使用了一系列if-else块:
String tag = rootView.getTag().toString();
if(tag.equals("landscapehdpi"))
{
//Code for the landscape hdpi screen
}
else if(tag.equals("portraitmdpi"))
{
//Code for the portrait mdpi screen
}
//And so on...
所以基本上使用它你可以知道在运行时加载了哪个布局,并运行相应的代码。
答案 1 :(得分:1)
我认为您正在寻找与此问题相同的解决方案,
How can I detect which layout is selected by Android in my application?。
如果您希望看到最佳答案,可以选择两个选项。
https://stackoverflow.com/a/11670441/603744