安卓自定义Dialog的实现
来源:互联网 发布:根据域名查询ip地址 编辑:程序博客网 时间:2024/05/18 03:19
一、Dialog布局文件
<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" android:orientation="vertical" android:padding="20.0dip" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:background="#ff7200" android:orientation="vertical" > <TextView android:id="@+id/title" android:textColor="#ffffff" android:textSize="20sp" android:layout_width="fill_parent" android:layout_height="50dp" android:gravity="center" android:text="自定义弹窗" android:visibility="visible" /> <LinearLayout android:id="@+id/content" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" > <TextView android:background="#ffffff" android:id="@+id/message" android:textColor="#b8b8b8" android:textSize="16sp" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="left|center" android:lineSpacingMultiplier="1.5" android:paddingBottom="15.0dip" android:paddingLeft="20.0dip" android:paddingRight="20.0dip" android:paddingTop="15.0dip" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="50dp" android:layout_gravity="bottom" android:background="#ffffff" android:gravity="center" android:orientation="horizontal" > <TextView android:layout_weight="1" android:id="@+id/positiveTextView" android:textColor="#b8b8b8" android:textSize="16sp" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="ok" android:clickable="true"/> <TextView android:layout_weight="1" android:id="@+id/negativeTextView" android:textColor="#ff9138" android:textSize="16sp" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="cancel" android:clickable="true"/> </LinearLayout> </LinearLayout></FrameLayout>
二、Style
<style name="Dialog" parent="android:style/Theme.Dialog"> <item name="android:background">#00000000</item> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowNoTitle">true</item> <item name="android:windowIsFloating">true</item> </style>
三、MainActivity代码
CustomDialog.Builder builder = new CustomDialog.Builder(MainActivity.this); builder.setMessage("这个就是自定义的提示框"); builder.setTitle("提示"); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); //设置你的操作事项 Toast.makeText(MainActivity.this,"queding",Toast.LENGTH_SHORT).show(); } }); builder.setNegativeButton("取消", new android.content.DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this,"queding",Toast.LENGTH_SHORT).show(); dialog.dismiss(); } }); builder.create().show();
四、自定义DialogClass
package com.cavytech.widget;import android.app.Dialog;import android.content.Context;import android.content.DialogInterface;import android.view.LayoutInflater;import android.view.View;import android.widget.LinearLayout;import android.widget.TextView;import com.cavytech.wear2.R;/** * Created by LiBin on 2016/6/16. */public class CustomDialog extends Dialog { public CustomDialog(Context context) { super(context); } public CustomDialog(Context context, int theme) { super(context, theme); } public static class Builder { private Context context; private String title; private String message; private String positiveButtonText; private String negativeButtonText; private View contentView; private DialogInterface.OnClickListener positiveButtonClickListener; private DialogInterface.OnClickListener negativeButtonClickListener; public Builder(Context context) { this.context = context; } public Builder setMessage(String message) { this.message = message; return this; } /** * Set the Dialog message from resource * * @param * @return */ public Builder setMessage(int message) { this.message = (String) context.getText(message); return this; } /** * Set the Dialog title from resource * * @param title * @return */ public Builder setTitle(int title) { this.title = (String) context.getText(title); return this; } /** * Set the Dialog title from String * * @param title * @return */ public Builder setTitle(String title) { this.title = title; return this; } public Builder setContentView(View v) { this.contentView = v; return this; } /** * Set the positive button resource and it's listener * * @param positiveButtonText * @return */ public Builder setPositiveButton(int positiveButtonText, DialogInterface.OnClickListener listener) { this.positiveButtonText = (String) context .getText(positiveButtonText); this.positiveButtonClickListener = listener; return this; } public Builder setPositiveButton(String positiveButtonText, DialogInterface.OnClickListener listener) { this.positiveButtonText = positiveButtonText; this.positiveButtonClickListener = listener; return this; } public Builder setNegativeButton(int negativeButtonText, DialogInterface.OnClickListener listener) { this.negativeButtonText = (String) context .getText(negativeButtonText); this.negativeButtonClickListener = listener; return this; } public Builder setNegativeButton(String negativeButtonText, DialogInterface.OnClickListener listener) { this.negativeButtonText = negativeButtonText; this.negativeButtonClickListener = listener; return this; } public CustomDialog create() { LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); // instantiate the dialog with the custom Theme final CustomDialog dialog = new CustomDialog(context, R.style.Dialog); View layout = inflater.inflate(R.layout.dialog_normal_layout, null); dialog.addContentView(layout, new LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); // set the dialog title ((TextView) layout.findViewById(R.id.title)).setText(title); // set the confirm button if (positiveButtonText != null) { ((TextView) layout.findViewById(R.id.positiveTextView)) .setText(positiveButtonText); if (positiveButtonClickListener != null) { ((TextView) layout.findViewById(R.id.positiveTextView)) .setOnClickListener(new View.OnClickListener() { public void onClick(View v) { positiveButtonClickListener.onClick(dialog, DialogInterface.BUTTON_POSITIVE); } }); } } else { // if no confirm button just set the visibility to GONE layout.findViewById(R.id.positiveTextView).setVisibility( View.GONE); } // set the cancel button if (negativeButtonText != null) { ((TextView) layout.findViewById(R.id.negativeTextView)) .setText(negativeButtonText); if (negativeButtonClickListener != null) { ((TextView) layout.findViewById(R.id.negativeTextView)) .setOnClickListener(new View.OnClickListener() { public void onClick(View v) { negativeButtonClickListener.onClick(dialog, DialogInterface.BUTTON_NEGATIVE); } }); } } else { // if no confirm button just set the visibility to GONE layout.findViewById(R.id.negativeTextView).setVisibility( View.GONE); } // set the content message if (message != null) { ((TextView) layout.findViewById(R.id.message)).setText(message); } else if (contentView != null) { // if no message set // add the contentView to the dialog body ((LinearLayout) layout.findViewById(R.id.content)) .removeAllViews(); ((LinearLayout) layout.findViewById(R.id.content)) .addView(contentView, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT)); } dialog.setContentView(layout); return dialog; } }}
9 0
- 安卓自定义Dialog的实现
- 安卓dialog的实现
- 安卓自定义Dialog
- 安卓自定义dialog,改变其在主页面的位置和实现dialog上的按钮点击事件
- 安卓自定义dialog文章
- 安卓开发自定义dialog
- 安卓自定义透明Dialog
- 自定义dialog的实现
- 安卓开发之自定义Dialog
- 安卓自定义超级提示框Dialog
- 安卓Dialog自定义大小及居中
- 安卓学习之—自定义Dialog
- 安卓自定义Dialog之BaseDialog
- 安卓自定义Dialog(一)
- 安卓自定义Dialog(二)
- 安卓自定义Dialog(三)
- 安卓自定义Dialog(四)
- Fragment实现的自定义Dialog
- 基于树莓派的Spark集群搭建
- Java工程师成神之路~
- 【ROS Gazebo专题】三、Gazebo的使用下
- Android Studio下使用NDK
- SSM(spring+mybatis+springmvc)整合 配置文件
- 安卓自定义Dialog的实现
- 1115. Counting Nodes in a BST (30)
- 跨平台开发之React Native初体验
- Android http get请求里中文是乱码的解决(其中一种情况)
- Cocos2d-x 3.0 编译出错 解决 error: expected '' at end of member declaration
- Hibernate的ResultTransformer使用
- iOS清除缓存,实时显示缓存大小
- 在http请求中,get不都是从服务器上down数据下来吗?
- JAVA学习笔记(三)-并发编程 Callable Future CompleableFuture