В моем приложении у меня есть несколько фрагментов, которые используются в нескольких действиях. В зависимости от размера экрана действия используют разные макеты, в которых их фрагменты могут располагаться друг над другом вертикально и/или горизонтально, мозаично выстраиваться в виде таблицы со строками и столбцами или отображаться почти в полноэкранном режиме под панелью вкладок.
Для каждого фрагмента также есть несколько макетов, например
res/
layout
/articles_list_fragment.xml
res/
layout-w590dp
/articles_list_fragment.xml
В моем классе фрагментов я загружаю макет следующим образом:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
rootView = inflater.inflate(R.layout.articles_list_fragment, container, false);
// (...)
}
Теперь, конечно, когда фрагмент имеет ширину менее 590dp, я бы хотел, чтобы он использовал первый макет, и когда для фрагмента доступно больше (или точно) ширины 590dp, я хочу второй макет быть использованным.
Но система ресурсов Android, похоже, загружает эти макеты только на основе ширины , доступной для все мое окно активности. Это не соответствует моим потребностям. Например, когда мое окно активности имеет ширину 1024 dp, левый фрагмент получит 2/5 этой ширины, что составляет 409 dp. В любом случае загружается второй ресурс макета, которому требуется ширина 590dp.
Конечно, в этом простом примере я мог бы вычислить точную ширину окна активности, при которой мой левый фрагмент достигает 590dp: 590dp * 5 / 2 = 1475dp
, и, таким образом, переименовать res/
layout-w590dp
/articles_list_fragment.xml
в res/
layout-w1475dp
/articles_list_fragment.xml
. Однако в моем реальном случае отношение между шириной окна активности и шириной фрагмента намного сложнее, и статическое/ручное определение минимальной ширины кажется неуместным.
Итак, теперь мне интересно, есть ли какой-либо синтаксис настройки/взлома/библиотеки/классификатора, который я могу использовать, чтобы изменить способ, которым андроид определяет загружаемый ресурс.