是的,你可以这样做。很简单!我这样做是因为旧版(API级别13之前)系统不支持较新的布局文件夹过滤器。具体来说,我需要区分QVGA(小)和WQVGA(正常)以及其他正常分辨率。
只需在您的layout和layout-land文件夹中添加各种布局文件,例如:
layout
my_layout_default.xml
my_layout_qvga.xml
layout-land
my_layout_default.xml
my_layout_qvga.xml
然后,在运行时选择适当的布局:
protected void onCreate(Bundle savedInstanceState)
{
// Some code that uses DisplayMetrics to determine the screen type
ScreenType st = Util.getScreenType(this);
super.onCreate(savedInstanceState);
setContentView(st == ScreenType.ST_QVGA ? R.layout.my_layout_qvga : R.layout.my_layout_default);
// ...
你可以为每个布局添加一个标记,以便发现实际加载的布局,例如:
您可以在每个布局中添加一个标记,以便发现到底加载了哪个布局。
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/my_root_view"
android:tag="st_port_QVGA"
FrameLayout flRoot = (FrameLayout)findViewById(R.id.my_root_view);
Object objTag = flRoot.getTag();
if (objTag instanceof String)
{
String strTag = (String)objTag;
System.out.println("Tag = " + strTag);
}
顺便说一下,你完全可以将这种技术与通常的资源限定符相结合,例如将类似my_layout_default.xml这样的文件添加到其他文件夹中。
R.layout.my_layout_qvga
呢?在layout
中的还是在layout-land
中的? - David T.