博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Android】Dialog从下往上弹起(Dialog全屏,模态显示)
阅读量:7000 次
发布时间:2019-06-27

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

hot3.png

public class MyDialog extends Dialog implements android.view.View.OnClickListener{	private Button cancel;	Context context;	View localView;	private RelativeLayout clearallpan;		protected MyDialog(Context context) {		super(context);		this.context = context; 	}		@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        // 这句代码换掉dialog默认背景,否则dialog的边缘发虚透明而且很宽        // 总之达不到想要的效果        getWindow().setBackgroundDrawableResource(android.R.color.transparent);    	LayoutInflater inflater = ((AnimationActivity) context).getLayoutInflater();     		localView = inflater.inflate(R.layout.animclearpan, null);		localView.setAnimation(AnimationUtils.loadAnimation(context, R.anim.slide_bottom_to_top));  		setContentView(localView);           // 这句话起全屏的作用        getWindow().setLayout(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);        initView();		initListener();			}		@Override	public boolean onTouchEvent(MotionEvent event) {		this.dismiss(); 		return super.onTouchEvent(event);	}	private void initListener() {		cancel.setOnClickListener(this); 		clearallpan.setOnClickListener(this); 	}	private void initView() {		cancel = (Button) findViewById(R.id.cancel);		clearallpan = (RelativeLayout) findViewById(R.id.clearallpan);		 	}	public void onClick(View v) {		switch (v.getId()) {		case R.id.cancel:		    this.dismiss();    			break;		case R.id.clearallpan:			Toast.makeText(context, "请在该区域之外点击", 0).show();			break;		}	}}

animclearpan.xml布局文件如下:

    
     
          
            
          

动画效果slide_bottom_to_top.xml文件如下:

    
    

自定义Dialog,然后设置为透明背景,然后在View上面设置动画

2: 我们也可以把Acitivity变成Dialog样式,但是这样有个缺点:就是不同的手机room对activity中的跳转样式有所变化,当我设置Activity退出的动画时,没有效果。所以如果需求要求全屏的类似Dialog的样式,就自定义Dialog显示,不要把Activity转成Dialog样式.

一下是把Activity变成Dialog样式

1)Activity如下:

package com.example.picpopupwindow;import android.app.Activity;import android.os.Bundle;import android.view.MotionEvent;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.LinearLayout;import android.widget.Toast;public class SelectPicPopupWindow extends Activity implements OnClickListener{	private Button btn_take_photo, btn_pick_photo, btn_cancel;	private LinearLayout layout;		@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.alert_dialog);		btn_take_photo = (Button) this.findViewById(R.id.btn_take_photo);		btn_pick_photo = (Button) this.findViewById(R.id.btn_pick_photo);		btn_cancel = (Button) this.findViewById(R.id.btn_cancel);				layout=(LinearLayout)findViewById(R.id.pop_layout);				//添加选择窗口范围监听可以优先获取触点,即不再执行onTouchEvent()函数,点击其他地方时执行onTouchEvent()函数销毁Activity		layout.setOnClickListener(new OnClickListener() {						public void onClick(View v) {				// TODO Auto-generated method stub				Toast.makeText(getApplicationContext(), "提示:点击窗口外部关闭窗口!", 						Toast.LENGTH_SHORT).show();				}		});		//添加按钮监听		btn_cancel.setOnClickListener(this);		btn_pick_photo.setOnClickListener(this);		btn_take_photo.setOnClickListener(this);	}		//实现onTouchEvent触屏函数但点击屏幕时销毁本Activity	@Override	public boolean onTouchEvent(MotionEvent event){		finish();		return true;	}	public void onClick(View v) {		switch (v.getId()) {		case R.id.btn_take_photo:			break;		case R.id.btn_pick_photo:							break;		case R.id.btn_cancel:							break;		default:			break;		}		finish();	}	}

样式alert_dialog.xml如下

        
    
    

在清单文件中配置该Activity

        

MyDialogStyleBottom样式如下:

  
        
@anim/push_bottom_in        
        
        
@style/AnimBottom        
@null 
        
true 
        
true 
        
true 
        
@android:color/transparent 
        
true 
    

动画push_bottom_in.xml如下:

    
      

转载于:https://my.oschina.net/u/141132/blog/387939

你可能感兴趣的文章
如何用“区块链+稳定币”技术来提升资产证券化市场运作效率
查看>>
Spring Web Services 3.0.4.RELEASE和2.4.3.RELEASE发布
查看>>
广度、深度、易用性,详解6大机器学习云
查看>>
雇佣和留住开发人员,打造优秀的团队
查看>>
马斯克宣布退出OpenAI,全身心投入特斯拉与SpaceX
查看>>
LFE将Lisp编程带到Erlang虚拟机上
查看>>
VS2017 15.8第二个预览版本提升了对CPU Profiling和F#的支持
查看>>
荷兰商业银行使用精益领导力推行改进
查看>>
关于5G被激烈讨论的那些争端和冲突
查看>>
re:Invent 大会第一天,看看AWS有哪些最新进展?\n
查看>>
Spark 2.4重磅发布:优化深度学习框架集成,提供更灵活的流式接收器
查看>>
时隔25年重访 Linus:流量时代的“技术大师”
查看>>
IBM将开源50个项目
查看>>
Nexus指南已经发布
查看>>
红帽发布第四季度和2019财年报告,多项指标维持两位数增速
查看>>
vuejs 检视组件结构
查看>>
LeetCode 14_Longest Common Prefix
查看>>
Vorlon.js:一款JavaScript远程调试和测试工具
查看>>
JetBrains在CLion的Linux和OS X版本中引入Swift支持
查看>>
那家CTO带头喊麦的直播公司,快要倒闭了
查看>>