确定/取消button在ICS中的顺序

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

问题是,ADK鼓励您使用SDK> = 14的设备的新订单,给您以下Lint

布局使用错误的button顺序为API> = 14:创build一个layout-v14 / layout.xml文件,顺序相反:取消button应该在左边(是“@ string / send | Cancel”,应该是“Cancel | @string/发送“)

好的,我会坚持下去,这对我来说不是问题,我明白我应该听从build议,以避免恼人的用户。

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

在这里输入图像说明

订单是旧的。 请注意,我使用官方的ICS版本为我的手机(不是自定义ROM)。 而且我的Galaxy Tab 2(同时运行官方ICS)的顺序也是一样的。 在一些对话框中,顺序是正确的(取消/确定)我看到的唯一区别是主题(使用全息主题的对话框有新的顺序;其他的,旧的顺序)。 以下是使用Holo从设置(设置系统date)和从我的应用程序的DatePickerDialog的屏幕截图:

在这里输入图像说明

这很令人不安。 它看起来像button的顺序是主题相关的,而不是版本相关的。 还是只是三星不遵循Android的devise模式?

我认为活动(当他们有确定/取消button)也应遵循相同的顺序。 再次,在我的手机上,日历的“创build事件”活动具有错误的顺序(并且该活动不使用“孔”主题):

在这里输入图像说明

我将在我的应用程序中使用Holo主题作为来自Honeycomb的设备,所以我将保留SDK> = 14的新订单。 我只是想了解这个问题。

谢谢。

Solutions Collecting From Web of "确定/取消button在ICS中的顺序"

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

三星有这个奇怪的想法,将Android 2的Touchwiz外观和感觉保持到Android 4.x设备上。 对于我个人来说,这是关于Samsung 4.x ROM的最烦人的事情,因为ICS / JB UI更好。 在对话框(使用2.xbutton排列,如上所述)和选项卡(使用2.x选项卡,而不是更好的4.x选项卡)中最显着。

即使像SGS3这样的新型4.x设备(假设Note 2也刚刚发布)仍然有Android 2 UI组件的荒谬移植。

我怀疑这对于terminal用户来说并不是问题,因为对于那些拥有很多设备的开发者来说,这很烦人。

是的,button的顺序似乎是主题相关,而不是版本相关。 与布局“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”可能指向布局资源,否则使用layout / alert_dialog。

在android源代码中你可以看到“Theme.Holo”使用了“AlertDialog.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> 

我想三星在这里只是设置了一些东西,以保持他们的外观和感觉,如菲利奥所描述的。

也许是三星对Galaxy S2的ROM进行了改动。 我觉得在定制方面他们有点臭名昭着。 过去,我在SGS2,xCover等的ROM中遇到了核心蓝牙操作的一些问题。所以我不会感到惊讶,如果它只发生在三星设备:)