2012-07-19 7 views
1

나는 AlertDialog를 팽창 시켜서 사용자가 의견을 보낼 수있게했다. 아주 간단합니다. 반대 순서로 배치-V14/chat_comment_dialog.xml 파일 만들기 : 왼쪽에 있어야 취소 버튼을 (대화 상자의 버튼 순서

레이아웃> = 14 API에 대한 잘못된 버튼 순서를 사용하지만이 린트 경고를 받고 있어요)

그래, 좋아,이 솔루션은, 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> 

:이 린트 조언을 무시하거나 경우, (I 오히려 혼란 생각) 장치 세트에 대한 새로운 패턴 어쨌든

에 따라, 여기에 레이아웃입니다 AlertDialog.Builder가 아닌 XML에서 버튼을 부 풀릴 수 있습니다 (어쩌면 이런 식으로 단추가 자동으로 순서가 지정됩니다). 왜냐하면 당신이 빌더의 비누 버튼으로 설정 한 모든 onClickListener가 대화 상자를 무시할 것이기 때문입니다. 직접 대화 상자를 제어하십시오.

+2

예, 그렇습니다. 마지 못해 따를 수는 있지만 따라야 만합니다. 분명히 별도의 확인/취소 레이아웃 (2 가지 버전)과 을 사방에 배치 할 수 있습니다. –

+0

"하지만 .... 정말로? 이건 정말 공식적인 제안입니까?" 예, 그것입니다 =/그들은 API 레벨에서 Dialogs의 버튼의 기본 순서를 변경했습니다. xml 레이아웃 대신 빌더를 사용하여 대화 상자를 작성하면이 변경 사항도 표시됩니다. 그것이 좋은 생각인지는 논쟁의 여지가 있지만, 그럼에도 불구하고 그들은 그것으로 도망 가기로 결정했습니다. – FoamyGuy

답변

6

API 레벨을 14보다 높게 지정하려는 경우 분명히의 디자인 사양을 준수해야합니다. 사용성을 높이기 위해 대화 상자의 레이아웃이 변경되었습니다.

단일 API 수준에서만 단일 장치를 사용하기 때문에 사용자가 혼동하지 않습니다. 인 경우 개발자가 비표준 UI를 만들 때 혼란 스럽습니다. 표준을 따르지 않으면 좌절감과 혼란이 생길 ​​수 있습니다. 예를 들어, 사용자의 휴대 전화 (API 레벨> 14)에있는 다른 모든 앱이 적절한 버튼 순서로 표준 대화 상자를 만들고 앱에 버튼 순서가 잘못 지정되면 사용자가 보내기가 아닌 취소 버튼을 누르게됩니다. 확실히 이것은 사용자를 혼란스럽게하고 성가 시게 할 것입니다.

장치에서 API 수준을 확인하고 적절한 레이아웃을 제공하는 것은 실제로 많은 부담이되지 않습니다. 앱을 잘 디자인한다면 몇 줄 이상의 코드가 필요하지 않습니다.

+0

답변 해 주셔서 감사합니다. 그것은 나를 괴롭히는 여분의 일이 아니다.실제로, 나는 당신이 하나의 단일 장치로 사용자 혼란에 빠지기 때문에 이미 이것을 해왔다. 사용자가 다른 Android 기기를 사용하거나 사용했다면 혼란이 계속됩니다. 어쨌든, 이것은 Android 조각화의 또 다른 비트입니다. –

+1

사용자가 가질 수있는 장치를 알 수있는 방법이 없으며 여러 장치가있는 각 사용자는 반드시 동일한 장치 집합을 가지고 있지 않습니다. 추측 게임을하는 대신 항상 ** 표준을 구현하는 것이 더 좋습니다. 사용자가 UI를 특정 장치에 상황화하는 것이 매우 쉽습니다. 즉, Mac과 Linux 사용자 간의 UI 차이로 인해 둘 중 하나를 사용하기가 더 어려워지는 것은 아닙니다. Mac 또는 Linux 응용 프로그램이 다른 플랫폼의 응용 프로그램처럼 디자인 될 때 ​​대신 문제가 발생합니다. – slayton

+0

물론, 우리는 같은 ** 플랫폼을위한 앱에 대해 이야기하고 있습니다. 두 가지 다른 표준을 비교하지 않습니다. 사용자의 장치를 추측하려고하는 것이 아니라 동일한 방식으로 사용자가 단일 장치에 스택한다고 가정 할 수 없습니다. 개발자로서, 나는 항상 "설립"되는대로 새로운 패턴에 자신을 추가하려고 시도하고 거꾸로 구현하지만, 나는이 점에 아무런 의미가 없다. 어쩌면 내 머리가 왼쪽의 possitive 버튼과 오른쪽의 부정적 버튼을 보는 데 사용되기 때문일 수 있습니다. –

-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() {...}); 

대체 리스너를 추가 버튼을 누를 때 해고 자동에서 대화 상자를 방지 할 수 있습니다.