정수 대신 문자열을 선택하기 위해 Android NumberPicker 위젯을 사용하는 방법이 있습니까?
정수 대신 문자열을 선택하기 위해 Android NumberPicker 위젯을 사용하는 방법이 있습니까?
답변:
NumberPicker picker = new NumberPicker(this);
picker.setMinValue(0);
picker.setMaxValue(2);
picker.setDisplayedValues( new String[] { "Belgium", "France", "United Kingdom" } );
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];
}
});
도움이 되길 바랍니다!
setDisplayedValues하면 NumberPicker가 너비를 제대로 측정하지 않으므로 텍스트가 제대로 맞더라도 잘릴 수 있습니다.
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)
위의 포맷터보다 원하는 작업을 더 잘 수행하는 것 같습니다. 문서에 언급되어 있지 않지만 아마도 공개 API의 일부가 아닐 것입니다.
setRange()문서 에서이 방법을 전혀 찾을 수 없었 습니다! 이유는 무엇입니까?
이 솔루션을 시도해보십시오.
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();
}
});
이것은 나를 위해 일했습니다.
public class YourClassName extends AppCompatActivity {
NumberPicker picker = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.your_activity_layout_file);
picker = (NumberPicker) findViewById(R.id.pickerId_From_your_Layout_file);
picker.setMinValue(0);
picker.setMaxValue(3);
picker.setDisplayedValues(new String[]{"English", "French","Kiswahili","عربى"});
}
}