2010-06-25 23 views

Trả lời

9

Tôi không nghĩ bạn có thể. Nhìn vào source code, có vẻ như dấu kiểm được vẽ ở bên phải mọi lúc. Và, thành thật mà nói, tôi sẽ khuyên bạn nên gắn bó với điều đó, để nhất quán - Android luôn bị đánh bại bởi vì các ứng dụng của nó có giao diện người dùng không nhất quán.

Trong cơ hội ra rằng ai đó đang chĩa súng vào đầu bạn, buộc bạn phải thay đổi vị trí của các dấu kiểm, lớp con CheckedTextView như OMGPleaseDontShootCheckedTextView, và ghi đè lên các phương pháp như onDraw(), với các phiên bản tinh chỉnh của bản gốc mà thay đổi vị trí của hình ảnh và văn bản.

+0

Cảm ơn này là hữu ích ! –

+7

Bây giờ với dấu kiểm thiết kế Material design phải ở bên trái, nhưng mã để cho phép điều này không may là riêng tư nên không thể dễ dàng được quay trở lại. –

28

Tạo mẫu hàng của riêng bạn và đặt android: drawableLeft trên CheckedTextView.

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@android:id/text1" 
android:layout_width="fill_parent" 
android:layout_height="40dip" 
android:gravity="center_vertical" 
android:paddingLeft="5dip" 
android:drawableLeft="?android:attr/listChoiceIndicatorMultiple" 
/> 

hoặc

android:drawableLeft="?android:attr/listChoiceIndicatorSingle" 
+2

Điều đó ngăn cản bạn sử dụng chức năng có thể vẽ cùng với chỉ báo dấu kiểm (mặc định cho phép CheckedTextView). Tôi nghĩ câu trả lời của @CommonsWare phù hợp hơn. –

-4

android: drawableLeft = "android:? Attr/listChoiceIndicatorMultiple": P

25

Bí quyết là ở android: Checkmark làm cho nó vô

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/checked_text_single_choice" 
android:layout_width="match_parent" 
android:layout_height="52dp" 
android:checkMark="@null" 
android:gravity="center_vertical" 
android:textAppearance="?android:attr/textAppearanceSmall" 
android:drawableLeft="?android:attr/listChoiceIndicatorSingle" 
android:drawableRight="@null" 
android:textColor="@android:color/black" 
/> 
+2

tôi không thể tin điều này đã hiệu quả. cảm ơn – j2emanue

+0

giải pháp làm việc – vuhung3990

+1

ma thuật này là gì? nó thậm chí không hợp lý, nhưng hoạt động! – Ogbe

0

hãy thử cái này và hy vọng nó sẽ cung cấp cho bạn một số ý tưởng

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

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

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Connection lost sound alert" 
       android:layout_weight="10" 
       android:layout_gravity="center" 
      /> 

     </LinearLayout> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_weight="2"  
      android:layout_gravity="right" 
      android:orientation="horizontal" > 

      <CheckBox android:id="@+id/checkbox_meat" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_gravity="right"     
       android:onClick="onCheckboxClicked"/> 

     </LinearLayout> 


    </LinearLayout> 
7

Nếu bạn muốn hộp kiểm ở bên trái, chỉ cần sử dụng CheckBox. Có lẽ nó không phải là vấn đề của khóa học, nhưng một CheckBox có thể chứa văn bản. Bạn có thể xác định văn bản đó bằng cách thêm thuộc tính XML android:text hoặc bằng cách gọi phương thức setText(). Trên thực tế, CheckBox được kế thừa từ Button, được kế thừa từ TextView, đó là lý do tại sao nó có tất cả các thuộc tính liên quan đến văn bản.

+0

đã thêm ví dụ 'CheckBox' xml với ảnh chụp màn hình trong câu trả lời riêng biệt –

2

Ví dụ về đề xuất của @ WonderCsabo khi sử dụng Hộp kiểm.

<CheckBox 
    android:id="@+id/create_account_checkedTextView_password" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Show" 
    android:gravity="center" 
    android:checked="true" 

    # relative layout params 
    android:layout_alignParentEnd="true" 
    android:layout_alignParentRight="true" 
    android:layout_above="@+id/hint1" /> 

checkbox_example

2

Có thể có một thủ thuật với Checkable Layout như trong bài viết này - https://chris.banes.me/2013/03/22/checkable-views/ . Chỉ cần sử dụng một số cách bố trí tùy chỉnh như thế này như bố cục mục ListView:

<com.example.custom_view.CheckableLinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="horizontal" 
android:layout_width="match_parent" 
android:layout_height="wrap_content"> 
<CheckedTextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:checkMark="?android:attr/listChoiceIndicatorSingle" 
    android:duplicateParentState="true" 
    .../> 
<TextView 
    android:id="@android:id/text1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    .../> 
</com.example.custom_view.CheckableLinearLayout> 

hoặc

android:checkMark=?android:attr/listChoiceIndicatorMultiple" 
2

Bạn có thể gán drawable của bạn để drawableLeft thuộc tính, nhưng nó sẽ không làm cho bạn bất kỳ tốt vì nó không hỗ trợ pha màu . Thay vào đó tôi mở rộng CheckedTextView như thế:

public class LeftSideCheckedTextView extends CheckedTextView { 

    public LeftSideCheckedTextView(Context context) { 
     this(context, null, 0); 
    } 

    public LeftSideCheckedTextView(Context context, AttributeSet attrs) { 
     this(context, attrs, 0); 
    } 

    public LeftSideCheckedTextView(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     Field mCheckMarkGravity = null; 
     try { 
      mCheckMarkGravity = this.getClass().getSuperclass().getDeclaredField("mCheckMarkGravity"); 
      mCheckMarkGravity.setAccessible(true); 
      mCheckMarkGravity.set(this, Gravity.START); 
     } catch (Exception e) { 
      Logger.error(e); 
     } 
    } 
} 

Ở đây tôi truy cập vào mCheckMarkGravity lĩnh vực ẩn được sử dụng bên trong CheckedTextView nhưng không có quyền truy cập thông qua các thuộc tính phong cách, theo vé lỗi này: https://code.google.com/p/android/issues/detail?id=174517

Các vấn đề liên quan