Как создать пользовательский вид выбора на диалоговом окне в API-уровне 7 в Android?
Я хотел бы создать пользовательский вид выбора из API уровня 7
когда я нажимаю на кнопку, открываем пользовательское диалоговое окно, в котором есть три выбора номера, и каждый выбор имеет определенный набор значений....
но я не понял, как 3 пикера работают на одном диалоговом окне? и как записать каждый номерПикера onvaluechangeListener();
Мне нравится отображать диалог, как это
4 ответа
Вы должны сделать каждый сборщик номера самостоятельно, если хотите, чтобы он был индивидуальным. В вашем dialog_layout.xml:
<NumberPicker
android:id="@+id/number_picker_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
В вашем методе showPickerDialog:
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
View view = mLayoutInflater.inflate(dialog_layout, null);
builder.setTitle(yourTitle);
final NumberPicker numberPicker = (NumberPicker) view.findViewById(R.id.number_picker_1);
hourPicker.setMaxValue(yourMaxValue);
hourPicker.setMinValue(yourMinValue);
hourPicker.setValue(yourDefaultValue);
hourPicker.setWrapSelectorWheel(false);
builder.setView(view);
builder.setPositiveButton(context.getString(R.string.set), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
int value = numberPicker.getValue();
/*do something with your values*/
dialog.dismiss();
}
});
builder.setNegativeButton(context.getString(R.string.cancel), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
final AlertDialog dialog = builder.create();
dialog.show();
}
Таким образом, вы можете создать действие и задать ему тему диалога в манифесте.
android:theme="@style/Theme.NoTitleBar.Dialog"
Вы также можете использовать библиотеку wheelview для этого
private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {
// the callback received when the user "sets" the Date in the
// DatePickerDialog
public void onDateSet(DatePicker view, int yearSelected,
int monthOfYear, int dayOfMonth) {
year = yearSelected;
month = monthOfYear;
day = dayOfMonth;
UserDataModel.setDob(day + "-" + month + "-" + year);
isDOBSet = true;
String mon = "";
switch (month) {
case 0:
mon = "Jan";
break;
case 1:
mon = "Feb";
break;
case 2:
mon = "Mar";
break;
case 3:
mon = "Apr";
break;
case 4:
mon = "May";
break;
case 5:
mon = "Jun";
break;
case 6:
mon = "Jul";
break;
case 7:
mon = "Aug";
break;
case 8:
mon = "Sep";
break;
case 9:
mon = "Oct";
break;
case 10:
mon = "Nov";
break;
case 11:
mon = "Dec";
break;
}
tv_DOB.setText(mon+" "+day+" " + year);
tv_DOB.setTextColor(getResources().getColor(R.color.DarkGREY));
// Set the Selected Date in Select date Button
}
};
@Override
@Deprecated
protected Dialog onCreateDialog(int id) {
// TODO Auto-generated method stub
switch (id) {
case DATE_DIALOG_ID:
// create a new DatePickerDialog with values you want to show
return new DatePickerDialog(this, mDateSetListener, mYear-20, mMonth,
mDay);
}
return super.onCreateDialog(id);
}
Попробуйте этот код и используйте представление календаря вместо пользовательских сборщиков. Как бы я ни реализовал пользовательский сборщик, как вы требуете, если вам это нужно, дайте мне знать.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<NumberPicker
android:id="@+id/inchpicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignTop="@+id/feetpicker"
android:layout_marginRight="54dp" />
<NumberPicker
android:id="@+id/feetpicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="54dp"
android:layout_marginTop="14dp" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@id/feetpicker"
android:layout_alignRight="@id/feetpicker"
android:layout_below="@+id/feetpicker"
android:layout_marginTop="29dp"
android:text=" Feet"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@color/GREY" />
<TextView
android:id="@+id/tv_maps_selectedLocation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/textView1"
android:layout_alignBottom="@+id/textView1"
android:layout_alignLeft="@id/inchpicker"
android:layout_alignRight="@+id/inchpicker"
android:text=" Inch"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@color/GREY" />
<Button
android:id="@+id/btn_setheight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:layout_centerHorizontal="true"
android:layout_marginTop="12dp"
android:background="@drawable/btn_login"
android:text="Set"
android:textColor="@color/WHITE" />
это мой файл макета.
и это открыть диалог, и вы можете сделать это, как вы хотите.
final Dialog d = new Dialog(this);
d.setTitle("Pick your height");
d.setContentView(R.layout.heightpickdialog);
Button set = (Button) d.findViewById(R.id.btn_setheight);
d.setCancelable(false);
final NumberPicker feetpick = (NumberPicker) d
.findViewById(R.id.feetpicker);
feetpick.setMaxValue(8);
feetpick.setMinValue(1);
feetpick.setValue(Integer.parseInt(feet));
feetpick.setWrapSelectorWheel(false);
final NumberPicker inchPick = (NumberPicker) d
.findViewById(R.id.inchpicker);
inchPick.setMaxValue(11);
inchPick.setMinValue(0);
inchPick.setValue(Integer.parseInt(inch));
inchPick.setWrapSelectorWheel(false);
d.show();
set.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
feet = String.valueOf(feetpick.getValue());
inch = String.valueOf(inchPick.getValue());
UserDataModel.setHeight(feet + " , " + inch);
displayHeight(feet, inch);
d.dismiss();
}
});