2012-10-03 27 views
8

由于SDK 14,首选的顺序是取消/确定反对之前确定/取消。 我不打算进入辩论这是否是一个好的主意,这不是我的问题的主题。确定/取消按钮订单在ICS

的事情是,ADK鼓励你给你以下皮棉

布局以使用新的秩序与SDK> = 14的设备使用了错误的按钮,以便API> = 14:创建以相反的顺序 布局-V14/layout.xml文件:取消 按钮应在左边(为 “@字符串/发送|取消”,应该是 “取消| @字符串/发送”)

好的,我会坚持这一点,这对我来说不是问题,我明白我应该foll为了避免恼人的用户,请告知建议。

但是,这是事情......在我的三星Galaxy S II上运行ICS,系统界面本身似乎不遵循新的顺序。这里有几个例子截图:

enter image description here

的顺序是旧的。 请注意,我使用官方ICS版本为我的手机(不是自定义ROM)。我的Galaxy Tab 2(同时运行官方ICS)的顺序也是相同的。 在某些对话框中,顺序是正确的(取消/确定) 我看到的唯一区别是主题(使用Holo主题的对话框具有新顺序;其他顺序是旧顺序)。这里是一个DatePickerDialog的使用全息的设置(设置系统日期),并从我的应用程序的截图:

enter image description here

这是非常令人不安的。 它看起来像按钮的顺序是主题相关的,而不是版本相关的。 或者它只是三星不遵循Android的设计模式?

我认为活动(当他们有确定/取消按钮)也应遵循相同的顺序。在这里,再一次,我的手机上创建日历有错误的顺序(以及活动不使用孔主题)的事件活动:

enter image description here

我会用我的应用程序的全息主题无论如何都是来自Honeycomb的设备,所以我会保留SDK> = 14的新订单。我只是想了解这个问题。

谢谢。

回答

5

是的,按钮交换是相当恼人的,我最终击中取消比ok按钮更多。但这是你可以做的。要么创建自己的自定义对话框,以便控制哪个按钮到达哪里,否则让用户通过阅读找出答案。只有我们作为程序员需要做的事情是这样的,当按下取消时,它实际上取消而不是OKays!为了更清楚地说明Ok-Cancel为什么被交换,这是为了避免Apple侵犯专利权,因为他们也遵循Ok-Cancel。因此,交换取消Ok将意味着没有侵权(愚蠢,但保存谷歌百万!)

+2

这个愚蠢的数量给了你我的+1;)苹果怎么可以在Windows已经使用多年的东西上拥有专利?或者,也许微软和苹果都有这方面的专利。你会碰巧能够提供你的陈述吗? – Warpzit

+0

@罗斯顿 - 正如我所说的,问题不在于我应该做甚么。在SDK> = 14的顺序必须遵循(取消/确定),这就是我要做的。这里的问题是要理解为什么有些系统对话框的顺序错误。 –

+0

这并不是说他们有错误的订单,但直到OEM的肯定已命名为肯定按钮作为取消和否定按钮作为确定,从而改变顺序。即使你可以做到这一点。这不是一条硬性规定,应该遵循。 –

0

也许它的三星谁做了他们的银河S2的ROM。我觉得在定制时他们有点臭名昭着。在过去,我也遇到过一些关于SGS2,xCover等ROM的核心蓝牙操作问题。所以我不会感到惊讶,如果它只发生在三星设备:)

3

三星有这个奇怪的想法,关于维护Touchwiz从Android 2到Android 4.x设备的外观和感觉。对于我个人而言,这是关于Samsung 4.x ROM的最令人讨厌的事情,因为ICS/JB UI更好。在对话框中(使用2.x按钮排列,如上所述)和选项卡(使用2.x选项卡而不是更好的4.x选项卡),这是最明显的。即使像SGS3这样的更新的4.x设备(假设Note 2也刚刚发布),仍然有Android 2 UI组件的荒谬移植。

我怀疑这对于终端用户来说并不是问题,因为它对于拥有很多设备并注意到不同之处的开发人员来说很烦人。

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); 

主题的属性“alertDialogStyle”是指“AlertDialog”的风格,这是描述一个AlertDialog的一组属性主题,属性“布局”可能指向布局资源,否则使用layout/alert_dialog。

在android源码你可以看到,“Theme.Holo”使用“AlertDialog.Holo”这又referes到“布局/ alert_dialog_holo”,而“主题”使用“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> 

我想三星只是设置一些人在这里,以维持它们的外观和Philio描述的感觉。