弹出框android_android 弹出弹框edittext 获取焦点弹出键盘 - CSDN
  • Android常见的三种弹框

    2019-08-14 14:42:03
    Android在开发中经常会遇到有弹框的需求。经常使用的有Dialog 弹框,Window弹框,Activity伪弹框这三种。 感谢http://sigechuizi.cn/article/107 今天主要是讲解Dialog的使用: Dialog继承Object,异步调用,不会...

    Android在开发中经常会遇到有弹框的需求。经常使用的有Dialog 弹框,Window弹框,Activity伪弹框这三种。

    感谢http://sigechuizi.cn/article/107

    今天主要是讲解Dialog的使用:

    Dialog继承Object,异步调用,不会阻塞UI线程。以下是对他的整体框架:

    最常用的还是AlertDialog.今天主要是讲他的用法。AlertDialog的用法也很简单

     

     setTitle :为对话框设置标题
     setIcon :为对话框设置图标
     setMessage:为对话框设置内容
     setView : 给对话框设置自定义样式
     setItems :设置对话框要显示的一个list,一般用于显示几个命令时
     setMultiChoiceItems :用来设置对话框显示一系列的复选框
     setSingleChoiceItems :用来设置对话框显示一系列的单选框
     setNeutralButton    :普通按钮
     setPositiveButton   :给对话框添加"Yes"按钮
     setNegativeButton :对话框添加"No"按钮
     create : 创建对话框
     show :显示对话框

    1.只显示标题和内容

    AlertDialog alertDialog1 = new AlertDialog.Builder(this)
            .setTitle("这是标题")//标题
            .setMessage("这是内容")//内容
            .setIcon(R.mipmap.ic_launcher)//图标
            .create();
    alertDialog1.show();

     

    2.有多个按钮

     

    setPositiveButton  设置一个确定按钮
    setNegativeButton  设置一个取消按钮
    setNeutralButton   设置一个普通按钮
    这三个按钮可以随意组合使用不冲突。
    AlertDialog alertDialog2 = new AlertDialog.Builder(this)
            .setTitle("这是标题")
            .setMessage("有多个按钮")
            .setIcon(R.mipmap.ic_launcher)
            .setPositiveButton("确定", new DialogInterface.OnClickListener() {//添加"Yes"按钮
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    Toast.makeText(AlertDialogActivity.this, "这是确定按钮", Toast.LENGTH_SHORT).show();
                }
            })
    
            .setNegativeButton("取消", new DialogInterface.OnClickListener() {//添加取消
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    Toast.makeText(AlertDialogActivity.this, "这是取消按钮", Toast.LENGTH_SHORT).show();
                }
            })
            .setNeutralButton("普通按钮", new DialogInterface.OnClickListener() {//添加普通按钮
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    Toast.makeText(AlertDialogActivity.this, "这是普通按钮按钮", Toast.LENGTH_SHORT).show();
                }
            })
            .create();
    alertDialog2.show();

     

    3.一个列表

     

    setItems  里面写列表数据
    final String[] items3 = new String[]{"苍老湿", "小泽老湿", "波多野结衣老湿", "吉泽明步老湿"};//创建item
    AlertDialog alertDialog3 = new AlertDialog.Builder(this)
            .setTitle("选择您喜欢的老湿")
            .setIcon(R.mipmap.ic_launcher)
            .setItems(items3, new DialogInterface.OnClickListener() {//添加列表
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    Toast.makeText(AlertDialogActivity.this, "点的是:" + items3[i], Toast.LENGTH_SHORT).show();
                }
            })
            .create();
    alertDialog3.show();

    4.单选列表

    setSingleChoiceItems  单选框列表
    final String[] items4 = new String[]{"苍老湿", "小泽老湿", "波多野结衣老湿", "吉泽明步老湿"};//创建item
    AlertDialog alertDialog4 = new AlertDialog.Builder(this)
            .setTitle("选择您喜欢的老湿")
            .setIcon(R.mipmap.ic_launcher)
            .setSingleChoiceItems(items4, 0, new DialogInterface.OnClickListener() {//添加单选框
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    index = i;
                }
            })
            .setPositiveButton("确定", new DialogInterface.OnClickListener() {//添加"Yes"按钮
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    Toast.makeText(AlertDialogActivity.this, "这是确定按钮" + "点的是:" + items4[index], Toast.LENGTH_SHORT).show();
                }
            })
    
            .setNegativeButton("取消", new DialogInterface.OnClickListener() {//添加取消
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    Toast.makeText(AlertDialogActivity.this, "这是取消按钮", Toast.LENGTH_SHORT).show();
                }
            })
            .create();
    alertDialog4.show();
    
     
    5.多选列表
    setMultiChoiceItems 多选框
    final String[] items5 = new String[]{"苍老湿", "小泽老湿", "波多野结衣老湿", "吉泽明步老湿"};//创建item
    final boolean[] booleans = {true, true, false, false};
    AlertDialog alertDialog5 = new AlertDialog.Builder(this)
            .setTitle("选择您喜欢的老湿")
            .setIcon(R.mipmap.ic_launcher)
            .setMultiChoiceItems(items5, booleans, new DialogInterface.OnMultiChoiceClickListener() {//创建多选框
                @Override
                public void onClick(DialogInterface dialogInterface, int i, boolean b) {
                    booleans[i] = b;
                }
            })
            .setPositiveButton("确定", new DialogInterface.OnClickListener() {//添加"Yes"按钮
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    StringBuilder stringBuilder = new StringBuilder();
                    for (int a = 0; a < booleans.length; a++) {
                        if (booleans[a]) {
                            stringBuilder.append(items5[a] + " ");
                        }
                    }
                    Toast.makeText(AlertDialogActivity.this, "这是确定按钮" + "点的是:" + stringBuilder.toString(), Toast.LENGTH_SHORT).show();
                }
            })
    
            .setNegativeButton("取消", new DialogInterface.OnClickListener() {//添加取消
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    Toast.makeText(AlertDialogActivity.this, "这是取消按钮", Toast.LENGTH_SHORT).show();
                }
            })
            .create();
    alertDialog5.show();

     

    6.setAdapter的用法

     

    final String[] items6 = new String[]{"苍老湿", "小泽老湿", "波多野结衣老湿", "吉泽明步老湿"};//创建item
    AlertDialog alertDialog6 = new AlertDialog.Builder(this)
            .setTitle("选择您喜欢的老湿")
            .setIcon(R.mipmap.ic_launcher)
            .setAdapter(new ArrayAdapter<String>(AlertDialogActivity.this, R.layout.item, R.id.tv, items6), new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    Toast.makeText(AlertDialogActivity.this, "点的是:" + items6[i], Toast.LENGTH_SHORT).show();
                }
            })
            .create();
    alertDialog6.show();

     

    7.自定义view的用法

     

    final AlertDialog.Builder alertDialog7 = new AlertDialog.Builder(this);
    View view1 = View.inflate(this, R.layout.activity_alter_dialog_setview, null);
    final EditText et = view1.findViewById(R.id.et);
    Button bu = view1.findViewById(R.id.button);
    alertDialog7
            .setTitle("Login")
            .setIcon(R.mipmap.ic_launcher)
            .setView(view1)
            .create();
    final AlertDialog show = alertDialog7.show();
    bu.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(AlertDialogActivity.this, "电话" + et.getText().toString(), Toast.LENGTH_SHORT).show();
            show.dismiss();
        }
    });
    
     

    Window弹框和activity弹框将在另外的文章中说明。

    转发表明出处

    Android互助群:

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • android自定义弹出框的实现。 平时做项目时,感觉android自带的弹出框样式比较丑,很多应用都是自己做的弹出框,这里也试着自己做了一个。
  • 这里介绍三种弹出框android的弹出框AlertDialog,时间弹出框DatePickerDialog 和进度条弹出框showProgressDialog--我将在下一篇介绍自定义弹出框 这里我们我们同一个layout.xml来写按钮事,app中肯定是少不了与...

    这里介绍三种弹出框android的弹出框AlertDialog,时间弹出框DatePickerDialog 和进度条弹出框showProgressDialog--我将在下一篇介绍自定义弹出框


    这里我们我们同一个layout.xml来写按钮事,app中肯定是少不了与用户交互的各种dialog,所以我们可以用谷歌的工程师包装好的方法来做这个弹出框 android:onClick="(自定义的方法名)Gress"这个我们只需要在MainActivity。java中实现这个方法就行。例如
    public class MainActivity extends Activity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    }
    public void Gress view) {
    实现方法的代码
    }
    }

    <LinearLayout 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:orientation="vertical"
        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="com.example.m_6dialog.MainActivity" >
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="Bt1"
            android:text="普通弹出框" />
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="Bt2"
            android:text="时间弹出框" />
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="Bt3"
            android:text="进度条弹出框" />
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="Bt4"
            android:text="自定义弹出框" />
    
    </LinearLayout>



    第一个,普通弹出框AlertDialog

    这里我三个按钮两个写了退出程序。

    这里是实现代码

    一般创建一个对话框需要经过以下几步:

      1、创建AlertDialog.Builder对象。

      2、调用AlertDialog.Builder的setTitle()或者setCustomTitle()方法设置标题。

      3、调用AlertDialog.Builder的setIcon()方法设置标题logo。

      4、调用AlertDialog.Builder的相关方法设置对话框内容。

      5、调用AlertDialog.Builder的setPositiveButton()、setNegativeButton()或setNeutralButton()方法添加多个按钮。

      6、调用AlertDialog.Builder的create()方法创建AlertDialog对象,再调用AlertDialog对象的show()方法将该对话框显示出来。

    其中,第4步设置对话框的内容,这里有6种方法来指定:

      ·setMessage():设置对话框内容为简单文本内容。

      ·setItems():设置对话框内容为简单列表项。

      ·setSingleChoiceItems():设置对话框内容为单选列表项。

      ·setMultiChoiceItems():设置对话框内容为多选列表项。

      ·setAdapter():设置对话框内容为自定义列表项。

      ·setView():设置对话框内容为自定义View。

    下面通过几个实例来介绍一下AlertDialog的用法。



    package com.example.m_6dialong;
    
    import java.util.Date;
    import java.util.zip.Inflater;
    
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.app.ProgressDialog;
    import android.app.AlertDialog.Builder;
    import android.app.DatePickerDialog;
    import android.app.DatePickerDialog.OnDateSetListener;
    import android.app.Dialog;
    import android.content.DialogInterface;
    import android.content.DialogInterface.OnClickListener;
    import android.os.Bundle;
    import android.support.v4.widget.SlidingPaneLayout.PanelSlideListener;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.Button;
    import android.widget.DatePicker;
    import android.widget.EditText;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    	}
    
    	/*
    	 * 
    	 * AlertDialog基本弹出框选择确定和取消
    	 */
    	public void Bt1(View view) {
    		showAler();
    	}
    
    	void showAler() {
    		AlertDialog.Builder builder = new AlertDialog.Builder(this);
    		builder.setTitle("title");
    		builder.setMessage("message");
    		builder.setIcon(R.drawable.ic_launcher);
    		// 1确定按钮排在第三个
    		builder.setPositiveButton("text", new OnClickListener() {
    
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				// TODO Auto-generated method stub
    				finish();
    			}
    		});
    
    		// 2否定按钮,排在第一个
    		builder.setNegativeButton("text2", new OnClickListener() {
    
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				// TODO Auto-generated method stub
    				finish();
    
    			}
    		});
    
    		// 3. 中立按钮排在第二个
    		builder.setNeutralButton("zhong", new OnClickListener() {
    
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				// TODO Auto-generated method stub
    
    			}
    		});
    		builder.create().show();
    	}
    }


    第二个  显示时间的弹出框DatePickerDialog,TimePickerDialog


    ——DatePickerDialog,TimePickerDialog

    这两个对话框功能简单,用法也很简单。只需要两步就可以了:

    1)通过new关键字创建实例,调用show()将对话框显示出来

    2)绑定监听器,从而通过监听器获取用户设置的事件

    这里只有把上面的Bt1方法换掉就可以


    public void Bt2(View view) {
    		date();
    	}
    
    	private void date() {
    
    		/* DatePickerDialog datePickerDialog1= new DatePickerDialog(context,
    		 callBack, year, monthOfYear, dayOfMonth)
    		 callBack 是使用了匿名内部类*/
    
    		DatePickerDialog datePickerDialog = new DatePickerDialog(this,
    				new OnDateSetListener() {
    
    					@Override
    					public void onDateSet(DatePicker view, int year,
    							int monthOfYear, int dayOfMonth) {
    						// TODO Auto-generated method stub
    
    					}
    				}, new Date().getDate(), new Date().getMonth() + 1,
    				new Date().getDay());
    		datePickerDialog.show();
    		System.out.println(new Date().getDate() + "getDate");
    		System.out.println(new Date().getMonth() + "getMonth");
    		System.out.println(new Date().getDay() + "getDay");
    		System.out.println(new Date().getTime() + "getTime");
    		System.out.println(new Date().getYear() + "year");
    
    	}


    第三个。进度条弹出框


    ——ProgressDialog

    使用ProgressDialog进度条对话框有两种方式:

    1)如果只是创建一个简单的进度对话框,

    调用ProgressDialog提供的静态show()方法显示对话框即可

    这里的参数boolean indeterminate设置是否是不明确的状态。

    2)创建ProgressDialog,然后调用方法对对话框中的进度条进行设置,

    设置完成后将对话框显示出来即可。

    ProgressDialog包含如下的方法:

     

     a)setTitle("提示信息");

     b)setMessage(charSequence)设置对话框里显示的消息

     c)setMax(int)设置对话框中进度条的最大值

     d)setProgressStyle(ProgressDialog.STYLE_HORIZONTAL)设置对话框里进度条的风格

     e)setIndeterminate(boolean)设置进度条是否显示不明确值,不明确就是滚动条的当前值自动在最小到最大值之间来回移动,形成这样一个动画效果,这个只是告诉别人“我正在工作”,但不能提示工作进度到哪个阶段。主要是在进行一些无法确定操作时间的任务时作为提示。而“明确”就是根据你的进度可以设置现在的进度值

     f)p.dismiss()关闭对话框

     

    ——补充

    补充:还有其他的方式也可以完成对话框

    1)在需要设置成对话框的Activity在AndroidManifest.xml中配置

    android:theme="@android:style/Theme.Dialog"

    2)PopWindow也可以做类似对话框风格的窗口

    只需要两步就可以完成:

     a)创建PopWindow对象,为其设置布局内容与宽度、高度

     b)调用pop.showAsDropDown(View)将PopupWindow作为View组件以下拉组件显示出来,

     或者调用showAtLocation()方法将PopupWindow在指定位置显示出来

    第一个参数指定PopupWindow的锚点view,即依附在哪个view上。

    第二个参数指定起始点

    第三,四个参数设置以起始点的右下角为原点,向向右、下各偏移量。
    /*
    	 * 
    	 * 
    	 * ProgressDialog 进度条弹窗 必须定义public的方法Button的onClick方法
    	 */
    	public void Bt3(View view) {
    		// TODO Auto-generated method stub
    		showProgressDialog();
    
    	}
    
    	private void showProgressDialog() {
    		// TODO Auto-generated method stub
    
    		ProgressDialog progressDialog = new ProgressDialog(this);
    		progressDialog.setMessage("下载");
    
    		progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    
    		progressDialog.show();
    	}

    总结:  三个的实现方法都很简单,现在来看全部代码,我将在下一篇重点介绍自定义弹出框和事件逻辑

    package com.example.m_6dialong;
    
    import java.util.Date;
    import java.util.zip.Inflater;
    
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.app.ProgressDialog;
    import android.app.AlertDialog.Builder;
    import android.app.DatePickerDialog;
    import android.app.DatePickerDialog.OnDateSetListener;
    import android.app.Dialog;
    import android.content.DialogInterface;
    import android.content.DialogInterface.OnClickListener;
    import android.os.Bundle;
    import android.support.v4.widget.SlidingPaneLayout.PanelSlideListener;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.Button;
    import android.widget.DatePicker;
    import android.widget.EditText;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    	}
    
    	/*
    	 * 
    	 * AlertDialog基本弹出框选择确定和取消
    	 */
    	public void Bt1(View view) {
    		showAler();
    	}
    
    	void showAler() {
    		AlertDialog.Builder builder = new AlertDialog.Builder(this);
    		builder.setTitle("title");
    		builder.setMessage("message");
    		builder.setIcon(R.drawable.ic_launcher);
    		// 1确定按钮排在第三个
    		builder.setPositiveButton("text", new OnClickListener() {
    
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				// TODO Auto-generated method stub
    				finish();
    			}
    		});
    
    		// 2否定按钮,排在第一个
    		builder.setNegativeButton("text2", new OnClickListener() {
    
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				// TODO Auto-generated method stub
    				finish();
    
    			}
    		});
    
    		// 3. 中立按钮排在第二个
    		builder.setNeutralButton("zhong", new OnClickListener() {
    
    			@Override
    			public void onClick(DialogInterface dialog, int which) {
    				// TODO Auto-generated method stub
    
    			}
    		});
    		builder.create().show();
    	}
    
    	/*
    	 * 
    	 * DatePickerDialog 时间基本弹出框
    	 */
    	public void Bt2(View view) {
    		date();
    	}
    
    	private void date() {
    
    		/* DatePickerDialog datePickerDialog1= new DatePickerDialog(context,
    		 callBack, year, monthOfYear, dayOfMonth)
    		 callBack 是使用了匿名内部类*/
    
    		DatePickerDialog datePickerDialog = new DatePickerDialog(this,
    				new OnDateSetListener() {
    
    					@Override
    					public void onDateSet(DatePicker view, int year,
    							int monthOfYear, int dayOfMonth) {
    						// TODO Auto-generated method stub
    
    					}
    				}, new Date().getDate(), new Date().getMonth() + 1,
    				new Date().getDay());
    		datePickerDialog.show();
    		System.out.println(new Date().getDate() + "getDate");
    		System.out.println(new Date().getMonth() + "getMonth");
    		System.out.println(new Date().getDay() + "getDay");
    		System.out.println(new Date().getTime() + "getTime");
    		System.out.println(new Date().getYear() + "year");
    
    	}
    
    	/*
    	 * 
    	 * 
    	 * ProgressDialog 进度条弹窗 必须定义public的方法Button的onClick方法
    	 */
    	public void Bt3(View view) {
    		// TODO Auto-generated method stub
    		showProgressDialog();
    
    	}
    
    	private void showProgressDialog() {
    		// TODO Auto-generated method stub
    
    		ProgressDialog progressDialog = new ProgressDialog(this);
    		progressDialog.setMessage("下载");
    
    		progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    
    		progressDialog.show();
    	}


    <LinearLayout 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:orientation="vertical"
        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="com.example.m_6dialog.MainActivity" >
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="Bt1"
            android:text="普通弹出框" />
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="Bt2"
            android:text="时间弹出框" />
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="Bt3"
            android:text="进度条弹出框" />
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="Bt4"
            android:text="自定义弹出框" />
    
    </LinearLayout>



    展开全文
  • 做项目时,感觉android自带的弹出框样式比较丑,很多应用都是自己做的弹出框,这里也试着自己做了一个。 废话不说先上图片: 实现机制 1.先自定义一个弹出框的样式 2.自己实现CustomDialog类,继承自Dialog,...

    前言:

    做项目时,感觉android自带的弹出框样式比较丑,很多应用都是自己做的弹出框,这里也试着自己做了一个。

    废话不说先上图片:



    实现机制

    1.先自定义一个弹出框的样式

    2.自己实现CustomDialog类,继承自Dialog,实现里面方法,在里面加载自定义样式的弹出框;

    3.使用时,与使用Dialog一样

    具体代码

    dialog_normal_layout.xml样式文件

    <?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="@drawable/bg_bombbox"
            android:orientation="vertical" >
    
            <TextView
                android:id="@+id/title"
                style="@style/text_18_ffffff"
                android:layout_width="fill_parent"
                android:layout_height="40.0dip"
                android:gravity="center"
                android:text="@string/title_alert"
                android:visibility="visible" />
    
            <LinearLayout
                android:id="@+id/content"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center" >
    
    
                <TextView
                    android:id="@+id/message"
                    style="@style/text_16_666666"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:gravity="left|center"
                    android:lineSpacingMultiplier="1.5"
                    android:minHeight="120.0dip"
                    android:paddingBottom="15.0dip"
                    android:paddingLeft="20.0dip"
                    android:paddingRight="20.0dip"
                    android:paddingTop="15.0dip" />
            </LinearLayout>
    
            <View
                android:layout_width="fill_parent"
                android:layout_height="1.0px"
                android:background="#ffd0d0d0" />
    
            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="60.0dip"
                android:layout_gravity="bottom"
                android:background="@drawable/dialog_bottom_bg"
                android:gravity="center"
                android:orientation="horizontal" >
    
                <Button
                    android:id="@+id/positiveButton"
                    style="@style/text_15_ffffff_sdw"
                    android:layout_width="114.0dip"
                    android:layout_height="40.0dip"
                    android:background="@drawable/btn_ok_selector"
                    android:gravity="center"
                    android:text="@string/ok" />
    
                <Button
                    android:id="@+id/negativeButton"
                    style="@style/text_15_666666_sdw"
                    android:layout_width="114.0dip"
                    android:layout_height="40.0dip"
                    android:layout_marginLeft="20.0dip"
                    android:background="@drawable/btn_cancel_selector"
                    android:gravity="center"
                    android:text="@string/cancel" />
            </LinearLayout>
        </LinearLayout>
    
    </FrameLayout>

    其中引用的样式文件styles.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources xmlns:android="http://schemas.android.com/apk/res/android">
    
        <style name="AppBaseTheme" parent="android:Theme.Light"></style>
    
        <style name="AppTheme" parent="AppBaseTheme"></style>
    
        <style name="text_18_ffffff">
            <item name="android:textSize">18.0dip</item>
            <item name="android:textColor">#ffffffff</item>
        </style>
    
        <style name="text_16_666666">
            <item name="android:textSize">16.0dip</item>
            <item name="android:textColor">#ff666666</item>
        </style>
    
        <style name="sdw_white">
            <item name="android:shadowColor">#7fffffff</item>
            <item name="android:shadowDx">0.0</item>
            <item name="android:shadowDy">0.65</item>
            <item name="android:shadowRadius">1.0</item>
        </style>
    
        <style name="sdw_79351b">
            <item name="android:shadowColor">#ff79351b</item>
            <item name="android:shadowDx">0.0</item>
            <item name="android:shadowDy">1.0</item>
            <item name="android:shadowRadius">1.0</item>
        </style>
    
        <style name="text_15_ffffff_sdw" parent="@style/sdw_79351b">
            <item name="android:textSize">15.0dip</item>
            <item name="android:textColor">#ffffffff</item>
        </style>
    
        <style name="text_15_666666_sdw" parent="@style/sdw_white">
            <item name="android:textSize">15.0dip</item>
            <item name="android:textColor">#ff666666</item>
        </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>
    
    </resources>

    自定义Dialog的实现类CustomDialog

    package com.dyr.custom;
    
    import android.app.Dialog;
    import android.content.Context;
    import android.content.DialogInterface;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup.LayoutParams;
    import android.widget.Button;
    import android.widget.LinearLayout;
    import android.widget.TextView;
    
    import com.dyr.view.R;
    
    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 title
    		 * @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 LayoutParams(
    					LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
    			// set the dialog title
    			((TextView) layout.findViewById(R.id.title)).setText(title);
    			// set the confirm button
    			if (positiveButtonText != null) {
    				((Button) layout.findViewById(R.id.positiveButton))
    						.setText(positiveButtonText);
    				if (positiveButtonClickListener != null) {
    					((Button) layout.findViewById(R.id.positiveButton))
    							.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.positiveButton).setVisibility(
    						View.GONE);
    			}
    			// set the cancel button
    			if (negativeButtonText != null) {
    				((Button) layout.findViewById(R.id.negativeButton))
    						.setText(negativeButtonText);
    				if (negativeButtonClickListener != null) {
    					((Button) layout.findViewById(R.id.negativeButton))
    							.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.negativeButton).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 LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
    			}
    			dialog.setContentView(layout);
    			return dialog;
    		}
    	}
    }
    

    使用代码

    CustomDialog.Builder builder = new CustomDialog.Builder(this);
    		builder.setMessage("这个就是自定义的提示框");
    		builder.setTitle("提示");
    		builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
    			public void onClick(DialogInterface dialog, int which) {
    				dialog.dismiss();
    				//设置你的操作事项
    			}
    		});
    
    		builder.setNegativeButton("取消",
    				new android.content.DialogInterface.OnClickListener() {
    					public void onClick(DialogInterface dialog, int which) {
    						dialog.dismiss();
    					}
    				});
    
    		builder.create().show();

    至此,自定义弹出框已经完成,是不是感觉很简单呢。

    这里附上一个自定义弹出框的小项目代码下载地址:点击打开链接


    注:转载请注明出处 http://blog.csdn.net/duanyanrui/article/details/8494767


    展开全文
  • android自定义弹出框的实现。 平时做项目时,感觉android自带的弹出框样式比较丑,很多应用都是自己做的弹出框,这里也试着自己做了一个。
  • Android实现微信弹出框效果 1.选上图     2. 是用pupwindow实现,由于是在RecyclerView 中显示的,需要测量当前imageButton所在位置 具体实现代码:  在代码中调用 ibComment.setOnClickListener(new View....

    Android实现微信弹出框效果

    1.选上图

     

     

    2. 是用pupwindow实现,由于是在RecyclerView中显示的,需要测量当前imageButton所在位置 具体实现代码:

      在代码中调用

      ibComment.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            showMore(ibComment);
        }
    });


    pupwindow 实现类

    private void showMore(View BtnView) {
        if (mMorePopupWindow == null) {
            LayoutInflater li = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View content = li.inflate(R.layout.comment_layout, null, false);
            mMorePopupWindow = new PopupWindow(content, ViewGroup.LayoutParams.WRAP_CONTENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT);
            mMorePopupWindow.setBackgroundDrawable(new BitmapDrawable());
            mMorePopupWindow.setOutsideTouchable(true);
            mMorePopupWindow.setTouchable(true);
            content.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
            mShowMorePopupWindowWidth = content.getMeasuredWidth();
            mShowMorePopupWindowHeight = content.getMeasuredHeight();
    
            Log.i(TAG, "showMore: " + mShowMorePopupWindowHeight);
            Log.i(TAG, "showMore: " + mShowMorePopupWindowWidth);
            View parent = mMorePopupWindow.getContentView();
            TextView like = (TextView) parent.findViewById(R.id.tv1);
            TextView comment = (TextView) parent.findViewById(R.id.tv2);
    
        }
        if (mMorePopupWindow.isShowing()) {
            mMorePopupWindow.dismiss();
        } else {
            int heightMoreBtnView = BtnView.getHeight();
            mMorePopupWindow.showAsDropDown(BtnView, -mShowMorePopupWindowWidth,
                    -(mShowMorePopupWindowHeight + heightMoreBtnView) / 2);
        }
    }






    展开全文
  • 昨天写了一篇博客,关于普通的弹出框的,本来想把自定义的弹出框也一起发出来的,但想想时间不早了,岛主还是去看球吧啊哈哈。。 是不是觉得很神奇,这里我们将自定义的弹出框设置了逻辑来判断两次...
  • 说明: 弹出框个人以为: 1. 很复杂的界面使用Activity; 2. 比较复杂的弹出框使用PopupWindow; 3. 比较简单的弹出框使用Dialog
  • 从本节将开始阐述一个完整系统Demo,从登陆--主页--查询展示具体详情...这节是一个自定义登陆弹出框,接着上一节的logo全屏页面之后将出现一个全屏的ImagView,点击弹...   提交等待框: ... import android.app.A
  • 本文简单模仿微信朋友圈的点赞和评论弹出框,布局等细节请忽略,着重实现弹出框、发评论,及弹出位置的控制。
  • 简介这是一个基于AlertDialog和Dialog这两个类封装的多种弹出框样式,其中提供各种简单样式的弹出框使用说明。同时也可自定义弹出框。项目地址:https://github.com/Liumce/jjdxm_dialogui特性1.使用链式开发代码...
  • android 分享弹出框

    2016-03-22 17:45:46
    今天在想分享弹出框 代码简单,以后轻松入学,哈哈 package com.example.picpopupwindow; import android.app.Activity; import android.content.Context; import android.graphics.drawable.ColorDrawable; ...
  • 弹出款效果如下:(箭头的样式是图片做背景的) 需要的朋友可以继续向下看代码: 下面是其Activity代码 public class DRMPTestActivity extends Activity implements OnLongClickListener,OnClickListener{ ...
  • Android 单击listview弹出popupwindow弹出框,里面还附带listview右滑删除按钮。博客网址:http://blog.csdn.net/qq_16064871
  • ActionSheet,Android仿ios底部弹出框效果
  • 鉴于Android提供的默认弹出框很一般,IOS的弹出框样式还不错,同时使用弹出框dialog的需求还是蛮高的,于是就想仿照ios弹出框封装一个通用的dialog,解决操作询问,提示信息,列表选择等需求; 同时在搜索数据的...
  • 一款Android弹出框、对话框、Dialog、popuwindow Example (转) 仿QQ底部弹出GIF.gif 仿QQ底部弹出.png 仿微信中间弹出框.png Material Design风格对话框.png Material Design风格对话框.png 使用...
  • Android 单击listview弹出popupwindow弹出框,里面还附带listview右滑删除按钮。有时候需要listview的每一项都可以弹出popupwindow弹出框,QQ上也有类似的效果。 附上与本文相关部分内容,因为我是在此基础上写的...
1 2 3 4 5 ... 20
收藏数 67,987
精华内容 27,194
关键字:

弹出框android