Да, вы можете.Это просто!Я делаю это потому, что устаревшие (до API уровня 13) системы не поддерживают более новые фильтры папок макета.В частности, мне нужно отличать QVGA (маленькое) от WQVGA (обычное) и других обычных разрешений.
Просто добавьте различные файлы макетов в папки макетов и макетов, например
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, в другие папки.