Android numberpicker for floating point numbers

The user of our application should be able to customize the floating point number. At the moment, I filled the ArrayAdapter with all possible values ​​and bound it to the counter.

This solution does not really live up to our expectations, since the spinner's drop-down box is too high. Is there a better way? I looked at Numberpicker - but this seems to work only with Integer values.

Any ideas?

Thanks!

+7
source share
2 answers

NumberPicker is not just for integers. Even you can use Floats String etc.

see this and read about it.

for study guides:

And I used NumberPicker long time ago like this, and it could be some useful post here:

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

You can make an ArrayList any data type and assign it.

+17
source

Another solution is to combine two number fields into one component. See an example of choosing money . Its advantage is that you do not need to initialize all possible double values ​​for your counter.

You may also need to attach the formatting of special digits , for example, "00", "0123", or another, using the java.lang.String.format() function. An example is here .

  • Add Double 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> 
  • Add custom Double Picker class:

     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])); } } 
  • Use the new Double Picker component in your xml activity:

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

All Articles