2012-11-30 59 views
7

Uygulamamızın kullanıcısı, kayan nokta sayısını ayarlayabilmelidir. Şu anda tüm olası değerlerle bir ArrayAdapter doldurdum ve bir spiker ekledim.Kayan nokta sayıları için android numara işareti

Bu çözüm beklentilerimizi gerçekten karşılamıyor çünkü eğirme kutusu çok uzun. Daha iyi bir yolu var mı? Numberpicker'a bakıyordum - ama bu sadece Tamsayı değerleri ile çalışıyor gibi görünüyor.

Herhangi bir fikrin var mı?

Teşekkürler!

+0

Başka bir çözüm önermek istiyorum [DecimalPicker] (https://stackoverflow.com/a/46047964/753575) – isabsent

cevap

17

NumberPicker Hatta FloatsString vb

bkz this kullanabilir ve bu konuda bilgi edinebilir .. sadece tamsayılar için değil.

öğreticiler için

:

Ve hiç böylesine uzun zaman önce NumberPicker kullanmıştı ve bazı kullanım burada gönderme olabilir:

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); 

Sen ArrayList yapabilirsiniz herhangi bir veri türü ve atayın.

+0

bu bir şaka mı? – user544262772

+0

Çözümünüz harika! Teşekkürler, ama bir sorum var: "String nums []' 'i bulduğumda programın değerini nasıl ayarlayabilirim? –

+0

Ayrıca bkz. Https://stackoverflow.com/a/13590660/1112963 – Zon

0

Başka bir çözüm, iki sayı alanı'u tek bir bileşene birleştirmektir. Money Picker Example'a bakın. Avantajı, çeviriciniz için mümkün olan tüm çift değerleri başlatmanız gerekmemesidir.

Ayrıca java.lang.String.format() işlevini kullanarak, "00", "0123" veya diğerleri gibi özel basamaklı biçimlendirme eklemek gerekebilir. Örnek, here.

  1. Çift Seçici xml-düzen ekleyin:

    <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. ekle özel Çift Seçici sınıfı:

    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. kullanın yeni Çift Seçici bileşeni etkinlik xml:

    <com.example.DoublePicker 
        android:id ="@+id/double_picker" 
        android:layout_width ="match_parent" 
        android:layout_height ="wrap_content" />