确定/取消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的新订单。 我只是想了解这个问题。

谢谢。

  • Android DisplayMetrics在ICS上以像素为单位返回不正确的屏幕大小
  • ?安卓:ATTR / selectableItemBackground
  • 如何使用windowIsFloating创建透明活动
  • 将活动显示为对话框时如何自定义宽度和高度
  • Android Column GridView,可变宽度,如GooglePlus App
  • 键盘打开时,带有片段的活动不会resize
  • 剪切的button不会接收触摸input
  • 以编程方式更改图层列表中的形状颜色
  • 是的,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中遇到了核心蓝牙操作的一些问题。所以我不会感到惊讶,如果它只发生在三星设备:)