一个小实例——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

四、测试效果图

在这里插入图片描述

GitHub地址

传送门~~.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值