2012-11-30 21 views
7

हमारे ऐप का उपयोगकर्ता फ़्लोटिंग पॉइंट नंबर समायोजित करने में सक्षम होना चाहिए। फिलहाल, मैंने सभी संभावित मूल्यों के साथ एक ऐरे एडाप्टर भर दिया और इसे स्पिनर से जोड़ा।फ्लोटिंग पॉइंट नंबरों के लिए एंड्रॉइड नंबरपिकर

यह समाधान वास्तव में हमारी अपेक्षाओं को पूरा नहीं करता है, क्योंकि स्पिनर ड्रॉपडाउन बॉक्स बहुत लंबा है। क्या कोई बेहतर तरीका है? मैं नंबरपिकर को देख रहा था - लेकिन ऐसा लगता है कि केवल इंटीजर वैल्यू के साथ काम करता है।

कोई विचार?

धन्यवाद!

+0

मुझे एक और समाधान [DecimalPicker] का सुझाव दें (https://stackoverflow.com/a/46047964/753575) – isabsent

उत्तर

17

NumberPicker सिर्फ पूर्णांकों के लिए नहीं है .. यहां तक ​​कि आप FloatsString आदि

देख this का उपयोग करें और इसके बारे में पढ़ सकते हैं।

ट्यूटोरियल के लिए

:

और मैं का इस्तेमाल किया था NumberPicker इस तरह बहुत पहले और यह कुछ का उपयोग यहाँ पोस्टिंग हो सकता है:

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

आप की ArrayList कर सकते हैं किसी भी डेटाटाइप और इसे असाइन करें।

+0

क्या यह एक मजाक है? – user544262772

+0

आपका समाधान बढ़िया है! धन्यवाद, लेकिन मेरे पास एक प्रश्न है: जब मैं 'स्ट्रिंग अंक [] 'करता हूं, तो मैं मूल्य प्रोग्रामेटिकल कैसे सेट कर सकता हूं? –

+0

यह भी देखें https://stackoverflow.com/a/13590660/1112963 – Zon

0

एक और समाधान एक घटक में दो संख्या फ़ील्ड को मिलाएं। Money Picker Example देखें। इसका लाभ यह है कि आपको अपने स्पिनर के लिए सभी संभावित डबल मानों को प्रारंभ करने की आवश्यकता नहीं है।

तुम भी "00", "0123" या अन्य तरह देते हैं विशेष अंक स्वरूपण करने के लिए, java.lang.String.format() समारोह का उपयोग कर पड़ सकता है। उदाहरण here है। अपनी गतिविधि एक्सएमएल में

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])); 
    } 
} 
  • उपयोग नई डबल पिकर घटक: कस्टम डबल पिकर वर्ग

    <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> 
    
  • जोड़ें:

    1. जोड़े डबल पिकर एक्सएमएल लेआउट

      <com.example.DoublePicker 
          android:id ="@+id/double_picker" 
          android:layout_width ="match_parent" 
          android:layout_height ="wrap_content" /> 
      
  • संबंधित मुद्दे