OK / Отмена кнопок в ICS

Начиная с SDK 14, предпочтительным заказом является Отмена / ОК в отличие от OK / Отмена раньше. Я НЕ собираюсь вступать в дискуссию о том, хорошая ли это плохая идея, это не вопрос моего вопроса.

Дело в том, что ADK рекомендует вам использовать новый порядок для устройств с SDK> = 14, предоставив вам следующий Lint

Макет использует неправильный порядок кнопок для API> = 14: создайте файл layout-v14 / layout.xml с противоположным порядком: кнопка «Отмена» должна быть слева (была «@ string / send | Cancel», должна быть «Cancel | @ Строка / отправить ")

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

Но вот что … На моем Samsung Galaxy S II, работающем на ICS, сам интерфейс системы, похоже, не соответствует новому порядку. Вот несколько примеров скриншотов:

Введите описание изображения здесь

Заказ старый. Обратите внимание, что я использую официальную версию ICS для своего телефона (а не пользовательский ПЗУ). И порядок тот же на моей Galaxy Tab 2 (также работает официальный ICS). В некоторых диалоговых окнах порядок верен (отмена / ОК) Единственное различие, которое я вижу, – это тема (диалоги с использованием темы Голо, имеют новый порядок, остальные – старый порядок). Вот скриншот DatePickerDialog из настроек (для установки системной даты) и из моего приложения с помощью Holo:

Введите описание изображения здесь

Это довольно тревожно. Похоже, что порядок кнопок связан с темой, а не с версией. Или просто Samsung не придерживается шаблонов дизайна Android?

Я думаю, что действия (когда у них есть кнопки ОК / Отмена) также должны следовать одному и тому же порядку. И здесь, опять же, на моем телефоне активность Create Event в календаре имеет неправильный порядок (а в действии не используется тема Hole):

Введите описание изображения здесь

Я буду использовать тему Holo в своем приложении для устройств, как из Honeycomb, так что я сохраню новый порядок для SDK> = 14. Я просто хотел бы понять это.

Благодарю.

Да, смена кнопки довольно раздражает, и я в конечном итоге ударяю больше, чем кнопку ok. Но это то, что вы можете сделать. Либо создайте свое собственное диалоговое окно, чтобы вы контролировали, какая кнопка идет туда, иначе пусть пользователь выяснит, читая. Единственное, что нам нужно делать, как программисты, – это то, что когда отмена нажата, она фактически отменяет, а не OKays! Чтобы пролить больше света на то, почему Ok-Cancel был заменен, это было во избежание нарушения патентов Apple, поскольку они также следуют Ok-Cancel. Таким образом, замена Cancel-Ok означала бы отсутствие нарушения (глупо, но экономит Google миллионы!)

Samsung имеет эту странную идею о том, как поддерживать Touchwiz с Android 2 на устройствах Android 4.x. Это самая неприятная вещь для дисков Samsung 4.x для меня лично, так как интерфейс ICS / JB намного приятнее. Это наиболее заметно в диалогах (с использованием расположения кнопок 2.x, как вы упомянули) и вкладок (с вкладками 2.x, а не с гораздо более удобными вкладками 4.x).

Даже новые 4x устройства, такие как SGS3 (предположим, что Note 2 также только что был выпущен), все еще имеют этот смешной перенос компонентов Android 2 UI.

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

Да, кажется, что порядок кнопок связан с темой, а не с версией. В отличие от макета «alert_dialog.xml» «alert_dialog_holo.xml» помещает «button1» (положительный) вправо и «button2» (отрицательный) влево.

Макет определяется com.android.internal.app.AlertController:

public AlertController(Context context, DialogInterface di, Window window) { TypedArray a = context.obtainStyledAttributes(null, com.android.internal.R.styleable.AlertDialog, com.android.internal.R.attr.alertDialogStyle, 0); mAlertDialogLayout = a.getResourceId(com.android.internal.R.styleable.AlertDialog_layout, com.android.internal.R.layout.alert_dialog); 

Атрибут темы «alertDialogStyle» относится к стилю «AlertDialog», который представляет собой набор атрибутов, описывающих тему AlertDialog, атрибут «макет» может указывать на ресурс макета, иначе используется layout / alert_dialog.

В источнике Android вы можете видеть, что «Theme.Holo» использует «AlertDialog.Holo», который, в свою очередь, ссылается на «layout / alert_dialog_holo», в то время как «Theme» использует «AlertDialog», который не содержит макета и по умолчанию соответствует значению кода.

themes.xml:

 <style name="Theme"> <item name="alertDialogStyle">@android:style/AlertDialog</item> <style name="Theme.Holo"> <item name="alertDialogStyle">@android:style/AlertDialog.Holo</item> 

styles.xml:

 <style name="AlertDialog"> … </style> <style name="AlertDialog.Holo" parent="AlertDialog"> … <item name="layout">@android:layout/alert_dialog_holo</item> … </style> 

Фактически используемая тема, по-видимому, определяется настройками устройства.

themes_device_defaults.xml:

 <style name="Theme.DeviceDefault" parent="Theme.Holo" > <item name="alertDialogStyle">@android:style/AlertDialog.DeviceDefault</item> 

styles_device_defaults.xml:

 <style name="AlertDialog.DeviceDefault" parent="AlertDialog.Holo"> </style> 

Думаю, Samsung просто устанавливает здесь что-то еще, чтобы поддерживать их внешний вид, как описал Филио.

Возможно, это Samsung, который внес изменения в свой ROM для Galaxy S2. Я чувствую, что они немного печально известны, когда дело доходит до настройки. В прошлом у меня также возникали некоторые проблемы с основными операциями Bluetooth в их ROM для SGS2, xCover и т. Д. Поэтому я не удивлюсь, если это произойдет только в устройствах Samsung 🙂

Intereting Posts
Передача объекта Java на C ++ через JNI, а затем обратно в Java через void * Почему «noinspection SimplifiableIfStatement» автоматически добавляется к активности, созданной с помощью мастера Android adb нажимает на место в устройстве без SD-карты и без доступа root MonoDroid: восстановление необработанного исключения Проверка того, какой код использует разрешения Кордова 2.1.0 (PhoneGap) создает скрипт для Android, который говорит, что «Проект уже существует» или «Произошла ошибка. Удаление проекта " Ошибка Android MediaPlayer / VideoView (1, -2147483648) Можно включить макет и другие ресурсы в банке Android? Являются ли Android push уведомления надежными? SimpleOnGestureListener никогда не входит в метод onFling (…) Самопроверка подписи APK Как вставить ListView в CardView с полосой прокрутки вне CardView? Android eclipse – восклицательный знак рядом с названием проекта Обновить ListView после операции удаления Android – Как создать интерактивный список?