2016-06-27
原CSDN博客已弃用,文章会逐渐迁移过来。
一、自定义对话框
实现步骤:
1.自定义一个类,继承于Dialog类,在构造方法中调用setContentView(R.layout.xx)来设定对话框的布局
2.设定自定义对话框的风格(不显示标题栏,不显示背景),由于继承了Dialog,默认添加了Dialog标题的一栏
3.找到res–>values–>styles.xml设置风格
4.调用含设定对话框风格参数的构造
5.对自定义对话框中的某些控件添加事件
6.实例化自定义的对话框,显示
一、新建对话框的布局文件(即弹出的对话框的样子)
layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_horizontal"
android:background="#FFFF00"
android:padding="10dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="提示"
android:textSize="34sp"
android:textStyle="bold"
android:layout_marginTop="30dp"/>
<View
android:layout_width="match_parent"
android:layout_height="2dp"
android:background="#ffffff"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="您确定要退出当前程序么"
android:layout_marginTop="10dp"
android:textSize="20dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_horizontal">
<Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="否"
android:onClick="onClick"
/>
<Button
android:id="@+id/btn2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="是"
android:onClick="onClick"
/>
</LinearLayout>
</LinearLayout>
二、设置弹出对话框的点击按钮
activity.xml
<?xml version=”1.0” encoding=”utf-8”?>
<Button
android:id="@+id/btn1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="自定义对话框"
android:onClick="onClick"
/>
</LinearLayout>
三、设置对话框的风格样式
在style.xml中添加如下代码
因为自定义的MyDialog是继承于Dialog,所以会默认添加了Dialog的标题这一栏非常不美观,因此使用重新自定义对话框的风格样式。name=”android:windowNoTitle”设置为true代表无窗口标题,android:windowBackground表示对话框背景,@android:color/transparent为使用透明色。
完整的style文件在app–>res–>values–>styles.xml,完整代码如下:
styles.xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="mydialog" parent="android:style/Theme.Dialog">
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
</style>
</resources>
四、建立MyDialog类继承Dialog类实现对话框管理
MyDialog.java
package com.administrator.dialogtest;
import android.app.Dialog;
import android.content.Context;
import android.support.annotation.NonNull;
import android.view.View;
import android.widget.Button;
/**
* Created by Administrator on 2018/5/7.
*/
public class MyDialog extends Dialog {
public MyDialog(@NonNull Context context) {
// super(context);//父类的满足子参数形式的构造方法
super(context,R.style.mydialog);//调用父类的含参构造方法,从而将风格设置到mydialog的样式上面
setContentView(R.layout.layout);//设置对话框的
//对自定义Dialog中的按钮添加点击事件
Button yesButton = (Button)findViewById(R.id.btn2);
Button noButton = (Button)findViewById(R.id.btn1);
noButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();//控制对话框消失
}
});
yesButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
System.exit(0);
}
});
}
// //也可以直接重写含两个参数的构造方法,外部传入样式
// public MyDialog(@NonNull Context context, int themeResId) {
// super(context, themeResId);
// setContentView(R.layout.layout);
// }
//外部调用时,MyDialog dialog = new MyDialog(this,R.style.mydialog);
//dialog.show();
}
五、在MainActivity中调用
MainActivity.java
package com.administrator.dialogtest;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private Button btn1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn = findViewById(R.id.btn1);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn1:
//1.自定义一个类,继承于Dialog类,在构造方法中调用setContentView(R.layout.xx)来设定对话框的布局
//2.设定自定义对话框的风格(不显示标题栏,不显示背景),由于继承了Dialog,默认添加了Dialog标题的一栏
//3.找到res-->values-->styles.xml设置风格
//4.调用含设定对话框风格参数的构造
//5.对自定义对话框中的某些控件添加事件
//6.实例化自定义的对话框,显示
MyDialog dialog = new MyDialog(this);
dialog.show();
break;
}
}
}
二、添加适配器案例
新建一个布局array_item_layout.xml作为适配器所引用的资源数据源
array_item_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="10dp"
android:gravity="center_vertical">
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@mipmap/ic_launcher"/>
<TextView
android:id="@+id/item_txt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="测试"
android:layout_marginLeft="15dp"/>
</LinearLayout>`
在activity_main.xml中添加触发对话框的点击按钮布局
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_horizontal"
android:padding="10dp">
<Button
android:id="@+id/btn2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="适配器案例"
android:onClick="onClick"
/>
</LinearLayout>
Java文件中创建适配器并调用
MainActivity.java
package com.administrator.dialogtest;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private Button btn2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn2 = findViewById(R.id.btn1);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn2:
showArrayDialog();
break;
}
}
private void showArrayDialog() {
final String[] items = {"Java","Mysql","Android","Html","C","JavaScript"};
//数组适配器
//参数1:环境
//参数2:布局资源索引,指的是每一项数据所呈现的样式android.R.layout.xxx
//参数3:数据源
// ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_dropdown_item_1line,items);
//参数4:数据源
//参数3:int textViewId 指定文本数据源需要放在布局中对应id文本控制的位置
//参数2:布局资源索引
//参数1:环境
ArrayAdapter adapter = new ArrayAdapter(this,R.layout.array_item_layout,R.id.item_txt,items);
AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setTitle("请选择:")
//参数1:适配器对象(对数据显示样式的规则制定器)
//参数2:监听器
.setAdapter(adapter, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this,items[which],Toast.LENGTH_SHORT).show();
dialog.dismiss();//点击后,让对话框消失
}
});
builder.show();
}
}