Получение значений манифеста из ресурса xml - PullRequest
0 голосов
/ 26 декабря 2018

Есть ли способ поместить значения, определенные в манифесте, такие как Activity screenOrientation, в файл xml ресурса?

Например, атрибут Activity screenOrientation может иметь такие значения, как «портрет», «ландшафт» и т. Д.'

Ну, эти значения постоянны после определения.Если я хочу иметь разные значения для телефонов и планшетов, например, «портрет» для телефонов, в то время как для таблиц я хочу, чтобы это было «датчик», как это можно сделать?Я не хочу устанавливать это в коде.

В конце эти значения являются целочисленными константами, и их можно найти здесь: https://developer.android.com/reference/android/content/pm/ActivityInfo

Поэтому я подумал, что, возможно, я смогу определить два файла, integer.xml для телефонов и целых чисел.w400dp.xml для больших экранов, затем определите атрибут как

<integer name="orientation">portrait</integer> //for phones in the integers.xml
<integer name="orientation">sensor</integer> //for tablets in the integers-w400dp.xml

Затем в манифесте, к которому я могу обратиться к ним, сделайте так:

android:screenOrientation="@integer/orientation" //This actually accepted with no error

Однако целое число xml не будетt принимает значения «портрет» или «датчик», и вместо этого я должен указать их числовые значения следующим образом:

<integer name="orientation">1</integer> //For portrait
<integer name="orientation">4</integer> //For sensors 

Я считаю, что это будет работать, но я не хочу использовать жестко закодированные значения, поскольку они могут измениться.между уровнем API.

Я пытался добавить xmlns в файл ресурсов (те же ns, что и в манифесте), но это не сработало.

* Отредактировано * В нижней части, этот вопрос о том, как заблокировать Activity для портрета на телефонах, а НЕ для блокировки его на планшетах, но делать это из XML, а не из кода,

Любая идея будет оценена.

1 Ответ

0 голосов
/ 26 декабря 2018

Это может помочь вам, проверить тип устройства и установить ориентацию активности во время выполнения

if(isTablet())
{
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
}
else
{
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

public boolean isTablet() {
    return (this.getResources().getConfiguration().screenLayout
            & Configuration.SCREENLAYOUT_SIZE_MASK)
            >= Configuration.SCREENLAYOUT_SIZE_LARGE;
}
...