欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android悬浮对话框(即点即关对话框)实现代码

程序员文章站 2024-02-28 20:26:46
activity是android系统的4个应用程序组件之一。通过传统方法显示的activity都是充满整个屏幕,也就是全屏的activity。事实上,activity不仅可...

activity是android系统的4个应用程序组件之一。通过传统方法显示的activity都是充满整个屏幕,也就是全屏的activity。事实上,activity不仅可以全屏显示,还可以象对话框一样直接显示在屏幕上。而且可以通过单击屏幕的任何位置(包括activity内部和activity外部)来关闭activity。 activity的传统风格 activity是学习android的入门技术。几乎所有的初学者都会从activity学起。因此,activity这个组件对于android的开发人员是再熟悉不过了。下面来看一下activity的基本配置。

<activity android:name=".main" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.main" />
<category android:name="android.intent.category.launcher" />
</intent-filter>
</activity>

上面的配置代码是一个典型的activity配置。在这个配置中主要指定了action和category。按着这个配置显示的activity会充满整个屏幕。在android中也内置了很多程序,大多数都会包含activity,例如,图1是一个时钟程序,也是一个典型的activity。

Android悬浮对话框(即点即关对话框)实现代码

悬浮activity

所谓悬浮activity,就是悬浮在桌面上,看起来象一个对话框。如图2所示。

Android悬浮对话框(即点即关对话框)实现代码

事实上,实现上面的效果并不复杂,只需要在androidmanifest.xml文件中定义activity的<activity>标签中添加一个android:theme属性,并指定对话框主题即可,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="net.blogjava.mobile"
android:versioncode="1"
android:versionname="1.0">
<application android:icon="@drawable/date" android:label="@string/app_name">
<activity android:name=".main" android:label="@string/app_name" android:theme="@android:style/theme.dialog">
<intent-filter>
<action android:name="android.intent.action.main" />
<category android:name="android.intent.category.launcher" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minsdkversion="3" />
</manifest>
<?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<textview android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="这是一个悬浮对话框"
android:layout_marginleft="20dp" android:layout_marginright="20dp" />
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:gravity="center"
android:layout_margintop="20dp">
<button android:id="@+id/btncurrentdate"
android:layout_width="100dp" android:layout_height="wrap_content"
android:text="当前日期" />
<button android:id="@+id/btnfinish" android:layout_width="80dp"
android:layout_height="wrap_content" android:text="关闭" />
</linearlayout>
</linearlayout>

这两个按钮的单击事件代码如下:

public void onclick(view view)
{
switch (view.getid())
{
case r.id.btncurrentdate:
// 显示当前日期对话框
simpledateformat simpledateformat = new simpledateformat(
"yyyy-mm-dd");
datedialog.seticon(r.drawable.date);
datedialog.settitle("当前日期:"
+ simpledateformat.format(new date()));
datedialog.setbutton("确定", new onclicklistener()
{
@override
public void onclick(dialoginterface dialog, int which)
{
}
});
datedialog.setondismisslistener(new ondismisslistener()
{
@override
public void ondismiss(dialoginterface dialog)
{
new datedialog.builder(main.this).setmessage(
"您已经关闭的当前对话框.").create().show();
}
});
datedialog.show();
break;
case r.id.btnfinish:
// 关闭悬浮activity
finish();
break;
}
}

单击“显示日期”按钮后,效果如图4所示。

Android悬浮对话框(即点即关对话框)实现代码 

触摸任何位置都可以关闭的对话框

通常需要单击“关闭”或其他类似的按钮来关闭activity或对话框。但有时需要单击(触摸)屏幕的任何位置来关闭activity或对话框。关闭activity很好处理,只需要处理activity的触摸事件即可,代码如下:

@override
public boolean ontouchevent(motionevent event)
{
finish();
return true;
}

如果是对话框,也同样可以使用ontouchevent事件方法。不过一般使用了alertdialog对话框都是封装好的。因此,要使用ontouchevent事件方法,就需要继承alertdialog类。在上一节给出的onclick方法中弹出当前显示对话框的代码中使用了一个datedialog类,该类是alertdialog的子类,代码如下:

package net.blogjava.mobile;
import android.app.alertdialog;
import android.content.context;
import android.view.motionevent;
public class datedialog extends alertdialog
{
public datedialog(context context)
{
super(context);
}
@override
public boolean ontouchevent(motionevent event)
{
// 关闭显示日期对话框
dismiss();
return super.ontouchevent(event);
}
}

在上面的代码中也使用了ontouchevent事件方法。在该方法中调用了dismiss方法来关闭对话框。读者可以运行本文的例子,看看是否能通过单击屏幕的任何位置来关闭对话框和悬浮activity。

总结

本文介绍了悬浮activity和触摸任何位置都可以关闭的对话框的实现。悬浮activity只需要在<activity>元素中添加android:theme="@android:style/theme.dialog"即可。要想触摸任何位置关闭对话框或activity,需要使用触摸事件(ontouchevent方法)。如果是对话框,需要通过继承alertdialog类的方式来使用ontouchevent方法。

当使用上面的配置代码时,显示的activity就会如图2所示。在本例中向activity添加了两个按钮,分别用来显示当前日期和关闭对话框。