DialogDemo
一、日期选择对话框的实现
Step 1 布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical" android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/edit_date"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:outlineAmbientShadowColor="@color/colorPrimaryDark"
android:textSize="26sp"
android:singleLine="true"
android:text="请选择"
android:textColor="@color/colorPrimary"
/>
<!--分割线-->
<View
android:layout_width="match_parent"
android:layout_height="1.5dp"
android:layout_marginTop="2dp"
android:background="@color/colorPrimary"/>
<DatePicker
android:id="@+id/date_picker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:datePickerMode="spinner"
android:spinnersShown="true"
android:layout_gravity="center_horizontal"
android:calendarViewShown="false"
android:startYear="1999"
android:calendarTextColor="@color/colorAccent"
android:background="@android:color/transparent"
/>
<View
android:layout_width="match_parent"
android:layout_height="1.5dp"
android:layout_marginTop="2dp"
android:background="#232323"/>
<Button
android:id="@+id/done_btn"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="Done"
android:background="@android:color/transparent"
/>
</LinearLayout>
注:
下面代码为分割线的书写
<View
android:layout_width="match_parent"
android:layout_height="1.5dp"
android:layout_marginTop="2dp"
android:background="#232323"/>
Step 2 设置AlertDialog
View v = LayoutInflater.from(this).inflate(R.layout.date_layout,null);
final AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setView(v);
// builder.show();
//由于AlertDialog.Builder没有dismiss()方法,所以采用得第二种方法 AlertDialog种有dismiss()方法
final AlertDialog alertDialog = builder.create();
alertDialog.show();
Step 3 为datePicker添加监听器
datePicker = v.findViewById(R.id.date_picker);
edit_date = v.findViewById(R.id.edit_date);
Button done = v.findViewById(R.id.done_btn);
date = datePicker.getYear() + "-" + (datePicker.getMonth() + 1) + "-" + datePicker.getDayOfMonth() + " ";
dateShow(datePicker.getFirstDayOfWeek(),date);
datePicker.setOnDateChangedListener(new DatePicker.OnDateChangedListener() {
@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
Log.d("Tag",view.getFirstDayOfWeek()+" ");
date = year + "-" +(monthOfYear+1) + "-" + dayOfMonth+" ";
//解决week的问题
Calendar calendar = Calendar.getInstance();
calendar.set(year,monthOfYear,dayOfMonth);
dateShow(calendar.get(Calendar.DAY_OF_WEEK),date);
}
});
Step 4 为按钮done添加监听器
done.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"你选择了:"+datePicker.getYear() + "-" +(datePicker.getMonth()+1) + "-" + datePicker.getDayOfMonth(),Toast.LENGTH_SHORT).show();
alertDialog.dismiss();
}
});
补充:dateShow()方法:解决DatePicker上方TextView显示问题
private void dateShow(int weekIndex,String mdate) {
switch (weekIndex){
case 1:
edit_date.setText(mdate+ weeks[0]);
break;
case 2:
edit_date.setText(mdate + weeks[1]);
break;
case 3:
edit_date.setText(mdate + weeks[2]);
break;
case 4:
edit_date.setText(mdate + weeks[3]);
break;
case 5:
edit_date.setText(mdate + weeks[4]);
break;
case 6 :
edit_date.setText(mdate + weeks[5]);
break;
case 7:
edit_date.setText(mdate+ weeks[6]);
break;
}
}
二、单选列表对话框的实现
方法一:利用布局文件
Step 1 布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:padding="4dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@drawable/xingxing"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="性别选择"
android:textColor="@color/colorPrimaryDark"
android:textSize="30sp"
android:layout_gravity="center_vertical"
android:layout_marginLeft="8dp"
/>
</LinearLayout>
<RadioGroup
android:id="@+id/radio_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="30dp"
android:layout_marginTop="20dp"
>
<RadioButton
android:id="@+id/male"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="26sp"
android:text=" 男"
android:textColor="@android:color/darker_gray"
/>
<RadioButton
android:id="@+id/female"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:textSize="26sp"
android:text=" 女"
android:textColor="@android:color/darker_gray"
/>
<RadioButton
android:id="@+id/noidea"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:textSize="26sp"
android:text=" 未知"
android:textColor="@android:color/darker_gray"
/>
<RadioButton
android:id="@+id/guess"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:textSize="26sp"
android:text=" 你猜"
android:textColor="@android:color/darker_gray"
android:layout_marginBottom="20dp"
/>
</RadioGroup>
</LinearLayout>
Step 2 设置AlertDialog
View v = LayoutInflater.from(this).inflate(R.layout.radio_layout,null);
final AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setView(v);
// builder.show();
//由于AlertDialog.Builder没有dismiss()方法,所以采用得第二种方法 AlertDialog种有dismiss()方法
final AlertDialog alertDialog = builder.create();
alertDialog.show();
Step 3 为RadioButton添加监听器
RadioGroup radioGroup = v.findViewById(R.id.radio_group);
final RadioButton male = v.findViewById(R.id.male);
final RadioButton female = v.findViewById(R.id.female);
final RadioButton noidea = v.findViewById(R.id.noidea);
final RadioButton guess = v.findViewById(R.id.guess);
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId){
case R.id.male:
Toast.makeText(MainActivity.this,"你选择了:"+male.getText(),Toast.LENGTH_SHORT).show();
alertDialog.dismiss();
break;
case R.id.female:
Toast.makeText(MainActivity.this,"你选择了:"+female.getText(),Toast.LENGTH_SHORT).show();
alertDialog.dismiss();
break;
case R.id.noidea:
Toast.makeText(MainActivity.this,"你选择了:"+noidea.getText(),Toast.LENGTH_SHORT).show();
alertDialog.dismiss();
break;
case R.id.guess:
Toast.makeText(MainActivity.this,"你选择了:"+guess.getText(),Toast.LENGTH_SHORT).show();
alertDialog.dismiss();
break;
}
}
});
方法2:使用AlertDialog.Builder中的方法【不需要布局文件】
final String[] itemsRadio = {"男","女","你猜","未知"};
View v = LayoutInflater.from(this).inflate(R.layout.radio_layout,null);
// ArrayAdapter adapter = new ArrayAdapter(this,R.layout.radio_layout,R.id,items);
final AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setIcon(R.drawable.xingxing)
.setTitle("性别选择")
.setSingleChoiceItems(itemsRadio,0 , new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this,"你选择了:"+itemsRadio[which],Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
});
builder.show();
三、多选列表对话框的的实现
Step 1 在activity_layout.xml中添加TextView
<TextView
android:id="@+id/checkbox_main_txt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:textSize="28sp"
android:layout_marginTop="20dp"
/>
Step 2 设置AlertDialog
final String[] items = {"编程","旅游","健身","追剧"};
View v = LayoutInflater.from(this).inflate(R.layout.title_layout,null);
boolean[] isChecks = {false,false,false,false};
final AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setIcon(R.drawable.xingxing)
.setTitle("个人喜好")
// .setCustomTitle(v)
.setMultiChoiceItems(items,isChecks , new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
check_context.append(items[which].toString()+" ");
Toast.makeText(MainActivity.this,"你选择了:"+items[which].toString(),Toast.LENGTH_SHORT).show();
}
});
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this,"你选择了:"+check_context.getText(),Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
});
builder.show();
check_context.setText("个人喜好");
check_context.append("\n");
补充说明
AlertDialog.Builder中
builder.setMultiChoiceItems() 方法 //设置多选框
builder.setSingleChoiceItems() 方法 //设置单选框
builder.setIcon() //设置图标
builder.setTitle() //设置标题
builder.setCustomTitle() //设置自定义标题
builder.setView() //设置view