2012-10-03 29 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描述的感覺。