冠亚体育手机网站Android学习笔记,Android自定义dialog可选择展示年月日时间选择栏

自定义dialog

1.对话框的利用

package com.poptest; 
import android.app.DatePickerDialog; 
import android.content.Context; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.DatePicker; 
//dialog类  
public class YearPickerDialog extends DatePickerDialog { 
  public YearPickerDialog(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth) { 
    super(context, callBack, year, monthOfYear, dayOfMonth);  
    this.setTitle(year + "年" + (monthOfYear + 1) + "月"); 
    //getChildAt(2)隐藏日的显示可以改变隐藏的对象 
   ((ViewGroup) ((ViewGroup) this.getDatePicker().getChildAt(0)).getChildAt(0)).getChildAt(2).setVisibility(View.GONE); 
   ((ViewGroup) ((ViewGroup) this.getDatePicker().getChildAt(0)).getChildAt(0)).getChildAt(2).setVisibility(View.GONE); 
  }  
  public YearPickerDialog(Context context, int theme, OnDateSetListener listener, int year, int monthOfYear, int dayOfMonth) { 
    super(context, theme, listener, year, monthOfYear, dayOfMonth); 

   this.setTitle(year + "年" + (monthOfYear + 1) + "月"); 
    ((ViewGroup) ((ViewGroup) this.getDatePicker().getChildAt(0)).getChildAt(0)).getChildAt(2).setVisibility(View.GONE); 
    ((ViewGroup) ((ViewGroup) this.getDatePicker().getChildAt(0)).getChildAt(0)).getChildAt(2).setVisibility(View.GONE); 
  }  
  @Override 
 public void onDateChanged(DatePicker view, int year, int month, int day) { 
    super.onDateChanged(view, year, month, day); 
    this.setTitle(year + "年" + (month + 1) + "月"); 
  } 
} 

1.1AlertDialog的显示

时间拍卖类

回顾对话框以致监听的安装:重点驾驭四个开关(也便是三上单词):

//时间处理类 
package com.poptest;  
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Calendar; 
import java.util.Date;  
public class DateUtil { 
  public static Date strToDate(String style, String date) { 
    SimpleDateFormat formatter = new SimpleDateFormat(style); 
    try { 
      return formatter.parse(date); 
    } catch (ParseException e) { 
      e.printStackTrace(); 
      return new Date(); 
    } 
  }  
  public static String dateToStr(String style, Date date) { 
   SimpleDateFormat formatter = new SimpleDateFormat(style); 
    return formatter.format(date); 
  }  
  public static String clanderTodatetime(Calendar calendar, String style) { 
    SimpleDateFormat formatter = new SimpleDateFormat(style); 
    return formatter.format(calendar.getTime()); 
 }  
  public static String DateTotime(long date, String style) { 
    SimpleDateFormat formatter = new SimpleDateFormat(style); 
    return formatter.format(date); 
  } 
}<pre name="code" class="java">//调用方式 
        final Calendar calendar = Calendar.getInstance(); </pre><pre name="code" class="java">   //没有AlertDialog.THEME_HOLO_LIGHT这个Theme出来的dialog非常丑 
    new YearPickerDialog(this, AlertDialog.THEME_HOLO_LIGHT, new DatePickerDialog.OnDateSetListener() { 
       @Override 
       public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 

        calendar.set(Calendar.YEAR, year); 
         calendar.set(Calendar.MONTH, monthOfYear); 
        Log.d("###",DateUtil.clanderTodatetime(calendar, "yyyy-MM")); 

       } 
    }, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DATE)).show(); 
</pre><br> 
<pre></pre> 
<h3><a name="t2"></a><em>解决7.0系统使用该方式调用崩溃的情况(只遇到在小米7.0系统崩溃,华为等7.0不会崩溃)</em></h3> 


package com.dmos;  
import android.app.DatePickerDialog; 
import android.content.Context;  
import android.os.Bundle; 
import android.widget.DatePicker; 
import android.widget.LinearLayout; 
import android.widget.NumberPicker;  
public class MyDatePickerDialog extends DatePickerDialog{  
 public MyDatePickerDialog(Context context, int theme, 
     OnDateSetListener callBack, int year, int monthOfYear, 
     int dayOfMonth) { 
   super(context, theme, callBack, year, monthOfYear, dayOfMonth); 
 } 
 @Override 
 protected void onCreate(Bundle savedInstanceState) {  
  super.onCreate(savedInstanceState);  
  LinearLayout mSpinners = (LinearLayout) findViewById(getContext().getResources().getIdentifier("android:id/pickers", null, null));  
   if (mSpinners != null) {  
     NumberPicker mYearSpinner = (NumberPicker) findViewById(getContext().getResources().getIdentifier("android:id/year", null, null));  
    NumberPicker mMonthSpinner = (NumberPicker) findViewById(getContext().getResources().getIdentifier("android:id/month", null, null));  
    NumberPicker mDaySpinner = (NumberPicker) findViewById(getContext().getResources().getIdentifier("android:id/day", null, null));  
     mSpinners.removeAllViews();  
     //如果要隐藏年,月,日中的某一项取消其addView就好了 
     if (mYearSpinner != null) {  
      mSpinners.addView(mYearSpinner);  
    }  
     if (mMonthSpinner!= null) {  
      mSpinners.addView(mMonthSpinner);   
    }  
    if (mDaySpinner != null) {  
       mSpinners.addView(mDaySpinner);    
    }  
   }  
 } 
 @Override  
 public void onDateChanged(DatePicker view, int year, int month, int day) {  
   super.onDateChanged(view, year, month, day);  
  setTitle(year+"年"+(month+1)+"月");  
 } 
}  

PositiveButton(确认按键);NeutralButton(忽视开关)

上述所述是笔者给大家介绍的Android自定义dialog可筛选显示年月日时刻选用栏,希望对大家享有援助,若是我们有此外疑问请给本人留言,小编会及时过来大家的。在那也非常感激大家对剧本之家网址的支撑!

AlertDialog.Builder bud1=new Builder(mContext);

bud1.setTitle("提示信息");

bud1.setMessage("您的信息已提交完成!");

bud1.setPositiveButton("确认", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

dialog.dismiss(); //对话框消失

}

});

bud1.setPositiveButton(" 取消", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

dialog.cancel();//取消对话框 Toast.makeText(mContext, "你已取消会话!", Toast.LENGTH_LONG).show();

}

});

bud1.setNeutralButton("忽略", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

Toast.makeText(Code06_03.this, "你已忽略。。。", Toast.LENGTH_LONG).show();

}

});

//单选按钮,选取其中一个

//1.设置数据源

final String[] items = {"android", "ipone", "Symbian"}; 

//2.数据适配

bud1.setItems(items, new DialogInterface.OnClickListener() { 

        public void onClick(DialogInterface dialog, int which) { 

         Toast.makeText(mContext,items[which],Toast.LENGTH_SHORT).show(); 

        } 

    });

 

 

//自定义对话框

  ImageView img = new ImageView(this);

     img.setImageResource(R.drawable.icon);

     Bud1

     .setView(img)

 

bud1.create().show();//显示对话框

 

 

你大概感兴趣的小说:

  • Android
    自定义AlertDialog对话框样式
  • Android中ProgressDialog的dismiss()与cancel()方法的分别
  • Android仿IOS自定义AlertDialog提示框
  • Android仿支付宝Wechat支付密码分界面弹窗封装dialog
  • Android实现尾部对话框BottomDialog弹出实例代码
  • Android达成自定义圆角对话框Dialog的言传身教代码
  • Android
    Dialog中国Computer软件与本事服务总集团键盘的显得与潜伏的亲自过问
  • Android 常用log 关键字

 

1.2.ProgressDialog的显示

入眼为何在子线程中调用UI操作未报错难点,经过解析,

ProgressDialg内部已经达成了Hanlder,由此未报错。而runOnUiThread的应用也显的多余了。

 

protected void dialog9() {

new Thread(new Runnable() {

@Override

public void run() {

try {

Thread.sleep(5 * 1000);

// progressDialog.dismiss();

runOnUiThread(finishDialog);

} catch (InterruptedException e) {

}

}

}).start();

progressDialog = ProgressDialog.show(Code06_07.this, "请稍等",

"数据正在加载中…", true);

}

 

private Runnable finishDialog = new Runnable() {

@Override

public void run() {

progressDialog.dismiss();

}

};

 

 

 

m_pDialog = new ProgressDialog(Code06_09.this);

// 设置进度条风格,风格为长形

m_pDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

// 设置ProgressDialog 标题

m_pDialog.setTitle("提示");

// 设置ProgressDialog 提示信息

m_pDialog.setMessage("这是一个长形对话框进度条");

// 设置ProgressDialog 标题图标

m_pDialog.setIcon(R.drawable.icon);

 

// 设置ProgressDialog 进度条进度

m_pDialog.setProgress(100);

 

// 设置ProgressDialog 的进度条是否不明确

m_pDialog.setIndeterminate(false);

 

// 设置ProgressDialog 是否可以按退回按键取消

m_pDialog.setCancelable(true);

 

// 让ProgressDialog显示

m_pDialog.show();

 

new Thread() {

public void run() {

try {

while (m_count <= 100) {

// 由线程来控制进度。

m_pDialog.setProgress(m_count++);

Thread.sleep(1000);

}

m_pDialog.cancel();

} catch (InterruptedException e) {

m_pDialog.cancel();

}

}

}.start();

 

}

 

自身在测验代码时,蒙受三个过时的方法,有叁个新的API以供役使

 

 

/***
 * 第二个参数是用来鲜明哪些按键绑定监听
 *  @param whichButton Which button to set the listener on, can be one of
 *  有以下常量来提供选用
 *  BUTTON_POSITIVE
 *  {@link DialogInterface#BUTTON_POSITIVE}
 *  {@link DialogInterface#BUTTON_NEGATIVE}
 *  {@link DialogInterface#BUTTON_NEUTRAL
 **/
progress.setButton(AlertDialog.BUTTON_POSITIVE, “确定”, new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int i) {
        // 点击“分明按键”废除对话框
        dialog.cancel();
    }
});

经上述分析,与代码的编写,能够总括出:ProgressDialog的延时,使用了Handler机制,能够放心的在Thread中延时,在Thread中的操作有 setProgress,dismiss等措施。

1.3 自定义对话框-

LayoutInflater inflater=mContext.getLayoutInflater();

mView=inflater.inflate(奔驰G级.layout.dialog,// 自定义对话框视图

null);

 

AlertDialog.Builder(mContext).setView(mView);

 

飞哥后天讲的知识点,就是有关多个类的使用。ProgressDialog,AlertDialog那五个类,主要教学了怎么采用它们的章程,以至ProgressDialog在特点,在Thread中利用。

 

1.4AlertDialog解析

AlertDialog extens Dialog implents DialogInterface

四个子类:DataPicker,ProgressDialog,TimePickerDialog

接下去,看看APIGuida有怎样欣喜呢?

AlertDialog

A dialog that can show a title, up to three buttons, a list of selectable items, or a custom layout.

通过那句话,小编晓得了飞哥的没有错,把AlertDialog的成效全用了叁次,the,I  Knowed  it,and did it 

DatePickerDialog or TimePickerDialog

A dialog with a pre-defined UI that allows the user to select a date or time.

二个提前定义好的对话框,允许顾客筛选时间或日期

 

 you should use a DialogFragment as a container for your dialog. The DialogFragment class provides all the controls you need to create your dialog and manage its appearance, instead of calling methods on the Dialog object

见状那句话,不知道你有什么感想-认为前边的代码没用了有木有,大Boss是这么些DialogFragment呀!不要急,请看前面。

大约的说:1.准确的拍卖Dialog的生命周期

  2.对话框的简洁明了利用,就好像Fragment相仿,当成一个零部件

          3.支撑API等第泛围广Android1.6以上均接济,当然须求帮助库

此地Google给出三个演示,封装AlertDialog,以复用

public class FireMissilesDialogFragment extends DialogFragment {
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the Builder class for convenient dialog construction
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setMessage(R.string.dialog_fire_missiles)
               .setPositiveButton(R.string.fire, new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                       // FIRE ZE MISSILES!
                   }
               })
               .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                       // User cancelled the dialog
                   }
               });
        // Create the AlertDialog object and return it
        return builder.create();
    }
}

当你拿到实例后,便得以show了

 

参考:

FragmentDialog:详解:传送门

Andorid SDK Dialog

扩大阅读:

Full Screen DialogFragment (over ActionBar) in Android:传送门

Post Author: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注