使用带字符串的NumberPicker Widget

tim*_*ser 88 android

有没有办法使用Android NumberPicker小部件来选择字符串而不是整数?

小智 228

NumberPicker picker = new NumberPicker(this);
picker.setMinValue(0);
picker.setMaxValue(2);
picker.setDisplayedValues( new String[] { "Belgium", "France", "United Kingdom" } );
Run Code Online (Sandbox Code Playgroud)

  • @ArulxZ如果您还没有想到这一点,只需调用picker.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS); 防止键盘弹出. (13认同)
  • 对我而言,关键是你必须在它工作之前设置显示的值和最小值和最大值.谢谢. (3认同)
  • 但是当我点击文本时,软键盘弹出,我可以编辑文本. (2认同)

har*_*thk 36

NumberPicker numberPicker = new NumberPicker(this);
String[] arrayString= new String[]{"hakuna","matata","timon","and","pumba"};
numberPicker.setMinValue(0);
numberPicker.setMaxValue(arrayString.length-1);

numberPicker.setFormatter(new NumberPicker.Formatter() {
  @Override
  public String format(int value) {
    // TODO Auto-generated method stub
    return arrayString[value];
  }
});
Run Code Online (Sandbox Code Playgroud)

希望有所帮助!


Fun*_*onk 15

String value = String.valueOf(picker.getValue());
Run Code Online (Sandbox Code Playgroud)

你可能意味着别的东西,但你的意思并不是很清楚.

更新:

您可以通过设置自己的格式化程序来伪造它:

CountryFormatter implements Formatter {
    public String toString(int value) {
        switch(value) {
            case 0:
                return "England";
            case 1:
                return "France";
        }
        return "Unknown";
    }
}

picker.setFormatter(new CountryFormatter());
Run Code Online (Sandbox Code Playgroud)

getValue()仍将返回一个int,因此您可能希望将国家/地区的名称映射到其ID.

ADDED:NumberPicker的实现具有:

public void setRange(int start, int end, String[] displayedValues)
Run Code Online (Sandbox Code Playgroud)

这似乎比你想要的更好,然后上面的格式化程序..虽然它没有在文档中提到所以可能不是公共API的一部分


Irv*_*gga 7

尝试这个解决方案,可能会帮助你

    NumberPicker pickers = new NumberPicker(this);
    String[] arrayPicker= new String[]{"abc","def","ghi","jkl","mno"};

    //set min value zero
    pickers.setMinValue(0);
    //set max value from length array string reduced 1
    pickers.setMaxValue(arrayPicker.length - 1);
    //implement array string to number picker
    pickers.setDisplayedValues(arrayPicker);
    //disable soft keyboard
    pickers.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS);
    //set wrap true or false, try it you will know the difference
    pickers.setWrapSelectorWheel(false);

    //create button to test selected text string
    btnPicker.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //get position (int) from number picker
            int pos = pickers.getValue();
            //get string from number picker and position
            String selecPicker = arrayPicker[pos];  
            //test toast to get selected text string
            Toast.makeText(context, selecPicker , Toast.LENGTH_SHORT).show();

        }
    });
Run Code Online (Sandbox Code Playgroud)