Có cách nào để sử dụng tiện ích NumberPicker của Android để chọn chuỗi thay vì số nguyên không?
Có cách nào để sử dụng tiện ích NumberPicker của Android để chọn chuỗi thay vì số nguyên không?
Câu trả lời:
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];
}
});
hy vọng rằng sẽ giúp!
setDisplayedValues, NumberPicker sẽ không đo chiều rộng của nó một cách chính xác, vì vậy văn bản của bạn có thể bị cắt ngay cả khi nó có thể vừa khít.
String value = String.valueOf(picker.getValue());
Bạn có thể muốn nói điều gì đó khác, nhưng không rõ ý bạn là gì.
ĐÃ CẬP NHẬT:
Bạn có thể giả mạo nó bằng cách đặt định dạng của riêng bạn:
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 () sẽ vẫn trả về một int, vì vậy bạn có thể muốn ánh xạ tên các quốc gia vào id của họ.
THÊM: Việc triển khai NumberPicker có:
public void setRange(int start, int end, String[] displayedValues)
Cái nào dường như làm tốt hơn những gì bạn muốn thì trình định dạng trên .. mặc dù nó không được đề cập trong tài liệu nên có thể không phải là một phần của api công cộng
setRange()phương pháp này trong tài liệu! Bất kỳ ý tưởng tại sao?
hãy thử giải pháp này, có thể giúp bạn
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();
}
});
Điều này đã làm việc cho tôi.
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","عربى"});
}
}