博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android自定义控件(五)自定义Dialog QuickOptionDialog
阅读量:4552 次
发布时间:2019-06-08

本文共 6316 字,大约阅读时间需要 21 分钟。

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

现在很多App的提示对话框都非常有个性,然而你还用系统的对话框样式,是不是觉得很落后呢,今天我就给大家讲讲怎样自定义自己的Dialog,学会了之后,你就会根据自家app的主题,设计出相应的Dialog的风格。Android系统提供了Dialog类,以及Dialog的子类,常见如AlertDialog。原生Dialog有很多局限之处,其样式单一,风格与App本身风格可能不太协调,弹窗在布局和功能上有所限制。本文将通过自定义Dialog构建快速操作界面,样式时尚美观。先来看一下效果图,有木有很炫:

下面看一下这么炫的效果是怎么写出来的。

1.自定义QuickOptionDialog类

首先我们通过自定义Dialog的方式自定义这个Dialog,代码如下:

import android.annotation.SuppressLint;import android.app.Dialog;import android.content.Context;import android.os.Bundle;import android.view.Display;import android.view.Gravity;import android.view.MotionEvent;import android.view.View;import android.view.Window;import android.view.WindowManager;import android.view.animation.Animation;import android.view.animation.AnimationUtils;import android.view.animation.LinearInterpolator;import android.widget.ImageView;import android.widget.Toast;public class QuickOptionDialog extends Dialog implements        android.view.View.OnClickListener {    private ImageView mClose;    public interface OnQuickOptionformClick {        void onQuickOptionClick(int id);    }    private OnQuickOptionformClick mListener;    private QuickOptionDialog(Context context, boolean flag,            OnCancelListener listener) {        super(context, flag, listener);    }    @SuppressLint("InflateParams")    private QuickOptionDialog(Context context, int defStyle) {        super(context, defStyle);        View contentView = getLayoutInflater().inflate(                R.layout.dialog_quick_option, null);        contentView.findViewById(R.id.ly_quick_option_text).setOnClickListener(                this);        contentView.findViewById(R.id.ly_quick_option_album)                .setOnClickListener(this);        contentView.findViewById(R.id.ly_quick_option_photo)                .setOnClickListener(this);        mClose = (ImageView) contentView.findViewById(R.id.iv_close);        Animation operatingAnim = AnimationUtils.loadAnimation(getContext(),                R.anim.quick_option_close);        LinearInterpolator lin = new LinearInterpolator();        operatingAnim.setInterpolator(lin);        mClose.startAnimation(operatingAnim);        mClose.setOnClickListener(this);        requestWindowFeature(Window.FEATURE_NO_TITLE);        contentView.setOnTouchListener(new View.OnTouchListener() {            @Override            public boolean onTouch(View v, MotionEvent event) {                QuickOptionDialog.this.dismiss();                return true;            }        });        super.setContentView(contentView);    }    public QuickOptionDialog(Context context) {        this(context, R.style.quick_option_dialog);    }    @SuppressWarnings("deprecation")    @Override    protected void onCreate(Bundle bundle) {        super.onCreate(bundle);        getWindow().setGravity(Gravity.BOTTOM);        WindowManager m = getWindow().getWindowManager();        Display d = m.getDefaultDisplay();        WindowManager.LayoutParams p = getWindow().getAttributes();        p.width = d.getWidth();        getWindow().setAttributes(p);    }    public void setOnQuickOptionformClickListener(OnQuickOptionformClick lis) {        mListener = lis;    }    @Override    public void onClick(View v) {        final int id = v.getId();        switch (id) {        case R.id.iv_close:            dismiss();            break;          case R.id.ly_quick_option_text:        	  Toast.makeText(getContext(), "哒哒哒!亲点击了文字!!", 0).show();	          break;	      case R.id.ly_quick_option_album:	    	  Toast.makeText(getContext(), "哒哒哒!亲点击了相册!!", 0).show();	          break;	      case R.id.ly_quick_option_photo:	    	  Toast.makeText(getContext(), "哒哒哒!亲点击了拍照!!", 0).show();	          break;//        case R.id.ly_quick_option_text://            onClickTweetPub(R.id.ly_quick_option_text);//            break;//        case R.id.ly_quick_option_album://            onClickTweetPub(R.id.ly_quick_option_album);//            break;//        case R.id.ly_quick_option_photo://            onClickTweetPub(R.id.ly_quick_option_photo);//            break;//        case R.id.ly_quick_option_voice://            UIHelper.showSimpleBack(getContext(), SimpleBackPage.RECORD);//            break;//        case R.id.ly_quick_option_scan://            UIHelper.showScanActivity(getContext());//            break;//        case R.id.ly_quick_option_note:            // UIHelper.showSimpleBack(getContext(), SimpleBackPage.FIND_USER);//            onClickNote();            //UIHelper.showSimpleBack(getContext(), SimpleBackPage.FIND_USER);            // onClickNote();//            break;        default:            break;        }        if (mListener != null) {            mListener.onQuickOptionClick(id);        }        dismiss();    }//    private void onClickTweetPub(int id) {//        Bundle bundle = new Bundle();//        int type = -1;//        switch (id) {//        case R.id.ly_quick_option_album://            type = TweetPubFragment.ACTION_TYPE_ALBUM;//            break;//        case R.id.ly_quick_option_photo://            type = TweetPubFragment.ACTION_TYPE_PHOTO;//            break;//        default://            break;//        }//        bundle.putInt(TweetPubFragment.ACTION_TYPE, type);//        UIHelper.showTweetActivity(getContext(), SimpleBackPage.TWEET_PUB,//                bundle);//    }//    private void onClickNote() {//        Bundle bundle = new Bundle();//        bundle.putInt(NoteEditFragment.NOTE_FROMWHERE_KEY,//                NoteEditFragment.QUICK_DIALOG);//        UIHelper.showSimpleBack(getContext(), SimpleBackPage.NOTE_EDIT, bundle);//    }}

QuickOptionDialog的布局文件dialog_quick_option.xml如下:

2.创建按钮并添加Dialog点击事件

点击事件:

// 显示快速操作界面public void showQuickOption(View view) {    final QuickOptionDialog dialog = new QuickOptionDialog(    MainActivity.this);    dialog.setCancelable(true);    dialog.setCanceledOnTouchOutside(true);    dialog.show();}

转载于:https://www.cnblogs.com/smartbetter/p/6647522.html

你可能感兴趣的文章
滚动条隐藏兼容写法
查看>>
SQL2005查询所有表的大小
查看>>
Shell 正则表达式
查看>>
Docker run命令参数整理
查看>>
qt-opencv配置mingw编译器
查看>>
CSS之Medial Queries的另一用法:实现IE hack的方法
查看>>
oo第三单元总结
查看>>
linux-CentOS6.4下安装oracle11g详解
查看>>
tomcat禁用webdav
查看>>
还是畅通工程
查看>>
sql字段组合唯一
查看>>
电脑软件故障排除2014年2月16日[修正版]
查看>>
YARN的笔记
查看>>
[机器学习]回归--(Simple LR and Multiple LR)
查看>>
javascript单线程,异步与执行机制
查看>>
腹部训练
查看>>
android ImageView scaleType属性
查看>>
day 4 继承
查看>>
14 模块
查看>>
4- 算法练习leetcode.com
查看>>