2012-07-19 76 views
1

我正在給AlertDialog充氣以讓用戶發送評論。相當簡單。但我發現了這個皮棉警告:對話框中的按鈕順序

佈局使用了錯誤的按鈕,以便API> = 14:創建 相反順序佈局-V14/chat_comment_dialog.xml文件:取消按鈕應在左邊(是「@字符串/發送|取消」,應該是「取消| @字符串/ 派」)

所以,是的,這是解決方案,創建API> = 14特定的佈局和顛倒順序。但是....真的嗎?這真的是官方建議嗎?要在某些設備中設置一個訂單而在其他設備中設置另一個訂單?作爲用戶,我會感到非常困惑。我應該忽略這個林特建議,或以其他方式,按照一組設備的這一新格局(我認爲這是相當混亂)

總之,這裏的佈局:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:padding="8dp" > 

    <EditText 
     android:id="@+id/username" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:hint="@string/username" 
     android:singleLine="true" /> 

    <EditText 
     android:id="@+id/message" 
     android:layout_width="match_parent" 
     android:layout_height="180dp" 
     android:gravity="top|left" 
     android:hint="@string/review" /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" > 

     <Button 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:paddingRight="4dp" 
      android:text="@string/send" 
      android:textSize="18sp" /> 

     <Button 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:paddingLeft="4dp" 
      android:text="@android:string/cancel" 
      android:textSize="18sp" /> 
    </LinearLayout> 

</LinearLayout> 

順便說一句,我有來誇大XML中的按鈕而不是AlertDialog.Builder中的按鈕(也許這樣按鈕會自動排序),因爲您設置爲Builder的deafult按鈕的任何onClickListener都會關閉對話框,我必須避免這種行爲自己控制對話框。

+2

你應該聽從建議,是的。儘管你可以不情願地跟隨,但你必須遵循。當然你可以有一個單獨的確定/取消佈局(2個版本),並且它可以在任何地方使用。 – 2012-07-19 15:08:39

+0

「但是......真的嗎?這真的是官方的建議嗎?」是的,它肯定是= /他們改變了API級別對話框上按鈕的默認順序。如果您使用構建器而不是通過xml佈局創建對話框,則也會看到此更改。這是否是一個好主意肯定有爭議,但他們卻選擇了這個主意。 – FoamyGuy 2012-07-19 15:26:51

回答

6

如果您打算將API級別設置爲14以上,那麼您應該按照設計規範確定。對對話框佈局進行了更改以提高可用性。

作爲用戶,您不會感到困惑,因爲您只在單一API級別使用單個設備。什麼混淆是當開發人員創建非標準的用戶界面。不遵守標準會導致挫折和困惑。例如,如果用戶手機上的所有其他應用程序(API級別> 14)都使用正確的按鈕順序創建標準對話框,並且您的應用程序的按鈕順序錯誤,則會導致用戶點擊取消而不是發送,反之亦然。當然這會混淆和惹惱用戶。

確實沒有太多的額外工作來檢查設備上的API級別並提供適當的佈局。如果你設計好你的應用程序,它不應該只需要幾行代碼。

+0

感謝您的回覆。這不是讓我惱火的額外工作。事實上,我已經做到了這一點,因爲您在單個設備中的用戶信息是正確的。但是,如果用戶使用或已經使用過其他Android設備,那麼這種信任依然存在。無論如何,這只是Android碎片的另一點。 – 2012-07-19 16:58:08

+1

無法知道用戶可能擁有哪些設備,而擁有多個設備的每個用戶肯定不會擁有相同的一組設備。而不是玩**猜謎遊戲,它總是**更好地執行標準。用戶非常容易將UI上下文化爲特定設備。即我的Mac和Linux comptuers之間的用戶界面差異不會使任何一個更難以使用。相反,如果將mac或linux應用程序設計爲另一個平臺的應用程序,則會出現問題。 – slayton 2012-07-19 17:00:34

+0

當然,但我們正在討論** ** **平臺的應用程序。沒有比較兩種不同的標準。我不是在猜測用戶的設備,但是同樣的方式,我們不能假設用戶堆疊到一個設備上。作爲一名開發人員,我一直試圖讓自己適應新模式,一旦它們「建立起來」並向後實施,但我認爲這一點毫無意義。也許只是因爲我的頭被用來看左邊的正位按鈕,而右邊的是負位置的按鈕。 – 2012-07-19 17:16:50

-1

關於你的最後一個註釋,你仍然可以從代碼中所有的AlertDialog的東西,並能控制的事情時,在對話框關閉喜歡,只是用的View.onClickListener代替DialogInterface.onClickListener

AlertDialog d = new AlertDialog.Builder(context) 
     .setPositiveButton(R.string.button_text, null).show(); 

,然後添加聆聽者之後:

d.getButton(AlertDialog.BUTTON_POSITIVE) 
     .setOnClickListener(new View.onClickListener() {...}); 

添加替代偵聽器可防止在按下按鈕時自動忽略對話框。