Некоторые устройства игнорируют строковый ресурс в Manifest, Parse Error
Попытка установить ориентацию в файле манифеста, используя спецификатор строки
android:screenOrientation="@string/orientation"
Работает на планшете 4.0 asus, но не работает как на 2.1 firefire, так и на 4.1 Galaxy S. Проблема в том, что ссылка на ресурс фактически связана с тем, что в него введен портрет.
Я пытался изменить квалификаторы, используемые в планшете для тестирования на телефоне. Это означает, что один и тот же код, ресурсы и макеты используются для всех устройств. Так что это не может быть орфографическими ошибками или строить проблемы. Но все равно не работает на телефонах, а не на планшете. Это, кажется, еще одна ошибка в Android.
Выдает ошибку ниже, ничего в logcat
Installation error: INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION
Please check logcat output for more details.
Launch canceled!
Раздел манифеста
<activity
android:name=".MainActivity"
android:screenOrientation="@string/orientation"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Я знаю, что могу сделать это программно. Но есть еще одна проблема с пожаром, не перезапускается сразу. Вместо этого он ожидает установки представлений и т. Д. Это не происходит на других устройствах.
Погуглил и нашел несколько других использующих методы, но они, похоже, не обнаружили каких-либо проблем. http://capdroid.wordpress.com/2012/07/21/different-screen-orientation-on-different-screen-size
Спасибо
3 ответа
Попытка установить ориентацию в файле манифеста, используя спецификатор строки
Несмотря на то, что это строка при вводе в редактор, AFAIK фактически хранится в системе как целое число, и поэтому преобразование из строкового ресурса вряд ли будет надежным. Честно говоря, я удивлен, что это работает на этом планшете - производитель устройств, возможно, добавил поддержку этого для обработки одного из своих собственных приложений.
Хотя вы можете использовать строковые ресурсы в манифесте, они должны быть вещами, которые будут храниться как строки (например, android:label
).
Возможно, вы сможете заставить это работать с целочисленным ресурсом, просматривая значения, используемые для этих констант (вероятно, такие же, как их эквиваленты в Java).
Это, кажется, еще одна ошибка в Android.
Мне кажется, это еще одно место, где разработчик выходит за пределы документированного поведения, а потом удивляется, почему недокументированное поведение не работает.
У меня была та же проблема, и я решил ее, используя целочисленное значение вместо строкового значения и установив ориентацию в методе "onCreate":
Пример:
Значения / strings.xml
<resources>
<integer name="orientation">1</integer>
...
Значения-sw600dp/strings.xml
<resources>
<integer name="orientation">0</integer>
</resources>
Затем в вашем onCreate:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setRequestedOrientation(getResources().getInteger(R.integer.orientation));
Каждая ориентация имеет целочисленное значение, см. Эту страницу для получения дополнительной информации: http://developer.android.com/reference/android/R.attr.html
Прочтите официальный документ разработчика, чтобы определить форму обозначений, которые обозначены строками, если поместить ее в строковый ресурс, это приведет к ошибке разбора, как показано в вопросе OP.
И нет, я бы не стал спешить с выводами, классифицируя это как "ошибку", для каждого и для себя, некоторые производители могут свободно реализовывать свой собственный механизм для его обработки, а другие придерживаются пути исходного кода Google.