GVKun编程网logo

AppCompatSpinner的条目在第二次选择时未打开TimePickerDialog。请查看详细信息

13

对于想了解AppCompatSpinner的条目在第二次选择时未打开TimePickerDialog。请查看详细信息的读者,本文将提供新的信息,并且为您提供关于AndroidAPI21–以编程方式隐藏

对于想了解AppCompatSpinner的条目在第二次选择时未打开TimePickerDialog。请查看详细信息的读者,本文将提供新的信息,并且为您提供关于Android API 21 – 以编程方式隐藏TimePickerDialog中的模拟时钟、Android CalendarView,DatePicker,TimePicker,以及NumberPicker的使用、Android DatePickerDialog和TimePickerDialog显示样式、Android DatePicker和DatePickerDialog基本用法示例的有价值信息。

本文目录一览:

AppCompatSpinner的条目在第二次选择时未打开TimePickerDialog。请查看详细信息

AppCompatSpinner的条目在第二次选择时未打开TimePickerDialog。请查看详细信息

我将以下内容作为AppCompatSpinner条目:

<string-array name="startTimeList">    <item>Now</item>    <item>Pick a time..</item></string-array>

选择后Pick a time..,将TimePickerDialog打开a并允许用户选择时间。这是如何做:

startTimeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {            @Override            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {//                startTimeString = adapterView.getItemAtPosition(i).toString();                DateFormat currentDateFormat = new SimpleDateFormat("HH:mm:ss");                userAvailableTimeInSF = currentDateFormat.format(new Date());                final TextView startTimeSpinnerTV = (TextView) adapterView.getSelectedView();                startTimeSpinnerTV.setText(userAvailableTimeInSF);                switch (i) {                    case 0:                        userAvailableTimeInSF = currentDateFormat.format(new Date());                        startTimeSpinnerTV.setText("Now");                        break;                    default:                        final Calendar c = Calendar.getInstance();                        mHour = c.get(Calendar.HOUR_OF_DAY);                        mMinute = c.get(Calendar.MINUTE);                        TimePickerDialog timePickerDialog = new TimePickerDialog(PostSportRequest.this,                                new TimePickerDialog.OnTimeSetListener() {                                    @Override                                    public void onTimeSet(TimePicker view, int hourOfDay,                                                          int minute) {                                        Calendar date = Calendar.getInstance();                                        date.set(Calendar.HOUR_OF_DAY, hourOfDay);                                        date.set(Calendar.MINUTE, minute);                                        date.set(Calendar.AM_PM, date.get(Calendar.AM_PM));                                        showTime(hourOfDay, minute);                                        userAvailableTimeInSF = new SimpleDateFormat("HH:mm:ss").format(date.getTime());                                        startTimeSpinnerTV.setText(userAvailableTimeAMPM);                                        Toast.makeText(getBaseContext(), "userAvailableTimeInSF: " + userAvailableTimeInSF, Toast.LENGTH_SHORT).show();                                    }                                }, mHour, mMinute, false);                        timePickerDialog.show();                        break;                }            }            @Override            public void onNothingSelected(AdapterView<?> adapterView) {            }        });

Pick a time..第一次选择时,将成功打开TimePickerDialog并显示所选的时间,但是当我再次选择它或再次单击它时,什么也没有发生!

我不知道为什么!

请让我知道无论选择或单击多少次,如何打开TimePickerDialog并选择时间。

答案1

小编典典

跟着这些步骤:

创建一个自定义微调器类

    import android.content.Context;    import android.util.AttributeSet;    import android.view.View;    import android.widget.AdapterView;    import android.widget.Spinner;    public class SpinnerOnSameSelection extends Spinner {        OnItemSelectedListener listener;        private AdapterView<?> lastParent;        private View lastView;        private long lastId;        public SpinnerOnSameSelection(Context context, AttributeSet attrs) {            super(context, attrs);            // TODO Auto-generated constructor stub            initlistner();        }        @Override        public void setSelection(int position) {            if (position == getSelectedItemPosition() && listener != null) {                listener.onItemSelected(lastParent, lastView, position, lastId);            } else {                super.setSelection(position);            }        }        private void initlistner() {            // TODO Auto-generated method stub            super.setOnItemSelectedListener(new OnItemSelectedListener() {                @Override                public void onItemSelected(AdapterView<?> parent, View view,                                           int position, long id) {                    // TODO Auto-generated method stub                    lastParent = parent;                    lastView = view;                    lastId = id;                    if (listener != null) {                        listener.onItemSelected(parent, view, position, id);                    }                }                @Override                public void onNothingSelected(AdapterView<?> parent) {                    // TODO Auto-generated method stub                    if (listener != null) {                        listener.onNothingSelected(parent);                    }                }            });        }        public void setOnItemSelectedEvenIfUnchangedListener(                OnItemSelectedListener listener) {            this.listener = listener;        }}

onItemSelectedListener 在您的活动中创建

private AdapterView.OnItemSelectedListener listener; listener = new AdapterView.OnItemSelectedListener() {            @Override            public void onItemSelected(AdapterView<?> adapterView, View arg1,                                       int i, long arg3) {                //startTimeString = adapterView.getItemAtPosition(i).toString();                DateFormat currentDateFormat = new SimpleDateFormat("HH:mm:ss");                userAvailableTimeInSF = currentDateFormat.format(new Date());                final TextView startTimeSpinnerTV = (TextView) adapterView.getSelectedView();                startTimeSpinnerTV.setText(userAvailableTimeInSF);                switch (i) {                    case 0:                        // userAvailableTimeInSF = currentDateFormat.format(new Date());                        startTimeSpinnerTV.setText("Now");                        break;                    case 1:                        final Calendar c = Calendar.getInstance();                        mHour = c.get(Calendar.HOUR_OF_DAY);                        mMinute = c.get(Calendar.MINUTE);                        TimePickerDialog timePickerDialog = new TimePickerDialog(MainActivity.this,                                new TimePickerDialog.OnTimeSetListener() {                                    @Override                                    public void onTimeSet(TimePicker view, int hourOfDay,                                                          int minute) {                                        Calendar date = Calendar.getInstance();                                        date.set(Calendar.HOUR_OF_DAY, hourOfDay);                                        date.set(Calendar.MINUTE, minute);                                        date.set(Calendar.AM_PM, date.get(Calendar.AM_PM));                                        //showTime(hourOfDay, minute);                                       /* userAvailableTimeInSF = new SimpleDateFormat("HH:mm:ss").format(date.getTime());                                        startTimeSpinnerTV.setText(userAvailableTimeAMPM);*/                                        Toast.makeText(getBaseContext(), "userAvailableTimeInSF: " + userAvailableTimeInSF, Toast.LENGTH_SHORT).show();                                    }                                }, mHour, mMinute, false);                        timePickerDialog.show();                        break;                }            }            @Override            public void onNothingSelected(AdapterView<?> arg0) {                // TODO Auto-generated method stub            }        };}

将侦听器对象添加到自定义微调器方法

SpinnerOnSameSelection startTimeSpinner;in onCreate(): startTimeSpinner = (SpinnerOnSameSelection) findViewById(R.id.idOfItemInXml);startTimeSpinner.setOnItemSelectedEvenIfUnchangedListener(listener);

在您的xml档案中

<your_package_name.SpinnerOnSameSelection    android:id="@+id/startTimeSpinner"    android:layout_width="match_parent"    android:layout_height="40dp"    android:layout_alignParentBottom="true"    android:entries="@array/mList"></your_package_name.SpinnerOnSameSelection>

Android API 21 – 以编程方式隐藏TimePickerDialog中的模拟时钟

Android API 21 – 以编程方式隐藏TimePickerDialog中的模拟时钟

由于 Android 5.0,TimePickerDialog默认显示模拟时钟.如何通过代码隐藏模拟时钟(更改显示模式)?

要在xml中获得类似的TimePicker结果:

...android:timePickerMode="spinner">

解决方法

您可以在创建时间选择器时传递defStyleAttr或defStyleRes.

根据:alanv的https://stackoverflow.com/a/26961308/4409113第二条评论

还请检查以下链接:

http://developer.android.com/reference/android/R.styleable.html#TimePicker_timePickerMode

http://developer.android.com/reference/android/R.attr.html#timePickerMode

希望有所帮助.

Android CalendarView,DatePicker,TimePicker,以及NumberPicker的使用

Android CalendarView,DatePicker,TimePicker,以及NumberPicker的使用

Android  CalendarView,DatePicker,TimePicker,以及NumberPicker的使用

简单复习下基础UI组件,做个简单的总结,Android的这些组件封装的特别好,基本套上就能使用,当然,这个减轻了开发者的负担!不过如果想要深入研究,这里面还是有很大的空间值得深度分析!简单的几个例子!仅供参考:

不多说,先上效果图:

CalendarView

ChooseView

NumberPicker

CalendarView代码区 :

main.xml代码区:CalendarView组件的使用加上一些简单的属性即可!

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent">
  <TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="选择您的生日:"/>
  <!-- 设置以星期二作为每周第一天
  设置该组件总共显示4个星期
  并对该组件的日期时间进行了定制 -->
  <CalendarView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:firstDayOfWeek="3"
    android:shownWeekCount="4"
    android:selectedWeekBackgroundColor="#aff"
    android:focusedMonthDateColor="#f00"
    android:weekSeparatorLineColor="#ff0"
    android:unfocusedMonthDateColor="#f9f"
    android:id="@+id/calendarView" />
</LinearLayout>

Activity区代码:

public class MainActivity extends Activity
{
  CalendarView cv;
  @Override
  protected void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    cv = (CalendarView)findViewById(R.id.calendarView);
    // 为CalendarView组件的日期改变事件添加事件监听器
    cv.setonDatechangelistener(new OnDatechangelistener()
    {
      @Override
      public void onSelectedDayChange(CalendarView view,int year,int month,int dayOfMonth)
      {
        // 使用Toast显示用户选择的日期
        Toast.makeText(MainActivity.this,"你生日是" + year + "年" + month + "月"
                + dayOfMonth + "日",Toast.LENGTH_SHORT).show();
      }
    });
  }
}

DatePicker,结合Calerdar的使用,可以供用户选择日期时使用:

代码区:

main.xml代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent">
  <TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="选择购买本书的具体时间"/>
  <!-- 定义一个DatePicker组件 -->
  <DatePicker android:id="@+id/datePicker"
    android:layout_width="wrap_content"
    android:layout_height="200dp"
    android:layout_gravity="center_horizontal"
    android:startYear="2000"
    android:endYear="2016"
    android:calendarViewShown="true"
    android:spinneRSShown="true"/>
  <!-- 定义一个TimePicker组件 -->
  <TimePicker android:id="@+id/timePicker"
    android:layout_width="wrap_content"
    android:layout_height="100dp"
    android:layout_gravity="center_horizontal"/>
  <!-- 显示用户输入日期、时间的控件 -->
  <EditText android:id="@+id/show"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:editable="false"
    android:cursorVisible="false"/>
</LinearLayout>

Activity代码:

public class MainActivity extends Activity
{
  // 定义5个记录当前时间的变量
  private int year;
  private int month;
  private int day;
  private int hour;
  private int minute;
  @Override
  public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    DatePicker datePicker = (DatePicker)
        findViewById(R.id.datePicker);
    TimePicker timePicker = (TimePicker)
        findViewById(R.id.timePicker);
    // 获取当前的年、月、日、小时、分钟
    Calendar c = Calendar.getInstance();
    year = c.get(Calendar.YEAR);
    month = c.get(Calendar.MONTH);
    day = c.get(Calendar.DAY_OF_MONTH);
    hour = c.get(Calendar.HOUR);
    minute = c.get(Calendar.MINUTE);
    // 初始化DatePicker组件,初始化时指定监听器
    datePicker.init(year,month,day,new OnDateChangedListener()
    {
      @Override
      public void onDateChanged(DatePicker arg0,int day)
      {
        MainActivity.this.year = year;
        MainActivity.this.month = month;
        MainActivity.this.day = day;
        // 显示当前日期、时间
        showDate(year,hour,minute);
      }
    });
    timePicker.setEnabled(true);
    // 为TimePicker指定监听器
    timePicker.setonTimeChangedListener(new OnTimeChangedListener()
    {
      @Override
      public void onTimeChanged(TimePicker view,int hourOfDay,int minute)
      {
        MainActivity.this.hour = hourOfDay;
        MainActivity.this.minute = minute;
        // 显示当前日期、时间
        showDate(year,minute);
      }
    });
  }
  // 定义在EditText中显示当前日期、时间的方法
  private void showDate(int year,int day,int hour,int minute)
  {
    EditText show = (EditText) findViewById(R.id.show);
    show.setText("您的购买日期为:" + year + "年"
        + (month + 1) + "月" + day + "日 "
        + hour + "时" + minute + "分");
  }
}

NumberPicker主要使用在给用户提供数字选择时使用。

main.xml代码:

<TableLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="wrap_content">
  <TableRow
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <TextView
      android:text="选择低价:"
      android:layout_width="120dp"
      android:layout_height="wrap_content" />
    <NumberPicker
      android:id="@+id/np1"
      android:layout_width="match_parent"
      android:layout_height="80dp"
      android:focusable="true"
      android:focusableInTouchMode="true" />
  </TableRow>
  <TableRow
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <TextView
      android:text="选择高价:"
      android:layout_width="120dp"
      android:layout_height="wrap_content" />
    <NumberPicker
      android:id="@+id/np2"
      android:layout_width="match_parent"
      android:layout_height="80dp"
      android:focusable="true"
      android:focusableInTouchMode="true" />
  </TableRow>
</TableLayout>

Activity代码:

public class MainActivity extends Activity
{
  NumberPicker np1,np2;
  // 定义最低价格、最高价格的初始值
  int minPrice = 25,maxPrice = 75;
  @Override
  protected void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    np1 = (NumberPicker) findViewById(R.id.np1);
    // 设置np1的最小值和最大值
    np1.setMinValue(10);
    np1.setMaxValue(50);
    // 设置np1的当前值
    np1.setValue(minPrice);
    np1.setonValueChangedListener(new OnValuechangelistener()
    {
      // 当NumberPicker的值发生改变时,将会激发该方法
      @Override
      public void onValueChange(NumberPicker picker,int oldVal,int newVal)
      {
        minPrice = newVal;
        showSelectedPrice();
      }
    });
    np2 = (NumberPicker) findViewById(R.id.np2);
    // 设置np2的最小值和最大值
    np2.setMinValue(60);
    np2.setMaxValue(100);
    // 设置np2的当前值
    np2.setValue(maxPrice);
    np2.setonValueChangedListener(new OnValuechangelistener()
    {
      // 当NumberPicker的值发生改变时,将会激发该方法
      @Override
      public void onValueChange(NumberPicker picker,int newVal)
      {
        maxPrice = newVal;
        showSelectedPrice();
      }
    });
  }
  private void showSelectedPrice()
  {
    Toast.makeText(this,"您选择最低价格为:" + minPrice
        + ",最高价格为:" + maxPrice,Toast.LENGTH_SHORT)
        .show();
  }
}

 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Android DatePickerDialog和TimePickerDialog显示样式

Android DatePickerDialog和TimePickerDialog显示样式

可以用DatePickerDialog显示选取日期的对话框。可以设置显示的样式

 

1、通过构造方法设置显示样式。

  可以通过DatePickerDialog(Context context, int theme, DatePickerDialog.OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth)这个构造方法的第二个参数来设置显示样式。

  这个theme参数对应的值,可以使用AlertDialog中的theme值。

  AlertDialog.THEME_TradITIONAL

    

  AlertDialog.THEME_HOLO_DARK

    

  AlertDialog.THEME_HOLO_LIGHT

    

  AlertDialog.THEME_DEVICE_DEFAULT_DARK

    

  AlertDialog.THEME_DEVICE_DEFAULT_LIGHT

    

 

2、通过DatePicker设置显示样式

  首先获取DatePicker,然后使用DatePicker.setCalendarViewShow(boolean)和DatePicker.setSpinneRSShow(boolean)来设置。

  CalendarView和Spinners的值分别为true和false

    

  CalendarView和Spinners的值分别为false和true

    

  CalendarView和Spinners的值都是false

    

  CalendarView和Spinners的值都是true

    

 

 

对于TimePickerDialog而言,它的样式设置,只有构造函数一种方式,对应的theme参数和DatePickerDialog相同。它内部定义了一个TimePicker,但是没有提供获取的方式。

 

在构造TimePickerDialog和DatePickerDialog的时候最好使用DialogFragment来进行构造。

帮助文档中例子:

复制代码

public static class TimePickerFragment extends DialogFragment
                            implements TimePickerDialog.OnTimeSetListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current time as the default values for the picker
        final Calendar c = Calendar.getInstance();
        int hour = c.get(Calendar.HOUR_OF_DAY);
        int minute = c.get(Calendar.MINUTE);

        // Create a new instance of TimePickerDialog and return it
        return new TimePickerDialog(getActivity(), this, hour, minute,
                DateFormat.is24HourFormat(getActivity()));
    }

    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        // Do something with the time chosen by the user
    }
}

复制代码

public void showTimePickerDialog(View v) {
    DialogFragment newFragment = new TimePickerFragment();
    newFragment.show(getSupportFragmentManager(), "timePicker");
}

 

对于DialogFragment可以参考文档: Android 官方推荐 : DialogFragment 创建对话框

Android DatePicker和DatePickerDialog基本用法示例

Android DatePicker和DatePickerDialog基本用法示例

本文实例讲述了Android DatePicker和DatePickerDialog基本用法。分享给大家供大家参考,具体如下:

DatePicker用来设置手机的时间和闹钟

1、添加一个按钮控件在配置文件中,然后给该按钮添加事件,使其能够打开DatePicker

//下面采用匿名内部类的方式
btn.setonClickListener(new Button.OnClickListener(){
  @Override
  public void onClick(View v) {  //通过下面的方法可以调用回调函数onCreateDialog()方法,其中参数传递给onCreateDialog()方法
    //一定要用onCreateDialog()方法,因为它的返回值为Dialog对象
    showDialog(DATE_DIALOG_ID);
  }
});

2、使用了showDialog方法之后就会调用回调函数onCreateDialog()方法,通过该方法打开以对话框形式弹出的时间设置器

@Override
protected Dialog onCreateDialog(int id) {
  switch (id) {
  case DATE_DIALOG_ID:
    //mDateSetListener这个参数是用来告诉Android设置完时间之后点击set回调函数用的方法
    return new DatePickerDialog(this,mDateSetListener,2011,10,25);
  case TIME_DIALOG_ID:
    return new TimePickerDialog(this,mTimeSetListener,14,12,true);
  }
  return null;
}

3、根据DatePickerDialog这个构造方法需要添加一个“监听器”,即用户点击SET按钮之后会处理的方法

//DatePickerDialog设置完之后有的回调函数
public DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {
  //下面的参数是用户设置完之后的时间
  @Override
  public void onDateSet(DatePicker view,int year,int monthOfYear,int dayOfMonth) {
    System.out.println("DatePickerDialog.OnDateSetListener");
    dateShowView.setText(new StringBuffer().append(year).append("-").append(monthOfYear).append("-").append(dayOfMonth));
  }
};

拓展:同样,对时间的设置也类似于这个过程

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android文件操作技巧汇总》、《Android编程开发之SD卡操作方法汇总》、《Android开发入门与进阶教程》、《Android资源操作技巧汇总》、《Android视图View技巧总结》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。

关于AppCompatSpinner的条目在第二次选择时未打开TimePickerDialog。请查看详细信息的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Android API 21 – 以编程方式隐藏TimePickerDialog中的模拟时钟、Android CalendarView,DatePicker,TimePicker,以及NumberPicker的使用、Android DatePickerDialog和TimePickerDialog显示样式、Android DatePicker和DatePickerDialog基本用法示例的相关信息,请在本站寻找。

本文标签: