从SDK 14开始,首选顺序是取消/确定,而不是之前的确定/取消。 我不打算参加关于这是一个好主意的辩论,这不是我的问题的主题。
事情是,ADK鼓励您使用SDK> = 14的设备使用新订单,为您提供以下Lint
布局使用错误的按钮顺序API> = 14:创建一个 layout-v14 / layout.xml文件,顺序相反:取消 按钮应该在左边(是“@ string / send | Cancel”,应该是 “取消| @ string / send”)
好的,我会坚持这一点,这对我来说不是问题,我理解我应该遵循这些建议,以避免让用户烦恼。
但事情就是这样......在我的三星Galaxy S II上,在ICS上运行,系统界面本身似乎不遵循新订单。以下是一些屏幕截图示例:
订单是旧订单。 请注意,我使用的是我手机的官方ICS版本(不是自定义ROM)。我的Galaxy Tab 2(也运行官方ICS)的顺序是一样的。 在某些对话框中,订单是正确的(取消/确定) 我看到的唯一区别是主题(使用Holo主题的对话框有新的顺序;其他的,旧的顺序)。以下是设置中的DatePickerDialog(设置系统日期)和使用Holo的应用程序的屏幕截图:
这非常令人不安。 看起来按钮的顺序与主题相关,而不是版本相关。 或者只是三星没有遵循Android的设计模式?
我认为活动(当他们有确定/取消按钮时)也应遵循相同的顺序。在这里,再次,在我的手机上,日历的创建事件活动的顺序错误(并且活动不使用孔主题):
无论如何,我将在我的应用程序中使用Holo主题设备,因此我会保留SDK> = 14的新订单。我只是想了解这个问题。
感谢。
答案 0 :(得分:5)
是的,按钮交换非常烦人,我最终点击取消比ok按钮更多。但这就是你能做的。创建自己的自定义对话框,以便控制哪个按钮到达哪里,否则让用户通过阅读来弄清楚。我们只需要做程序员就是这样,当按下取消时,它实际上取消了而不是好的!为了更清楚地说明为什么Ok-Cancel被交换,这是为了避免Apple侵犯专利,因为他们也遵循Ok-Cancel。所以交换取消 - 确定意味着没有侵权(愚蠢,但节省谷歌百万!)
答案 1 :(得分:3)
三星有一个奇怪的想法,就是将Android 2的Touchwiz外观和感觉保持在Android 4.x设备上。对于我个人而言,这是三星4.x ROM最令人讨厌的事情,因为ICS / JB UI更好。它在对话框中最明显(使用你提到的2.x按钮排列)和标签(使用2.x标签而不是更好的4.x标签)。
即使是像SGS3这样的新的仅4.x设备(假设注释2也刚刚发布)仍然有Android 2 UI组件的这种荒谬的移植。
我怀疑对于最终用户来说这不是一个问题,因为对于拥有许多设备并注意到差异的开发人员来说这很烦人。
答案 2 :(得分:2)
是的,似乎按钮的顺序与主题相关,而不是版本相关。与布局“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);
Theme的属性“alertDialogStyle”是指“AlertDialog”样式,它是一组描述AlertDialog主题的属性,属性“layout”可能指向布局资源,否则使用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>
我想三星只是在这里设置其他东西,以保持他们的外观和感觉,就像菲利奥所描述的那样。
答案 3 :(得分:0)
也许是三星为Galaxy S2改造了他们的ROM。在进行定制时,我觉得他们有点臭名昭着。在过去,我也遇到过关于SGS2,xCover等ROM的核心蓝牙操作的一些问题。所以如果它只发生在三星设备上我也不会感到惊讶:)