Dialog(對話框)

本篇介紹Dialog,從基礎的AlertDialog到Time(Date)PickerDialog以及自定義

AlertDialog是最基本的Dialog,創建一個Builder,初始化3個button然後create就行了,監聽事件跟View的不一樣是

DialogInterface.Oncliklistener(View.Oncliklistener),dialog依賴的是activity(Toast是app)

@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.button_dialog:
AlertDialog.Builder builder=new AlertDialog.Builder(HellowordActivity.this);
builder
.setIcon(R.mipmap.ic_launcher).setTitle("我是標題").setMessage("我是內容").setNegativeButton("NegativeButton", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(),"點擊的是NegativeButton",Toast.LENGTH_SHORT).show();
}
}).setNeutralButton("NeutralButton", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(),"點擊的是NeutralButton",Toast.LENGTH_SHORT).show();
}
}).setPositiveButton("Positive", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(),"點擊的是PositiveButton",Toast.LENGTH_SHORT).show();
}
});
AlertDialog dialog=builder.create();
dialog.show();
}
點擊第二個按鈕,用於選擇的對話框
case R.id.button_dialog1:
AlertDialog.Builder builder1=new AlertDialog.Builder(HellowordActivity.this);
builder1.setTitle("標題");
builder1.setItems(mData, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(),"點擊的第"+which+"",Toast.LENGTH_SHORT).show();
}
});

AlertDialog dialog1=builder1.create();
dialog1.show();

break;

第三個是單選對話框setSingleChoiceItems
case R.id.button_dialog2:
AlertDialog.Builder builder2=new AlertDialog.Builder(HellowordActivity.this);
builder2.setSingleChoiceItems(mSex, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//用Toast顯示所選的性別
Toast.makeText(getApplicationContext(), "您的性別是" + which, Toast.LENGTH_SHORT).show();
}
});
builder2.setNegativeButton("確定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {

}
});
builder2.setNeutralButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {

}
});
AlertDialog dialog3=builder2.create();
dialog3.show();
break;

第四個是多選對話框
case R.id.button_dialog3:
AlertDialog.Builder builderCheck = new AlertDialog.Builder(HellowordActivity.this);
builderCheck.setMultiChoiceItems(mHobby,mIsCheckedHobby, new DialogInterface.OnMultiChoiceClickListener() {

@Override
public void onClick(DialogInterface arg0, int which, boolean isChecked) {
mIsCheckedHobby[which]=isChecked;
Log.d("message", ""+which+"個是"+isChecked);

}
});
builderCheck.setPositiveButton("確定", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface arg0, int arg1) {//確定時,將所有選中的選項添加到一個buffer
hobby = new StringBuffer();//每點擊時建立新對象
for(int i=0;i<mIsCheckedHobby.length;i++){//循環數據判斷,當爲true即選中時,將數據加到buffer
if(mIsCheckedHobby[i]){
hobby.append(mHobby[i]);
}

}
//buffer中所有的數據顯示到按鈕上
button3.setText(hobby);

}
}).setNegativeButton("取消", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface arg0, int arg1) {

}
});
builderCheck.show();
break;
default:
break;

自定義Dialog自己寫一個界面引入,調用的是dialog.setContentView(dialogview)這個方法,
在界面中設置button的屬性:新建drawable文件,左邊按鈕新建3個分別是正常和按壓,然後寫一個帶倆item的drawable綜合調用文件,右邊按鈕同樣是3個
外邊框需要修改value下邊的style文件添加了一個style,可以去掉本身帶的title
左邊正常(按壓就改了下顏色)
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:bottomLeftRadius="5dp"></corners>//
左邊圓角(右邊是Right)
<solid android:color="#79DFF6"></solid>
<stroke android:width="1dp"
android:color="#ffffff"></stroke>
</shape>
綜合的
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/btn_nomal_left" android:state_pressed="true"></item>
<item android:drawable="@drawable/btn_pressed_left"></item>
</selector>
添加的style
<style parent="@android:Theme.Dialog" name="NoDialogTitle">

<item name="android:windowFrame">@null</item>

<item name="android:windowNoTitle">true</item>

<item name="android:windowBackground">@android:color/transparent</item>

<item name="android:windowIsFloating">true</item>

<item name="android:windowContentOverlay">@null</item>

</style>


case R.id.button_dialog_diy:
dialog=new Dialog(HellowordActivity.this,R.style.NoDialogTitle);//
這個R是修改邊框的style
LayoutInflater inflater=getLayoutInflater();//引入寫的界面
View dialogview=inflater.inflate(R.layout.item_dialog, null);
TextView textView_title= (TextView) dialogview.findViewById(R.id.textview_dialog_title);
TextView textView_src= (TextView) dialogview.findViewById(R.id.textview_dialog_src);
Button button_cancel= (Button) dialogview.findViewById(R.id.button_cancel);
Button button_ok= (Button) dialogview.findViewById(R.id.button_ok);
textView_title.setText("這是新的title");
textView_src.setText("這是新的內容");
button_cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
button_ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(),"點了確定",Toast.LENGTH_SHORT).show();

dialog.dismiss();
}
});
dialog.setContentView(dialogview);
dialog.show();
break;
DatePickerDialog和TimePickerDialog用於獲取時間,用的Calendar類得到時間,更改時間後的點擊事件中也是用的Calendar類設置時間,用SimpledateFormate格式化時間後用Toast輸出
case R.id.button_picker_time:
mClendar=Calendar.getInstance();
TimePickerDialog timePickerDialog=new TimePickerDialog(HellowordActivity.this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
mClendar.set(Calendar.HOUR,hourOfDay);
mClendar.set(Calendar.MINUTE,minute);
SimpleDateFormat format=new SimpleDateFormat("yyyyMMddHH:mm");
Toast.makeText(getApplicationContext(),"時間是"+format.format(mClendar.getTime()),Toast.LENGTH_SHORT).show();
}
},mClendar.get(Calendar.HOUR),mClendar.get(Calendar.MINUTE),true);//api
timePickerDialog.show();
break;

case R.id.button_picker:
mClendar=Calendar.getInstance();
DatePickerDialog pickerdialog=new DatePickerDialog(HellowordActivity.this, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
mClendar.set(year,monthOfYear,dayOfMonth);
SimpleDateFormat format=
new SimpleDateFormat("yyyyMMdd");
Toast.
makeText(getApplicationContext(),"時間是"+format.format(mClendar.getTime()),Toast.LENGTH_SHORT).show();
}
},
mClendar.get(Calendar.YEAR),mClendar.get(Calendar.MONTH),mClendar.get(Calendar.DAY_OF_MONTH));
pickerdialog.show();
break;


發佈了54 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章