【Android】Dialog从下往上弹起(Dialog全屏,模态显示)

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布局文件如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    
    android:orientation="vertical" >
    <!-- android:background="@drawable/clearpanbackground" -->
    
 <RelativeLayout 
     android:id="@+id/clearallpan"
     android:layout_width="fill_parent"
     android:layout_height="300dp"
     android:layout_alignParentBottom="true"
     android:background="@android:color/white"
     >
     
     <Button 
         android:id="@+id/clearall"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:layout_marginLeft="10dip"
         android:layout_marginRight="10dip"
         android:layout_marginTop="20dip"
         android:layout_marginBottom="10dip"
         android:text="删除所有"
         android:textColor="#FFFFFFFF"/>
       
     <Button 
         android:id="@+id/cancel"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:layout_marginLeft="10dip"
         android:layout_marginRight="10dip"
         android:layout_marginTop="10dip"
         android:layout_marginBottom="20dip"
         
         android:text="取消"
         android:layout_below="@id/clearall"
         android:textColor="#FFFFFFFF"/>
     
 </RelativeLayout>
    
</RelativeLayout>

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

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator" >
    <translate
        android:duration="300"
        android:fromYDelta="100.0%"
        android:toYDelta="10.000002%" />
    <alpha
        android:duration="50"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />
</set>

自定义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如下

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:orientation="vertical"
  >

<LinearLayout 
    android:id="@+id/pop_layout"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    android:layout_alignParentBottom="true"
     android:background="@drawable/btn_style_alert_dialog_background"
     >

    
    <Button
        android:id="@+id/btn_take_photo"
        android:layout_marginLeft="20dip"
        android:layout_marginRight="20dip"
        android:layout_marginTop="20dip"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="拍照"
        android:background="@drawable/btn_style_alert_dialog_button"
        android:textStyle="bold"
         />

    <Button
        android:id="@+id/btn_pick_photo"
        android:layout_marginLeft="20dip"
        android:layout_marginRight="20dip"
        android:layout_marginTop="5dip" 
         android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="从相册选择"
         android:background="@drawable/btn_style_alert_dialog_button"
         android:textStyle="bold"
         />

    <Button
        android:id="@+id/btn_cancel"
       android:layout_marginLeft="20dip"
       android:layout_marginRight="20dip"
       android:layout_marginTop="15dip" 
	   android:layout_marginBottom="15dip"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:text="取消"
       android:background="@drawable/btn_style_alert_dialog_cancel"
       android:textColor="#ffffff"
       android:textStyle="bold"
       
        />
</LinearLayout>
</RelativeLayout>

在清单文件中配置该Activity

<activity
            android:name=".SelectPicPopupWindow"
            android:theme="@style/MyDialogStyleBottom" />
        <activity

MyDialogStyleBottom样式如下:

  <style name="AnimBottom" parent="@android:style/Animation">
        <item name="android:windowEnterAnimation">@anim/push_bottom_in</item>
        <!--  <item name="android:windowExitAnimation">@anim/push_bottom_out</item> -->
    </style>

    <style name="MyDialogStyleBottom" parent="android:Theme.Dialog">
        <item name="android:windowAnimationStyle">@style/AnimBottom</item>
        <item name="android:windowFrame">@null</item>
 <!-- 边框 -->
        <item name="android:windowIsFloating">true</item>
 <!-- 是否浮现在activity之上 -->
        <item name="android:windowIsTranslucent">true</item>
 <!-- 半透明 -->
        <item name="android:windowNoTitle">true</item>
 <!-- 无标题 -->
        <item name="android:windowBackground">@android:color/transparent</item>
 <!-- 背景透明 -->
        <item name="android:backgroundDimEnabled">true</item>
 <!-- 模糊 -->
    </style>

动画push_bottom_in.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<!-- 上下滑入式 -->
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="200"
        android:fromYDelta="100%p"
        android:toYDelta="0"        
     />      
</set>
时间: 2025-01-15 09:59:23

【Android】Dialog从下往上弹起(Dialog全屏,模态显示)的相关文章

ie下获取上传文件全路径

ie下获取上传文件全路径,3.5之后的火狐是没法获取上传文件全路径的 1 /*获取上传文件路径*/ 2 function getFilePath(obj) { 3 var form = $(this).parents("form"); 4 form.validate(); 5 var fileObj = obj; 6 if (fileObj) { 7 if (window.navigator.userAgent.indexOf("MSIE") >= 1) {

Android浏览图片,点击放大至全屏效果

最近做一个项目类似于QQ空间,做到照片浏览的功能,对于QQ空间中点击图片放大至全屏,感觉效果很赞,于是也做了个类似的效果.如下. 我不知道QQ那个是怎么做的,我的思路如下: 首先,从图片缩略界面跳转到图片详情页面,应该是从一个Activity跳转到另外一个Activity,应该图片详情页面也有很多操作,用View或者Dialog不是很好.所以现在难点就是,如何使得前一个界面的ImageView在另外一个界面做缩放切割动画. 一般缩略界面的ImageView的是如上图所示的正方形的,并且是CENT

Android游戏开发(一):界面全屏以及画笔的使用

@authur : qingdujun  2015年4月15日21:00:03 MainActivity.java中设置全屏,注意:其设置必须在setContentView之前: package com.qdj.gameone; import com.qdj.ui.ViewOne; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Window; impor

Android开发中的全屏背景显示方案

引子 不管是Android还是iOS平台中,都可以看到一些应用在启动的时候会先出现一个启动画面(Splash Activity),如QQ.微信等.这个启动画面中往往会将ActionBar和Status Bar隐藏掉,然后用户进入一种沉浸的状态,形成更强烈的视觉冲击.一方面,这可以给用户留下更深刻的使用体验,从而产生一定品牌效应:另一方面,也给应用的启动初始化留下了充裕的时间,避免因为启动时间过长而给用户留下不良的印象.因此,全屏显示在手机应用中得到了广泛的应用.那么这篇博客中就记录下全屏显示的一

Win7下连远程桌面 窗口 全屏 切换

今天在win7下用远程桌面,不小心把桌面上面的还原按钮给点到了, 于是整个远程桌面就变成了本地机的一个窗口了,可以看见任务栏的那种 有些人觉得这样方便,可以看见qq消息等,但我想切回全屏时一时找不到按钮,囧 百度了下,有快捷键ctrl+alt+break 貌似在XP下连远程桌面时,只能全屏 其它快捷键也贴出来,不过貌似都用不着 链接:http://wenwen.soso.com/z/q210960589.htm?sp=1176 快捷键 描述 Alt+Page Up 从左向右在程序之间切换. Al

Android解决WebView的定位功能、视频全屏播放、下载功能、页面Url的处理、进度条处理

解决WebView的定位功能.视频全屏播放.下载功能.页面Url的处理.进度条处理 事先说明: 定位功能在安卓6.0需要用户手动确认权限后才能使用 若需在安卓6.0适配WebView的定位功能,则需要在WebView中手动增加用户权限访问 详细可百度安卓6.0权限管理系统,或者采用第三方封装好的权限管理类进行编写(如Bmob) 如果对内容不理解的话,可参考最后的整个类的代码 如果对BaseActivity这个抽象类不理解的话,可以查看下面一篇文章对BaseActivity的介绍 步骤一:webv

iOS开发——在不支持横屏情况下,实现播放器全屏播放

在使用MPMoviePlayerController实现播放器播放时,发现不能全屏播放,原来是因为项目不支持横屏,把支持横屏的选项勾住就OK啦,但是其他页面不支持横屏,这个方法就行不通了. 在网上找了很多的资料,很多都是在iOS 6之后就舍弃的,都没用,下面我就来介绍下,在不支持横屏的情况下,实现视频播放器的全屏播放. 1. 首先在AppDelegate.h 定义@property (nonatomic, assign) BOOL allowRotation; // 标记是否可以旋转 2. 同时

Android webview 退出时关闭声音 4.视频全屏 添加cookie

全屏问题,可以参考 http://bbs.csdn.net/topics/390839259,点击 webView = (WebView) findViewById(R.id.webView); videoview = (FrameLayout) findViewById(R.id.video_view); chromeClient = new WebChromeClient() { // 播放网络视频时全屏会被调用的方法 @Override public void onShowCustomVi

IOS iphone 4inch上应用没有全屏,上下有黑边

在编写IOS应用程序的过程中,我一直都是使用iPhone Retina(3.5-inch)模拟器测试的,一切显示正常,切图如下: 我在应用开发中,采用的是纯代码实现.公司提供了一部iPhone4s,我使用其测试一切显示正常. 问题出在,当我使用iPhone5和 iPhone5s真机测试时,发现我的应用在iPhone5和iPhone5s上没有铺满屏幕显示画面,而是在应用画面的上下各有一条黑色,截图如下: 检查问题步骤: 一.我开始仔细检查我的代码,发现 在整个工程中,没有一个地方在设置画面高度时候