對話框經常以小窗口的形式展現
常用的對話框有六種
對話框 |
---|
普通對話框 |
單選對話框 |
多選對話框 |
進度條對話框 |
消息對話框 |
自定義對話框 |
1.普通對話框
通常有“確定”和”取消“按鈕。
方法名 | 功能 |
---|---|
setTitle() | 設置對話框標題 |
setIcon() | 設置對話框圖標 |
setPositiveButton() | 設置對話框添加 按鈕 |
setMessage() | 設置對話框提示信息 |
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new AlertDialog.Builder(this)//綁定當前窗口
.setTitle("Dialog對話框")//設置標題
.setIcon(R.mipmap.ic_launcher)//設置圖標
.setPositiveButton("確定",null)//添加確定按鈕
.setNegativeButton("取消",null)//添加取消按鈕
.setMessage("確定退出嗎")//設置提示細信息
.create()//創建對話框
.show();//顯示對話框
}
}
效果圖
2.單選對話框
單選對話框和RadioButton作用類似,只能選擇一個選項,單選對話框通過AlertDialog對象調用setSingleChoiceItems()方法創建的。setSingleChoiceItems方法有三個參數,第一個參數建立數組,用於顯示選項內容,第二個參數設置是否默認選中,“0”表示默認選中第一個選項,如果默認未選中,參數則寫“-1”,第三個參數是設立監聽。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new AlertDialog.Builder(this)//綁定當前窗口
.setTitle("圖通對話框")//設置標題
.setIcon(R.mipmap.ic_launcher)//設置圖標
.setPositiveButton("確定",null)//添加確定按鈕
.setSingleChoiceItems(new String[]{"男","女"},0,null)//第二個參數代表默認選中哪一個,如果都不選中設置-1
.create()//創建對話框
.show();//顯示對話框
}
}
效果圖
3.多選對話框
多選對話框通過調用AlertDialog的setMultiChoiceItems()方法創建。該方法有三個參數,第一個參數建立數組,用於顯示選項內容,第二個參數是boolean數組,用來判斷哪個選項需要勾選,如果沒有選項選中則用“null”,如果有默認選中則該數組定義的長度要對應第1個參數設置的選項個數,第三個參數設置監聽
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new AlertDialog.Builder(this)//綁定當前窗口
.setTitle("圖通對話框")//設置標題
.setIcon(R.mipmap.ic_launcher)//設置圖標
.setPositiveButton("確定",null)//添加確定按鈕
//第一個參數顯示內容,第二個參數代表哪個選項需要默認被勾選,如果沒有則爲null
//第三個參數:爲每一個多選項綁定一個監聽器
.setMultiChoiceItems(new String[]{"大學生","教師","政府官員"},null,null)
.create()//創建對話框
.show();//顯示對話框
}
}
效果
4.進度條對話框
在Android中提供了圓形進度條和水平進度條兩種樣式,通過setProgressStyle()方法設置進度條樣式。常量ProgressDialog.STYLE_HORIZONTAL代表水平進度條,ProgressDialog.STYLE_SPINNER代表圓形進度條。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ProgressDialog prodialog;
prodialog = new ProgressDialog(this);
prodialog.setTitle("進度條對話框");
prodialog.setIcon(R.mipmap.ic_launcher);
prodialog.setMessage("正在下載。。。");
prodialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);//ProgressDialog.STYLE_HORIZONTAL代表水平滾動條
//ProgressDialog.STYLE_SPINNER代表圓形進度條
prodialog.show();
}
}
效果
5.消息對話框
顯示時間的長短是通過常量Toast.LENGTH_SHORT和Toast.LENGTH_LONG控制的
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//當前對話框、顯示內容、顯示時長Toast.LENGTH_LONG長時間顯示
//Toast.LENGTH_SHORT 短時間顯示
Toast.makeText(this,"你好",Toast.LENGTH_LONG).show();
}
}
效果
6.自定義對話框
要注意的是Java的文件要在一個裏面新建,然後選Android app
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="標題"
android:textSize="20sp"
android:gravity="center"
android:background="#cf8be1" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:id="@+id/message"
android:background="#dac7e7"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="確定"
android:textSize="20sp"
android:id="@+id/btn_ok"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="取消"
android:textSize="20sp"
android:id="@+id/btn_cancel"/>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
package com.example.hp.myapplication;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.TextView;
/**
* Created MyDialogby hp on 2020/4/11.
*/
public class MyDialog extends Dialog {
private String message;
public MyDialog(Context context,String message){
super(context);
this.message=message;
}
public void onCreate(Bundle savedInstancState) {
super.onCreate(savedInstancState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.mydialog);
TextView tv = findViewById(R.id.message);
tv.setText(message);
Button btnOk = findViewById(R.id.btn_ok);
btnOk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.i("MyDialog", "確定按鈕被點擊");
dismiss();//關閉對話按鈕
}
});
Button btnCancel=findViewById(R.id.btn_cancel);
btnCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.i("MyDialog","取消按鈕被點擊");
dismiss();//關閉對話按鈕
}
});
}
}
package com.example.hp.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import static android.os.Build.VERSION_CODES.M;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyDialog myDialog=new MyDialog(this,"自定義對話框");
myDialog.show();
}
}
效果
爲按鈕添加了監聽事件,所以點擊的時候會顯示