2012-11-30 70 views
7

Người dùng ứng dụng của chúng tôi sẽ có thể điều chỉnh số dấu chấm động. Tại thời điểm này, tôi đã điền một ArrayAdapter với tất cả các giá trị có thể và gắn nó vào một spinner.android numberpicker cho số dấu phẩy động

Giải pháp này không thực sự đáp ứng được kỳ vọng của chúng tôi, vì hộp thả xuống hộp xoay quá cao. Có cách nào tốt hơn? Tôi đã nhìn vào Numberpicker - nhưng điều này dường như chỉ hoạt động với các giá trị Integer.

Bất kỳ ý tưởng nào?

Cảm ơn!

+0

Hãy để tôi đề xuất một giải pháp khác [DecimalPicker] (https://stackoverflow.com/a/46047964/753575) – isabsent

Trả lời

17

NumberPicker không chỉ dành cho số nguyên .. Thậm chí bạn có thể sử dụng FloatsString, vv

thấy this và đọc về nó.

cho hướng dẫn:

Và tôi đã sử dụng NumberPicker lâu như thế này và nó có thể là một số sử dụng đăng ở đây:

NumberPicker np; 
    String nums[]= {"Select Fraction","1/64","1/32","3/64","1/16","5/64","3/32","7/64","1/8","9/64","5/32","11/64","3/16","13/64","7/32","15/64","1/4","17/64","9/32","19/64","5/16","21/64","11/32","23/64","3/8","25/64","13/32","27/64","7/16","29/64"}; 

      np = (NumberPicker) findViewById(R.id.np); 

      np.setMaxValue(nums.length-1); 
      np.setMinValue(0); 
      np.setWrapSelectorWheel(false); 
      np.setDisplayedValues(nums); 
      np.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS); 

Bạn có thể làm ArrayList của bất kỳ kiểu dữ liệu nào và gán nó.

+0

đây có phải là trò đùa không? – user544262772

+0

Giải pháp của bạn thật tuyệt vời! Cảm ơn bạn, nhưng tôi có một câu hỏi: làm thế nào tôi có thể thiết lập giá trị programmaticaly, khi tôi có 'String nums []'? –

+0

Cũng xem https://stackoverflow.com/a/13590660/1112963 – Zon

0

Một giải pháp khác là kết hợp hai trường số vào một thành phần. Xem Money Picker Example. Lợi thế của nó là bạn không phải khởi tạo tất cả các giá trị gấp đôi có thể cho spinner của bạn.

Bạn cũng có thể cần phải đính kèm chữ số đặc biệt định dạng, như "00", "0123" hay khác, sử dụng java.lang.String.format() chức năng. Ví dụ là here.

  1. Thêm đúp Picker xml-layout:

    <LinearLayout 
        xmlns:android = "http://schemas.android.com/apk/res/android" 
        android:layout_width = "fill_parent" 
        android:layout_height = "wrap_content" 
        android:gravity = "center"> 
    
        <NumberPicker 
        android:id = "@+id/integer_picker" 
        android:layout_width = "wrap_content" 
        android:layout_height = "wrap_content" 
        android:layout_gravity = "center"/> 
    
        <TextView 
        android:layout_width = "wrap_content" 
        android:layout_height = "wrap_content" 
        android:layout_gravity = "center" 
        android:padding = "5dp" 
        android:text = "@string/local_separator" 
        android:textSize = "20sp"/> 
    
        <NumberPicker 
        android:id = "@+id/fraction_picker" 
        android:layout_width = "wrap_content" 
        android:layout_height = "wrap_content" 
        android:layout_gravity = "center"/> 
    
        <TextView 
        android:layout_width = "wrap_content" 
        android:layout_height = "wrap_content" 
        android:layout_gravity = "center" 
        android:padding = "5dp" 
        android:text = "@string/measure_unit_sign" 
        android:textSize = "20sp"/> 
    
    </LinearLayout> 
    
  2. Thêm tùy chỉnh đúp lớp Picker:

    import android.content.Context; 
    import android.view.LayoutInflater; 
    import android.widget.NumberPicker; 
    
    /** 
    * UI component for double (floating point) values. Can be used 
    * for money and other measures. 
    */ 
    public class DoublePicker 
        extends NumberPicker { 
    
        private int decimals; 
        private NumberPicker integerPicker; 
        private NumberPicker fractionPicker; 
    
        public DoublePicker(
        Context context) { 
    
        super(
         context); 
    
         LayoutInflater 
         .from(
          context) 
         .inflate(
          R.layout.double_picker, 
          this); 
    
         integerPicker = 
         (NumberPicker) findViewById(
          R.id.integer_picker); 
    
         fractionPicker = 
         (NumberPicker) findViewById(
          R.id.fraction_picker); 
        } 
    
        public int getDecimals() { 
    
        return decimals; 
        } 
    
        /** 
        * Sets the amount of digits after separator. 
        * 
        * @param decimals Anount of decimals. 
        */ 
        public void setDecimals(final int decimals) { 
    
        this.decimals = decimals; 
    
        this.setFormatter(new DoublePicker.Formatter() { 
    
         @Override 
         public String format(int i) { 
    
         return String.format(
          "%." + decimals + "f", 
          i); 
         } 
        }); 
        } 
    
        public void setValue(double value) { 
    
        integerPicker.setValue((int) value); 
    
        fractionPicker.setValue(
         Integer.valueOf(
         String 
          .valueOf(value) 
          .split(".") 
          [1])); 
        } 
    } 
    
  3. Sử dụng mới thành phần đúp Picker trong xml hoạt động của bạn:

    <com.example.DoublePicker 
        android:id ="@+id/double_picker" 
        android:layout_width ="match_parent" 
        android:layout_height ="wrap_content" /> 
    
Các vấn đề liên quan