2011-11-22 88 views

回答

180
NumberPicker picker = new NumberPicker(this); 
picker.setMinValue(0); 
picker.setMaxValue(2); 
picker.setDisplayedValues(new String[] { "Belgium", "France", "United Kingdom" }); 
+3

對我來說,關鍵在於你必須設置顯示值和最小值和最大值。謝謝。 –

+0

這比上面選擇的答案好得多。 –

+2

但是,當我點擊文本時,軟鍵盤彈出,我可以編輯文本。 – Confuse

12
String value = String.valueOf(picker.getValue()); 

你可能意味着別的東西,但它不是很清楚你的意思。

更新:

您可以僞造它通過設置自己的格式化程序:

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

picker.setFormatter(new CountryFormatter()); 

的getValue()仍然會返回一個int,所以你可能想國家的名稱映射到它們的ID。

新增: NumberPicker的實施有:

public void setRange(int start, int end, String[] displayedValues) 

這似乎做你想要什麼,然後上面的格式..一個更好的工作雖然沒有在文檔中提到所以大概ISN」公共API的t部

+0

我想用它來選擇例如一個國家。就像Spinner Widget一樣,但是不需要在底部打開一個額外的框架來選擇一個值。 – timoschloesser

+0

已更新答案,但是可能有更好的方式列出國家,而不是試圖破解NumberPicker來做這類事情。 – FunkTheMonk

+0

@FunkTheMonk我無法在文檔中找到這個'setRange()'方法!任何想法爲什麼? – iTurki

30
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]; 
    } 
}); 

希望幫助!

+0

這是迄今爲止最好的答案。 – samatron

+0

經典的方式,謝謝你的回答。 – Pankaj

+0

如果它是一個數組,那麼它沒有size()和get()方法。 size()應該用.length替換,get()用arrayString替換[value] – RexSplode

4

嘗試此解決方案,可以幫助你

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

     } 
    });