自定义日期选择器对话框

2024-04-11

目前,我正在使用经过修改的本机对话框来隐藏日期微调器,并且工作正常。

但现在我想以这样的格式设置日期,当我旋转月份微调器或年份微调器时,对话框仅显示月份和年份而不是完整的日历日期,我的日期选择器对话框的自定义代码如下:

    @Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
    case DATE_DIALOG_ID:
       // set date picker as current date


        DatePickerDialog datePickerDialog = this.customDatePicker();
        return datePickerDialog;
    }
    return null;
}


private DatePickerDialog.OnDateSetListener datePickerListener
            = new DatePickerDialog.OnDateSetListener() {


    // when dialog box is closed, below method will be called.
    @Override
    public void onDateSet(DatePicker datepickerView, int selectedYear,
            int selectedMonth, int selectedDay) {


    /*  year = selectedYear;
        month = selectedMonth;
        day = selectedDay;*/

        mynewYear=selectedYear;
        myNewMonth=selectedMonth;
        myNewDay=selectedDay;

        try {
            checkDate();
        } catch (NoSuchAlgorithmException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        /*time_date_TV.setText(new StringBuilder()
          .append(myNewMonth + 1).append("/")
          .append(myNewDay ).append("/").append(mynewYear));
               */





    }
};

private DatePickerDialog customDatePicker() {

    DatePickerDialog dpd = new DatePickerDialog(context,  android.R.style.Theme_Holo_Light_Dialog,datePickerListener,
            year, month,day );
     if(month==0)
       {
           mmonth="January";
       }
       if(month==1)
       {
           mmonth="Faburary";
       }
       if(month==2)
       {
           mmonth="March";
       }
       if(month==3)
       {
           mmonth="April";
       }
       if(month==4)
       {
           mmonth="May";
       }
       if(month==5)
       {
           mmonth="June";
       }
       if(month==6)
       {
           mmonth="July";
       }
       if(month==7)
       {
           mmonth="August";
       }
       if(month==8)
       {
           mmonth="September";
       }if(month==9)
       {
           mmonth="October";
       }
       if(month==10)
       {
           mmonth="November";
       }
       if(month==11)
       {
           mmonth="December";
       }

    dpd.setTitle(""+mmonth+", "+year);
    try {

    Field[] datePickerDialogFields = dpd.getClass().getDeclaredFields();
    for (Field datePickerDialogField : datePickerDialogFields) {
    if (datePickerDialogField.getName().equals("mDatePicker")) {
    datePickerDialogField.setAccessible(true);
    DatePicker datePicker = (DatePicker) datePickerDialogField
    .get(dpd);

    Field datePickerFields[] = datePickerDialogField.getType()
    .getDeclaredFields();
    for (Field datePickerField : datePickerFields) {
    if ("mDayPicker".equals(datePickerField.getName())
    || "mDaySpinner".equals(datePickerField
    .getName())) {
    datePickerField.setAccessible(true);
    Object dayPicker = new Object();
    dayPicker = datePickerField.get(datePicker);
    ((View) dayPicker).setVisibility(View.GONE);
    }
    }
    }

    }
    } catch (Exception ex) {
    }
    return dpd;
    }

当第一次弹出对话框时,它工作正常,因为我设置了标题

DatePickerDialog.setTitle("");

但是当第一次弹出对话框时效果很好,但我想更新ondatechangelistner那我该怎么做


经过半天的头脑风暴,我找到了这个解决方案,这可能会帮助其他遇到这种情况的人

我的日期选择器自定义类如下,每次用户更改月份/年份时,都会更新标题中的日期

class CustomDatePickerDialog extends DatePickerDialog implements OnDateChangedListener {

private DatePickerDialog mDatePicker;

@SuppressLint("NewApi")
public CustomDatePickerDialog(Context context,int theme, OnDateSetListener callBack,
        int year, int monthOfYear, int dayOfMonth) {
    super(context, theme,callBack, year, monthOfYear, dayOfMonth);
    mDatePicker = new DatePickerDialog(context,theme,callBack, year, monthOfYear, dayOfMonth);

    mDatePicker.getDatePicker().init(2013, 7, 16, this);

    updateTitle(year, monthOfYear);

}
public void onDateChanged(DatePicker view, int year,
        int month, int day) {
    updateTitle(year, month);
}
private void updateTitle(int year, int month) {
    Calendar mCalendar = Calendar.getInstance();
    mCalendar.set(Calendar.YEAR, year);
    mCalendar.set(Calendar.MONTH, month);
//       mCalendar.set(Calendar.DAY_OF_MONTH, day);
        mDatePicker.setTitle(getFormat().format(mCalendar.getTime()));

}   

public DatePickerDialog getPicker(){

    return this.mDatePicker;
}
    /*
     * the format for dialog tile,and you can override this method
     */
public SimpleDateFormat getFormat(){
    return new SimpleDateFormat("MMM, yyyy");
};   
}

以下是从日期选择器对话框中隐藏日期及其微调器的代码

CustomDatePickerDialog dp = new CustomDatePickerDialog(context, android.R.style.Theme_Holo_Light_Dialog,  datePickerListener, year, month, day);

               DatePickerDialog obj = dp.getPicker();
              try{
                         Field[] datePickerDialogFields = obj.getClass().getDeclaredFields();
                         for (Field datePickerDialogField : datePickerDialogFields) { 
                             if (datePickerDialogField.getName().equals("mDatePicker")) {
                                 datePickerDialogField.setAccessible(true);
                                 DatePicker datePicker = (DatePicker) datePickerDialogField.get(obj);
                                 Field datePickerFields[] = datePickerDialogField.getType().getDeclaredFields();
                                 for (Field datePickerField : datePickerFields) {
                                    if ("mDayPicker".equals(datePickerField.getName()) || "mDaySpinner".equals(datePickerField
                                      .getName())) {
                                       datePickerField.setAccessible(true);
                                       Object dayPicker = new Object();
                                       dayPicker = datePickerField.get(datePicker);
                                       ((View) dayPicker).setVisibility(View.GONE);
                                    }
                                 }
                              }

                           }
                         }catch(Exception ex){
                         }
              obj.show();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自定义日期选择器对话框 的相关文章

  • 检测到设备正在振动?

    我使用下面的代码来振动设备 public void vibrator try Vibrator vibrator Vibrator getSystemService Context VIBRATOR SERVICE vibrator vib
  • Android SoundPool 堆限制

    我正在使用 SoundPool 加载多个声音剪辑并播放它们 据我所知 它的功能 100 正确 但在 load 调用期间 我的日志中充斥着以下内容 06 09 11 30 26 110 ERROR AudioCache 23363 Heap
  • 如何更新 Firebase 中的节点密钥?

    如何重命名14 04 2017 node 没有用于重命名节点的 API 您必须获取节点的值 使用新名称将其保存到数据库并删除旧节点
  • Android:“dp”到“px”转换?

    我正在读这篇文章 http developer android com guide practices screens support html http developer android com guide practices scre
  • Android libgdx 首选项丢失

    我在 Libgdx 引擎中创建了 Android 游戏 一段时间后 我注意到在某些应用程序杀手中杀死该应用程序后 或者如果我在 Android 设置中执行 强制关闭 操作 我保存到首选项中的游戏选项就会丢失 有办法防止这种情况吗 我从来没有
  • Delphi XE7 Android 全屏(隐藏软键)

    如何在XE7中全屏显示 隐藏顶部 标题 和底部 软键 工具栏 在 XE6 中 我可以通过在应用程序部分写入来调整 AndroidManifest 以使我的应用程序全屏显示并且没有操作栏 android theme android style
  • (Ionic 2)尝试回退到 Cordova-lib 执行时发生错误:TypeError:无法读取未定义的属性“then”

    Edit 使用 ionic 2 时会发生这种情况 我知道它还不稳定 但我认为可能有一些解决方案 因为其他人似乎没有遇到这个问题 Edit end 由于某种原因 我在尝试使用 ionic build android 和 ionic build
  • 接近语法错误(代码1)插入Android SQLite

    我正在创建一个通讯录应用程序 用户可以在其中输入姓名 电子邮件地址和号码 我希望将此数据保存在数据库中 但我似乎无法使插入方法起作用 我收到的错误是 android database sqlite SQLiteException near
  • 设置从 Facebook 登录获取用户电子邮件 ID 的权限

    我在用着Facebook 3 0 SDK对于安卓 我必须实施Facebook登录 我正在访问用户的基本信息 例如姓名 用户 ID 但我也想访问用户的电子邮件 我浏览了很多博客和论坛 但不知道该怎么做 我正在使用我自己的 android 按钮
  • Firebase:如何在Android应用程序中设置默认通知渠道?

    如何设置default通知渠道通知消息当应用程序在后台运行时会出现什么情况 默认情况下 这些消息使用 杂项 通道 如你看到的在官方文档中 https firebase google com docs cloud messaging andr
  • 应用程序未安装在 Android 模拟器上

    我正在 android Geocoder 中开发一个应用程序 当我运行该应用程序时 它会显示 2011 01 11 11 08 13 GeoTourProject 自动目标模式 使用现有模拟器 emulator 5554 运行兼容的 AVD
  • CookieManager.getInstance().removeAllCookie();不删除所有cookie

    我在应用程序的 onCreate 中调用 CookieManager getInstance removeAllCookie 我遇到了一个奇怪的问题 我看到 GET 请求中传递了意外的 cookie 值 事实上 cookie 值是一个非常非
  • MediaCodec 创建输入表面

    我想使用 MediaCodec 将 Surface 编码为 H 264 使用 API 18 有一种方法可以通过调用 createInputSurface 然后在该表面上绘图来对表面中的内容进行编码 我在 createInputSurface
  • Android Studio:无法启动守护进程

    当我尝试在 Android Studio 中导入 gradle 项目时 遇到以下错误 Unable to start the daemon process This problem might be caused by incorrect
  • 如何在不更改手机语言的情况下更改Android应用程序语言?

    我希望用户在应用程序内选择一种语言 选择语言后 我希望字符串使用特定语言 如果我更改手机语言 那么我的应用程序将以设置的语言运行 我无法找到任何在不更改手机语言的情况下设置语言的方法 此外 一旦设置了语言 更改就应该反映出来 有人可以建议一
  • 如何将设备连接到Eclipse?

    我无法解决这个简单的问题 我正在尝试通过 USB 电缆将我的设备连接到 Eclipse 在我的 PC 上 我已经安装了 Eclipse 和 Android SDK 并且在模拟器上运行该程序运行良好 我已在我的电脑上下载并安装了 Samsun
  • 在 Android 上按下电源按钮时,如何防止先调用 onDestroy() 再调用 onCreate()

    我正在记录每个 onCreate 和 onDestroy 调用 我发现 一旦我单击 Android 上的电源按钮 以及模拟器上的电源按钮 我的活动中就会拨打电话 gt onDestroy gt onCreate 这会杀死我的游戏 然后立即从
  • 使用 Espresso 检查 EditText 的字体大小、高度和宽度

    如何使用 Espresso 检查 EditText 的字体大小 高度和宽度 目前要分割我使用的文本 onView withId R id editText1 perform clearText typeText Amr 并阅读文本 onVi
  • android Accessibility-service 突然停止触发事件

    我有一个 AccessibilityService 工作正常 但由于开发过程中的某些原因它停止工作 我似乎找不到这个原因 请看一下我的代码并告诉我为什么它不起作用 public class MyServicee extends Access
  • Angular Material 日期选择器选择的默认日期

    这对我的日期选择器有帮助 http demo agektmr com datalist 现在在这个date picker我想要默认选择今天的日期 谁能帮我如何设置默认日期 谢谢 在我用过的有角材料中this http demo agektm

随机推荐

  • 多线程应用程序中的异常。

    我从一位非常有洞察力的人那里听说 线程中抛出 而不是捕获 的异常正在传播到父线程 真的吗 我尝试过类似的操作 但无法捕获创建线程中的异常 static void Main string args ParameterizedThreadSta
  • MySQL 5.7 innoDB集群中的一个节点崩溃并且无法将崩溃的节点重新加入集群

    我们的一个环境中有一个 MySQL innodb 集群 集群中的一个节点崩溃了 虽然我们能够使崩溃的节点联机 但无法将其加入集群 有人可以帮助恢复 恢复节点并将其加入集群吗 我们尝试使用 dba rebootClusterFromCompl
  • SMTP 客户端在本地主机上发送消息失败,在远程主机上成功

    我有一个小型 tcp 服务器 除其他外 还用于通过 SMTP 服务器发送邮件 问题是 当我在开发计算机 到 smtp 服务器的远程连接 上运行它时它可以正常工作 但是当我在与 SMTP 服务器 Windows Server 2008 R2
  • 本地语句输出与调用命令输出非常不同

    直接登录到系统 我运行此语句 并得到以下输出 Get ClusterNetwork cluster backups role None 这是完美的 甚至美丽 因为它的简单 然而 当我使用 invoke command 从远程计算机运行完全相
  • chrome 72 更改了源映射行为

    我正在为 Chrome 开发一个 Webextension 代码是用 Typescript 编写的 所以我需要源映射 该扩展与 ParcelJS 捆绑在一起 但我相信我的问题与捆绑器无关 从 Chrome 70 更新到 72 后 源映射不再
  • 限制用户从“主要区域”Dynamics 365 on Prem 进行访问

    我们创建了一个新的 应用程序 这是我们解决方案中迄今为止的第一个应用程序 这个想法是 一组用户将只能访问该应用程序 而他们将无法再访问该应用程序的 主要区域 某些实体的某些表格看起来与其他实体不同等 主要区域 是指默认情况下或多或少存在的
  • 运算符 == 与 data.table 中的逻辑列不一致

    请参阅以下可重现的示例 library data table set seed 123 DT lt data table A rep 0 3 10000 DT B runif N lt A DT B T N 1 3005 DT summar
  • 在R中提取形状文件对象的质心?

    我有一个形状文件 上传到以下路径 https drive google com open id 0B1ITb 7lHh1EUFVfVWc4ekRfSnc https drive google com open id 0B1ITb 7lHh1
  • 更改选定直方图 bin 条的颜色(给定其值)

    类似于我之前问过的一个问题 https stackoverflow com questions 35780048 labelling a matplotlib histogram bin with an arrow 我有一个像这样的 MWE
  • Google 文档列表 API 和 Google Drive SDK

    文档列表 Api 的路线图是什么 它比 Google Drive SDK 有更多的功能 即 ACL 现在 JAVA 或 PHP 的示例已从文档中消失 它会在不久的将来被弃用吗 目前 Documents List API 是与 Google
  • 当行内的单元格具有类名称时,为什么 CSS 悬停在表格行上不起作用?

    我遇到了这个问题 所以任何帮助将不胜感激 我有一张有几行的桌子 行中的每个单元格都属于某个类别 我使用这些类名来给单元格着色 这是我的表中的一个示例行 tr td class summarypage odd column Theme td
  • 链轮 SASS 部分 ERB 延伸

    我注意到 使用最新的 Rails 和 sprockets 版本 3 2 1 和 2 2 0 将 erb 文件扩展名添加到 sass 部分时似乎存在问题 例如如果 somestylefilename css sass 重命名为 somesty
  • 是否可以在已经存在的对象中模拟单个方法?

    对于集成测试 我需要在 java 服务客户端中模拟特定方法 而不破坏其中的其余信息 它没有自构造函数 所以这样的解决方案是不可能的 private DBClient mockClient new DBClient alreadyExisti
  • MUI 文本字段上的省略号效果

    如何在 MUI 文本字段上添加省略号效果 他们有一个用于文本换行的多行选项 但我想要单行 像您可以做的那样换行文本
  • Xamarin:未找到绑定属性

    这个应用程序在 UWP 中运行得很好 除了在 Android 上失败的一个更基本的属性之外 我已经删除了所有内容 它看起来像这样 我的页面 xaml
  • 使用 apikey 从 Google Sheets API 获取 403 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我一直在使用 Google Sheets 作为我的一些应用程序的简单数据后端 基本上 这些是 20 行 x 20 列 客户希望能够
  • 调整图像大小,同时保持纵横比

    大家好 我从互联网上下载了一张图像 需要将其大小调整为其大小的 1 4 同时保留其纵横比 关于如何最简单地做到这一点有什么想法吗 WebRequest requestPic WebRequest Create imageURL WebRes
  • 关于并行任务的 `srun ... >output_file` 的语义

    抱歉 这个问题需要大量的积累 但总而言之 它是关于许多并行实例的条件srun gt output file会或不会导致某些进程 任务破坏其他进程 任务产生的输出 案例 0 仅 bash 无 SLURM 假设prog 0 sh是以下玩具脚本
  • Overflow:hidden 隐藏边框但不隐藏溢出的元素

    我正在研究带有过渡的标题 但有些东西不起作用 我将 ul 设为 120px li 设为 60px 我给 li hover 一个translateY 60px 这样当您将鼠标悬停在 li 上时它就会弹出 我想隐藏溢出的内容 直到您将鼠标悬停在
  • 自定义日期选择器对话框

    目前 我正在使用经过修改的本机对话框来隐藏日期微调器 并且工作正常 但现在我想以这样的格式设置日期 当我旋转月份微调器或年份微调器时 对话框仅显示月份和年份而不是完整的日历日期 我的日期选择器对话框的自定义代码如下 Override pro