2010-04-13 28 views

Trả lời

9

Như Ravi Vyas cho biết, bạn có thể tự làm điều này với TextViewRadioButton. Không có nội tại nào là RadioButton để định vị lại nút liên quan đến văn bản, từ việc đọc mã nguồn của tôi.

Ngoài ra, xin lưu ý rằng chỉ vì điều này là có thể không có nghĩa là đó là một ý tưởng hay. Ví dụ: trên iPhone, bạn có thể không được phép gửi ứng dụng của mình nếu bạn gây rối với quá nhiều điều này, vì chúng có hướng dẫn giao diện con người mà ứng dụng phải tuân thủ. Android cung cấp cho bạn nhiều hơn dây - không treo người dùng của bạn với nó.

16

tôi muốn làm điều tương tự, mà không cần phải mở rộng nhưng lớp khác (hoặc hai, như bạn sẽ phải ít nhất kéo dài CompoundButton RadioButton) kiếm cái gì đó nên là một phần của việc thực hiện ngay từ đầu. Vì tôi đã sử dụng một RadioGroup, mà sẽ không hoạt động nếu bạn đặt nói, một RadioButton và một TextView trong một container bố trí. Giải pháp của tôi là thừa nhận hơn một chút hackish, nhưng - nó hoạt động.

1) Set Padding trái sang 40 2) Thiết lập lề trái sang Layout -36dp

Tại thời điểm này, các nút radio gốc sẽ được bên ngoài xem, và xem văn bản của bạn sẽ được ngồi trên bên trái với biên độ 4dp.

3) Thiết lập drawable quyền @android: drawable/btn_radio

Bây giờ bạn sẽ có một RadioButton bản địa với văn bản bên trái và một nút ở bên phải, mà sẽ làm việc với một RadioGroup.

@CommonsWare

Nó đáng nói rằng nó vô cùng mỉa mai để đưa lên Hướng dẫn Human Interface để đáp lại câu hỏi cụ thể này. Đặc biệt là xem xét điều chỉnh bố cục RadioButton để đặt nút ở bên phải, sẽ đạt được sự nhất quán với bố cục của menu Spinner. Tôi hoàn toàn đồng ý với ý kiến ​​của bạn về vấn đề này - nhưng có khả năng NickTFried đã cố gắng bù đắp cho Android "treo" bản thân trong vấn đề đó.

+5

Bạn có thể sử dụng nút android: button = "@ null" để xóa nút radio bên trái (thay vì Bước 1) – EtienneSky

+0

khi tôi đang đặt android: button = "@ null", nút radio không được chọn (được nhấp). Tôi đang làm gì sai. hãy giúp http://stackoverflow.com/questions/28052820/android-custom-radio-button-not-getting-checked –

8

CheckedTextView hoạt động tốt nếu bạn đang làm việc với một "nút radio" duy nhất.

Nhưng tôi cần thiết để duy trì các chức năng toggling giữa các nút radio trong một nhóm để làm việc này tốt hơn cho tôi:

 <RadioGroup 
     android:id="@+id/radioGroup1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 

     <RadioButton 
      android:id="@+id/radioButton1" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:button="@null" 
      android:drawableRight="@android:drawable/btn_radio" 
      android:gravity="left|center_vertical" 
      android:layout_marginLeft="-32dp" 
      android:text="Radio Button 1" /> 

     <RadioButton 
      android:id="@+id/radioButton2" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:button="@null" 
      android:drawableRight="@android:drawable/btn_radio" 
      android:gravity="left|center_vertical" 
      android:layout_marginLeft="-32dp" 
      android:text="Radio Button2" /> 

    </RadioGroup> 

Điều chỉnh android:layout_marginLeft khi cần thiết.

6

Đối với ngôn ngữ RTL i.e Arabic sử dụng này:

 <RadioGroup 
      android:id="@+id/rgNewsFilter" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" > 

      <RadioButton 
       android:id="@+id/rbAllNews" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_marginLeft="-32dp" 
       android:button="@null" 
       android:drawableRight="@android:drawable/btn_radio" 
       android:gravity="right|center_vertical" 
       android:text="ذنيسبمنشخصث" 
       android:textColor="#ffffff" /> 

      <RadioButton 
       android:id="@+id/rbMyTeam" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_marginLeft="-32dp" 
       android:button="@null" 
       android:drawableRight="@android:drawable/btn_radio" 
       android:gravity="right|center_vertical" 
       android:text="تشسيبتسيتبتسيب" 
       android:textColor="#ffffff" /> 
     </RadioGroup> 
0

Android đã tích hợp sẵn trong cách bố trí, bạn có thể sử dụng - android.R.layout.simple_list_item_single_choice:

<?xml version="1.0" encoding="utf-8"?> 
<!-- Copyright (C) 2008 The Android Open Source Project 

    Licensed under the Apache License, Version 2.0 (the "License"); 
    you may not use this file except in compliance with the License. 
    You may obtain a copy of the License at 

      http://www.apache.org/licenses/LICENSE-2.0 

    Unless required by applicable law or agreed to in writing, software 
    distributed under the License is distributed on an "AS IS" BASIS, 
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
    See the License for the specific language governing permissions and 
    limitations under the License. 
--> 

<CheckedTextView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    android:layout_width="match_parent" 
    android:layout_height="?android:attr/listPreferredItemHeightSmall" 
    android:textAppearance="?android:attr/textAppearanceListItemSmall" 
    android:gravity="center_vertical" 
    android:checkMark="?android:attr/listChoiceIndicatorSingle" 
    android:paddingStart="?android:attr/listPreferredItemPaddingStart" 
    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" /> 

Nếu bạn muốn thay đổi nó, bạn có thể sao chép-dán trên vào một file XML mới và sau đó sử dụng thẻ <include> để bao gồm trong bố cục khác của bạn (theo số Apache 2.0 License). Bạn cũng có thể sử dụng nó như một mục danh sách và để nó không thay đổi.

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