今天是我写的第一篇博客,对于Android学习了快半年了,对Android也有一些了解,于是今天就来分享一个自己对Android自定义对话框的学习心得。
- 对于Android自带的对话框,可以说极其丑陋。很多App中的对话框,都有不一样的风格。
- 自定义对话框其实就是重写系统自带的对话框。
- 在加上自己编写的Xml文件,这要,对话框和其他页面就没有太多的区别了。
进入主题:
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<Button
android:id="@+id/btn_confirm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="确定" />
</RelativeLayout>
dialog_confirm.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:layout_margin="20dp"
android:background="@drawable/shape_cornurs_retangle"
android:layout_gravity="center"
>
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:textColor="@color/dark_gray"
android:layout_marginBottom="16dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_weight="1"
android:layout_gravity="center"
android:textSize="17sp"
android:text="标题"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<TextView
android:id="@+id/tv_msg1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textColor="@color/dark_gray"
android:layout_weight="1"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:textSize="17sp"
android:text="内容文本"/>
<Spinner
android:id="@+id/spinner1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textColor="@color/dark_gray"
android:layout_gravity="center_horizontal"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:textSize="17sp"
android:layout_weight="1"
android:text="标题"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center"
>
<TextView
android:id="@+id/tv_msg2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textColor="@color/dark_gray"
android:layout_marginBottom="16dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_weight="1"
android:textSize="17sp"
android:text="内容文本"/>
<Spinner
android:id="@+id/spinner2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textColor="@color/dark_gray"
android:layout_gravity="center_horizontal"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:layout_weight="1"
android:textSize="17sp"
android:text="标题"/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/light_gray2"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="45dp"
android:orientation="horizontal">
<Button
android:id="@+id/btn_ok"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="确定"
android:textColor="@color/blue"
android:textSize="18sp"
android:background="@drawable/selector_dialog_left_btn"/>
</LinearLayout>
</LinearLayout>
MainActivity.java
import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn_confirm=(Button) findViewById(R.id.btn_confirm);
btn_confirm.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showDialog();
}
});
}
/**
* 显示一个对话框
*/
private void showDialog() {
// 使用自定义对话框,同时使用自定义监听接口
CofiDialog dialog = new CofiDialog(this, "选择",
new DiaglogListener() {
@Override
public void onClickOkDiaglog(Dialog dialog, View v) {
//要处理是的事物从这里开始写 这个方法是 确定按钮后执行的
dialog.cancel();// 清除确定的对话框
}
@Override
public void onClickCancerDiaglog(Dialog dialog, View v) {
dialog.cancel();// 取消对话框
}
});
dialog.show();
}
}
在这里我自定了连个接听方法接口
DiaglogListener.java
import android.app.Dialog;
import android.view.View;
public interface DiaglogListener {
/**确定监听*/
void onClickOkDiaglog(Dialog dialog,View v);
/**取消监听*/
void onClickCancerDiaglog(Dialog dialog,View v);
}
这个java类就是 自定义对话框 继承了AlertDialog 系统对话框
其他跟其他Activity一样
import java.util.ArrayList;
import java.util.List;
import android.app.AlertDialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
public class CofiDialog extends AlertDialog implements android.view.View.OnClickListener{
//确定
private Button btn_ok;
private TextView tv_title;
private TextView tv_msg2;
private TextView tv_msg1;
private String msg;
private String title;
//自定义监听接口
private DiaglogListener listener;
private Spinner spinner1;
private Spinner spinner2;
private List<String> data_list;
private ArrayAdapter<String> arr_adapter;
public CofiDialog(Context context,String title,DiaglogListener listener) {
super(context);
this.title=title;
this.listener = listener;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_confirm);
btn_ok=(Button) findViewById(R.id.btn_ok);
tv_msg1=(TextView) findViewById(R.id.tv_msg1);
tv_msg2=(TextView) findViewById(R.id.tv_msg2);
spinner1=(Spinner) findViewById(R.id.spinner1);
spinner2=(Spinner) findViewById(R.id.spinner2);
tv_title=(TextView) findViewById(R.id.tv_title);
btn_ok.setOnClickListener(this);
tv_title.setText(title);
data_list = new ArrayList<String>();
data_list.add("北京");
data_list.add("上海");
data_list.add("广州");
data_list.add("深圳");
//适配器
arr_adapter= new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_item, data_list);
//设置样式
arr_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//加载适配器
spinner1.setAdapter(arr_adapter);
spinner1.setOnItemSelectedListener(new OnItemSelectedListenerImplSpinner1());
//适配器
arr_adapter= new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_item, data_list);
//设置样式
arr_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//加载适配器
spinner2.setAdapter(arr_adapter);
spinner2.setOnItemSelectedListener(new OnItemSelectedListenerImplSpinner2());
}
//自定监听
private class OnItemSelectedListenerImplSpinner1 implements OnItemSelectedListener {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view,
int position, long id) { // 选项选中时触发
Toast.makeText(getContext(), data_list.get(position), Toast.LENGTH_LONG).show();
tv_msg1.setText(data_list.get(position).toString());
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) { // 没有选项时触发
}
}
//自定监听
private class OnItemSelectedListenerImplSpinner2 implements OnItemSelectedListener {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view,
int position, long id) { // 选项选中时触发
Toast.makeText(getContext(), data_list.get(position), Toast.LENGTH_LONG).show();
tv_msg2.setText(data_list.get(position).toString());
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) { // 没有选项时触发
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_ok: //确定
listener.onClickOkDiaglog(this, v);
break;
default:
break;
}
}
}
Android对话框 到此结束,希望对大家有帮助