从日期选择器部件隐藏一年 [英] HIDE year from date picker widget

查看:188
本文介绍了从日期选择器部件隐藏一年的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图隐藏从日期选取器widget.This年字段可能看起来像一个重复的问题,但为previous问题给出的答案不帮我隐藏年字段。

下面去我的code::(的onCreate)

 月整型​​= 0;
    年整型= 0;
    日整型= 0;
    OnDateSetListener datePickerListener = NULL;
    CustomDatePickerDialog DP =新CustomDatePickerDialog(getBaseContext(),android.R.style.Theme_Holo_Light_Dialog,datePickerListener,年,月,日);
    DatePickerDialog OBJ = dp.getPicker();    选择器=(的DatePicker)findViewById(R.id.datePicker1);
    尝试{
          。java.lang.reflect.Field中的[] F = obj.getClass()getDeclaredFields();
  //域F [] = picker.getClass()getDeclaredFields();
        对于(java.lang.reflect.Field中的字段:F){
            如果(field.getName()。等于(prabs)){
                field.setAccessible(真);
                DatePicker的日期选择器=(的DatePicker)field.get(OBJ);
                java.lang.reflect.Field中datePickerFields [] = obj.getClass()getDeclaredFields();
                对于(java.lang.reflect.Field中datePickerField:datePickerFields){
                    如果(mYearPicker.equals(datePickerField.getName())||mYearSpinner.equals(datePickerField
                            .getName()))
                    {
                             datePickerField.setAccessible(真);
                             对象yearPicker =新的对象();
                             yearPicker = datePickerField.get(日期选择器);
                             ((查看)yearPicker).setVisibility(View.GONE);
                    }
                }
           / *对象yearPicker =新的对象();
                yearPicker = field.get(选择器);
                ((查看)yearPicker).setVisibility(View.GONE); * /
            }
        }
    }
    赶上(SecurityException异常五){
        Log.d(ERRORe.getMessage());
    }
    赶上(抛出:IllegalArgumentException五){
        Log.d(ERRORe.getMessage());
    }
    赶上(IllegalAccessException E){
        Log.d(ERRORe.getMessage());
    }
    obj.show();

主类之外::

 类CustomDatePickerDialog扩展DatePickerDialog实现OnDateChangedListener
{
    私人DatePickerDialog prabs;    @燮pressLint(NewApi)
    公共CustomDatePickerDialog(上下文的背景下,诠释主题,
            OnDateSetListener听众,年整型,诠释monthOfYear,
            INT请将dayOfMonth)
    {
        超(背景下,主题,听众,今年,monthOfYear,请将dayOfMonth);
        // TODO自动生成构造函数存根
        prabs =新DatePickerDialog(背景下,主题,听众,今年,monthOfYear,请将dayOfMonth);
        prabs.getDatePicker()的init(2015,01,8,这一点)。
        updateTitle(monthOfYear,请将dayOfMonth);
    }    私人无效updateTitle(INT月,日整型)
    {
        // TODO自动生成方法存根
        日历mCalendar = Calendar.getInstance();
        mCalendar.set(的Calendar.MONTH,日);
        mCalendar.set(Calendar.DAY_OF_MONTH,日);
        prabs.setTitle(的getFormat()格式(mCalendar.getTime()));
    }    公众的SimpleDateFormat的getFormat(){
        // TODO自动生成方法存根
        返回新的SimpleDateFormat(MMM,DD);
    }    公共无效onDateChanged(查看的DatePicker,年整型,诠释月,日整型)
    {
        updateTitle(月,日);
    }    公共DatePickerDialog getPicker()
    {
        返回this.prabs;
    }
}

前加入 obj.show(); 它显示与压延整个部件,但我想我只小部件日期和月份

试图解决这个从manyyyy days..but每次都失败:(
任何建议将是很大的帮助..
谢谢。

编辑:

今年,说明此日期选取器窗口小部件的一年月食领域

我提到<一个href=\"http://stackoverflow.com/questions/10793811/how-to-display-year-only-in-date-picker-in-android\">How仅在安卓和自定义日期选取器对话框

错误日志:

  11月1日至9日:26:20.780:E / AndroidRuntime(23840):$ android.view.WindowManager BadTokenException:产生的原因无法添加窗口 - 令牌null不是一个应用程序,这是一个崩溃报告


解决方案

尝试以下code

 最终日历CAL = Calendar.getInstance();
支持mDialog =新CustomerDatePickerDialog(的getContext(),这一点,
cal.get(Calendar.YEAR),cal.get(的Calendar.MONTH)
cal.get(Calendar.DAY_OF_MONTH));
mDialog.show();
DatePicker的DP = findDatePicker((ViewGroup中)mDialog.getWindow()getDecorView());
如果(DP!= NULL){
((的ViewGroup)dp.getChildAt(0))getChildAt(0).setVisibility(View.GONE)。
}

CustomerDatePickerDialog

 类CustomerDatePickerDialog扩展DatePickerDialog {
 公共CustomerDatePickerDialog(上下文的背景下,OnDateSetListener回调,年整型,诠释monthOfYear,诠释请将dayOfMonth){
     超(背景下,回调的一年,monthOfYear,请将dayOfMonth);
 } @覆盖
 公共无效onDateChanged(查看的DatePicker,年整型,诠释月,日整型){
     super.onDateChanged(视图,年,月,日);
     mDialog.setTitle((月+ 1)+ - +日+ - );
 }
}

日期选择器

 私人的DatePicker findDatePicker(ViewGroup中组){
    如果(组!= NULL){
        的for(int i = 0,J = group.getChildCount(); I&LT;焦耳;我++){
            查看孩子= group.getChildAt(I)
            如果(孩子的instanceof的DatePicker){
                回报(DatePicker的)子女;
            }否则如果(孩子的instanceof的ViewGroup){
                DatePicker的结果= findDatePicker((ViewGroup中)的孩子);
                如果(结果!= NULL)
                    返回结果;
            }
        }
    }
    返回null;}

Am trying hide the year field from the date picker widget.This may look like a repeated question but the answers given for previous questions are not helping me to hide the year field..

Here goes my code::(onCreate)

    int month = 0;
    int year = 0;
    int day = 0;
    OnDateSetListener datePickerListener = null;
    CustomDatePickerDialog dp = new CustomDatePickerDialog(getBaseContext(), android.R.style.Theme_Holo_Light_Dialog,  datePickerListener, year, month, day);
    DatePickerDialog obj = dp.getPicker();

    picker = (DatePicker) findViewById(R.id.datePicker1);
    try {
          java.lang.reflect.Field[] f = obj.getClass().getDeclaredFields();
  //      Field f[] = picker.getClass().getDeclaredFields();
        for (java.lang.reflect.Field field : f) {
            if (field.getName().equals("prabs")) {
                field.setAccessible(true);
                DatePicker datePicker = (DatePicker) field.get(obj);
                java.lang.reflect.Field datePickerFields[] = obj.getClass().getDeclaredFields();
                for (java.lang.reflect.Field datePickerField : datePickerFields) {
                    if ("mYearPicker".equals(datePickerField.getName()) || "mYearSpinner".equals(datePickerField
                            .getName()))
                    {
                             datePickerField.setAccessible(true);
                             Object yearPicker = new Object();
                             yearPicker = datePickerField.get(datePicker);
                             ((View) yearPicker).setVisibility(View.GONE);
                    }
                }
           /*     Object yearPicker = new Object();
                yearPicker = field.get(picker);
                ((View) yearPicker).setVisibility(View.GONE);*/
            }
        }
    } 
    catch (SecurityException e) {
        Log.d("ERROR", e.getMessage());
    } 
    catch (IllegalArgumentException e) {
        Log.d("ERROR", e.getMessage());
    } 
    catch (IllegalAccessException e) {
        Log.d("ERROR", e.getMessage());
    }
    obj.show();

outside the main class::

class CustomDatePickerDialog extends DatePickerDialog implements OnDateChangedListener
{
    private DatePickerDialog prabs;

    @SuppressLint("NewApi")
    public CustomDatePickerDialog(Context context, int theme,
            OnDateSetListener listener, int year, int monthOfYear,
            int dayOfMonth) 
    {
        super(context, theme, listener, year, monthOfYear, dayOfMonth);
        // TODO Auto-generated constructor stub
        prabs = new DatePickerDialog(context, theme, listener, year, monthOfYear, dayOfMonth);
        prabs.getDatePicker().init(2015, 01, 8, this);  
        updateTitle(monthOfYear,dayOfMonth);
    }

    private void updateTitle(int Month, int Day)
    {
        // TODO Auto-generated method stub
        Calendar mCalendar = Calendar.getInstance();
        mCalendar.set(Calendar.MONTH, Month);
        mCalendar.set(Calendar.DAY_OF_MONTH, Day);
        prabs.setTitle(getFormat().format(mCalendar.getTime()));
    }

    public SimpleDateFormat  getFormat() {
        // TODO Auto-generated method stub
        return new SimpleDateFormat("MMM, dd");
    }

    public void onDateChanged(DatePicker view,int year, int month,int day)
    {
        updateTitle(month,day);
    }

    public DatePickerDialog getPicker()
    {
        return this.prabs;
    }
}

before adding obj.show(); it was displaying the entire widget with calender,but i i want only widget with date and month

trying to solve this from manyyyy days..but failed every time :( Any suggestions would be of great help.. Thank you..

EDIT::

year field means the date picker widget's year field of eclipse

i referred How to display year only in date picker in android and Custom Date Picker Dialog

Error log::

01-09 11:26:20.780: E/AndroidRuntime(23840): Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application this is a crash report

解决方案

try following code

final Calendar cal = Calendar.getInstance();
mDialog = new CustomerDatePickerDialog(getContext(), this,
cal.get(Calendar.YEAR), cal.get(Calendar.MONTH),
cal.get(Calendar.DAY_OF_MONTH));
mDialog.show();
DatePicker dp = findDatePicker((ViewGroup) mDialog.getWindow().getDecorView());
if (dp != null) {
((ViewGroup) dp.getChildAt(0)).getChildAt(0).setVisibility(View.GONE);
} 

CustomerDatePickerDialog

class CustomerDatePickerDialog extends DatePickerDialog {
 public CustomerDatePickerDialog(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth) {
     super(context, callBack, year, monthOfYear, dayOfMonth);
 }

 @Override
 public void onDateChanged(DatePicker view, int year, int month, int day) {
     super.onDateChanged(view, year, month, day);
     mDialog.setTitle((month + 1) + "-" + day + "-");
 }
}

DAtePicker

   private DatePicker findDatePicker(ViewGroup group) {
    if (group != null) {
        for (int i = 0, j = group.getChildCount(); i < j; i++) {
            View child = group.getChildAt(i);
            if (child instanceof DatePicker) {
                return (DatePicker) child;
            } else if (child instanceof ViewGroup) {
                DatePicker result = findDatePicker((ViewGroup) child);
                if (result != null)
                    return result;
            }
        }
    }
    return null;

} 

这篇关于从日期选择器部件隐藏一年的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆