2011-12-23 12 views
19

Tôi có chế độ xem Android tùy chỉnh mở rộng 'Nút' và hoạt động như một trình quay nhiều cấp - khi được nhấn, nó sẽ hiển thị một loạt các hộp thoại giống như spinner cho phép người dùng tinh chỉnh lựa chọn của họ. Trong trường hợp này, nó cho phép người dùng chọn ngày, sau đó giờ, sau đó phút (trong khoảng thời gian 5 phút) mà họ muốn có một xe bán tải xảy ra. Khi hộp thoại không hoạt động, mô tả văn bản của lựa chọn hiện tại được hiển thị trên nút.Android: Vẽ nút làm quay tròn

Tôi muốn chỉ thị trực quan rằng người dùng có thể thay đổi lựa chọn bằng cách nhấn nút và nghĩ rằng giao diện của spinner chính xác là những gì tôi cần. Tôi muốn cái nhìn giống như những người khác trên thiết bị, và có thể dễ dàng thay đổi văn bản trên nút, nhưng tôi không chắc chắn làm thế nào để đạt được điều đó mà không có nó là kludgy. Làm cách nào để hiển thị nút dưới dạng biểu tượng giống như spinner nhất quán với các trình quay khác trên thiết bị?

Trả lời

7

Tôi tìm thấy giải pháp cho câu hỏi của mình. Trong hàm tạo cho nút của tôi, tôi đặt nguồn tài nguyên có thể vẽ nền thành "btn_dropdown".

public DateAndTimePicker(Context context) { 
    super(context); 
    this.setBackgroundResource(android.R.drawable.btn_dropdown); 
} 

Trông giống như các nút xoay, không có hành vi nút nào thay đổi và văn bản nút chính xác.

1

Bạn có thể xác định thuộc tính android: background trên nút của mình để sử dụng một đối tượng có thể vẽ giống như hộp xoay tròn. Tôi đã làm điều này bằng cách tạo ra một hình ảnh 9-patch cho spinner, đặt nó trong res/thư mục drawable của tôi, và sau đó thêm một phong cách cho nút spinner tùy chỉnh của tôi:

<style name="DialogSpinner"> 
    <item name="android:background">@drawable/dlg_spinner_background</item> 
    <item name="android:textColor">#919090</item> 
    <item name="android:layout_height">wrap_content</item> 
    <item name="android:layout_width">wrap_content</item> 
    <item name="android:layout_marginTop">2px</item> 
    <item name="android:layout_marginBottom">2px</item> 
</style> 

Đối với nút bấm của bạn, thêm thuộc tính phong cách cho bố cục XML cho bố cục của bạn:

<Button 
    android:id="@+id/okButton" 
    style="@style/DialogSpinner" 
    android:textColor="#a6a2a2" 
    android:text="something" 
/> 
3

Bố cục XML này làm cho nút trông giống như một spinner.

<!-- **** Button styled to look like a spinner **** --> 
    <Button 
     android:id="@+id/btn_category" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@android:drawable/btn_dropdown" 
     android:gravity="center_vertical|left" 
     android:textSize="18sp" /> 
+1

Phong cách của Jonathan Lin = "? Android: attr/spinnerStyle" có vẻ tốt hơn cho 4.0+ – moberme

3

Đây là giải pháp của tôi về nút vẽ giống như một spinner:

<Button 
    android:id="@+id/my_button" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:paddingLeft="12dp" 
    android:gravity="center_vertical|left" 
    android:enabled="true" 
    android:text="@string/my_button_text" 
    android:textColor="@color/my_button_color" 
    style="@style/MyButton" /> 

Đây là một phần của res của tôi/values ​​/ styles.xml:

<style name="MyButton" parent="@android:style/Widget.Spinner"> 
</style> 

Đây là một phần của tôi res/values-v14/styles.xml:

<style name="MyButton" parent="@android:style/Widget.DeviceDefault.Light.Spinner"> 
</style> 
+0

Tôi cũng phải thêm 48dp đệm phải vào một trong res/values ​​/ styles.xml nếu không văn bản sẽ xuất hiện trên đầu trang biểu tượng thả xuống. – aleb

47

Đây là cách tôi quản lý để vẽ một nút được tạo kiểu như một chiếc Spinner:

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="New Button" 
    android:id="@+id/button" 
    style="?android:attr/spinnerStyle" /> 

Vậy đó!

Cập nhật

giống như sau cũng nên làm việc:

<style name="SpinnerButtonStyle" parent="android:Widget.Holo.Spinner"> 
    <item name="android:textColor">@color/entry_field</item> 
    <item name="android:textAppearance">?android:attr/textAppearanceMedium</item> 
</style> 

Đối với phong cách hơn mất một peek vào SDK, ví dụ sdk/platforms/android-18/data/res/values/styles.xml

+6

Hoạt động với 2.1, 2.3, 4.0+. – aleb