`
407827531
  • 浏览: 1073122 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

【转】Android/Ophone中的悬浮对话框和即点即关对话框

阅读更多

推荐安卓开发神器(里面有各种UI特效和android代码库实例)

Activity是Ophone系统的4个应用程序组件之一。通过传统方法显示的Activity都是充满整个屏幕,也就是全屏的Activity。事实上,Activity不仅可以全屏显示,还可以象对话框一样直接显示在屏幕上。而且可以通过单击屏幕的任何位置(包括Activity内部和Activity外部)来关闭Activity。

Activity的传统风格

Activity是学习Ophone的入门技术。几乎所有的初学者都会从Activity学起。因此,Activity这个组件对于Ophone的开发人员是再熟悉不过了。下面来看一下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会充满整个屏幕。在Ophone中也内置了很多程序,大多数都会包含Activity,例如,图1是一个时钟程序,也是一个典型的Activity。


悬浮Activity

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



事实上,实现上面的效果并不复杂,只需要在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>


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

<?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所示。



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

通常需要单击“关闭”或其他类似的按钮来关闭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方法。

 

分享到:
评论

相关推荐

    Android/Ophone开发完全讲义源码

    在Android和Ophone开发领域,源码是学习与探索系统工作原理、优化应用性能以及创新技术实践的关键资源。这份"Android/Ophone开发完全讲义源码"为开发者提供了丰富的学习材料,涵盖了Android和Ophone平台的基础到高级...

    Android/OPhone开发完全讲义 Android 完整开放源代码

    OPhone开发涉及到对Android API的扩展和优化,对于希望在中国市场推出应用的开发者来说,理解OPhone的特性和差异至关重要。 本书的内容可能包括以下几个方面: 1. **Android基础**:介绍Android系统的基本架构,...

    《Android/OPhone开发完全讲义》(上)

    《Android/OPhone开发完全讲义》...以上内容只是《Android/OPhone开发完全讲义》(上)的部分概览,实际书籍中会更详细地讲解每个知识点,并结合实例进行深入解析,帮助读者掌握Android和OPhone应用开发的全方位技能。

    Android/Ophone开发完全讲义(中)

    《Android/Ophone开发完全讲义》是一本由著名IT教育专家李宁老师编著的专业教程,专注于Android和Ophone的移动应用开发。该教程详细涵盖了Android与Ophone平台的开发技术,旨在帮助开发者全面理解并掌握这两种操作...

    《Android/OPhone开发完全讲义》(下)

    5. **多线程与异步处理**:讲解如何在Android中进行多线程编程,以及使用AsyncTask、Handler、Service等进行后台任务处理。 6. **资源管理和国际化**:如何管理和复用应用中的字符串、图片、颜色等资源,以及如何...

    Android/Ophone开发完全讲义.rar

    在"src.rar"这个压缩文件中,很可能是包含了一系列的Android和Ophone项目源码。这些源码可能涵盖了基础的Activity管理、Intent通信、BroadcastReceiver、Service、ContentProvider等各种Android组件的使用。同时,也...

    《Android/OPhone开发完全讲义》源代码(ch02-ch10).zip

    《Android/OPhone开发完全讲义》是一本深入讲解Android和OPhone开发的书籍,由李宁撰写。这本书的源代码包含在名为"ch02-ch10"的压缩包中,涵盖了从第二章到第十章的所有实例和项目。通过分析和实践这些源代码,读者...

    Android/ophone开发完全讲义源代码

    本书是国内第一本同时介绍Android和OPhone的经典著作,国内著名Android社区eoeandroid极力推荐。全书分为五大部分,共二十五章,主要内容包括:Android应用程序架构,移动存储解决方案,Android服务,资源、国际化与...

    《Android/OPhone开发完全讲义》一书的所有源代码

    3. **数据存储**:ch19和ch20可能讲解了Android中的数据存储方法,包括SQLite数据库的使用,Shared Preferences以及文件系统存储。读者会学到如何创建数据库表,执行SQL查询,以及如何在应用中读写数据。 4. **网络...

    Android/Ophone开发完全讲义

    10. **多媒体支持**:讨论如何在Android中处理音频、视频和图像,包括使用MediaPlayer和Camera API。 11. **传感器与位置服务**:讲解如何利用GPS、Wi-Fi和移动网络获取设备位置,以及使用SensorManager处理各种...

    Android/OPhone开发完全讲义 Android 完整代码

    《Android/OPhone开发完全讲义》是一本深入讲解Android和OPhone开发的综合性教材,由知名技术专家李宁编写,包含完整的代码示例。这本书旨在帮助开发者全面掌握Android和OPhone平台的开发技能,从基础到高级,覆盖了...

    android/ophone开发完全讲义

    在Android开发中,理解位置服务是至关重要的。通过集成GPS(全球定位系统)、Wi-Fi和移动网络数据,应用程序可以获取用户的实时地理位置信息,这对于地图导航、天气预报、社交应用等功能是必不可少的。Android SDK...

    android/ophone开发讲义源码

    3. **数据存储**:Android提供了SQLite数据库用于本地数据存储,源码中可能有SQL操作和ContentProvider的使用,展示了如何在应用中读写数据。 4. **网络通信**:Android应用经常需要进行网络操作,如HTTP请求、...

    android/ophone开发完全讲义样章

    【Android/OPhone开发完全讲义样章】是针对移动应用开发者的一份详细教程,主要聚焦于Android和OPhone平台的开发技术。样章包含了第1、8、14章的内容,这三章分别涵盖了Android开发的基础知识、Android服务以及更...

    Android/OPhone 开发完全讲义 源代码

    这份"Android/OPhone开发完全讲义"的源代码,由知名作者李宁编写,提供了一个宝贵的资源库,帮助初学者和有经验的开发者深化对Android系统开发的理解。 首先,让我们聚焦于"Android"这个标签。Android是一种开源的...

    Android/OPhone 开发完全讲义源代码(2)

    《Android/OPhone 开发完全讲义源代码(2)》是针对Android和OPhone开发者的一份重要资源,包含了从第13章到第25章的源代码。这份讲义旨在提供全面深入的Android与OPhone应用开发指导,帮助开发者理解和实践Android...

    《Android/OPhone开发完全讲义》源代码(ch02-ch10)

    《Android/OPhone开发完全讲义》是一本深入讲解Android和OPhone开发的书籍,其提供的源代码(ch02-ch10)是学习者理解并实践书中理论知识的重要参考资料。这个压缩包包含了从第二章到第十章的全部源代码,涵盖了...

    Android/Ophone完全开发的近200个项目实例

    这些项目实例都是Android开发中常用到的东西,对于Android初学者来说,完全是最好的东西。我敢说,只要你能掌握大部分的项目实例,那么你在工作中遇到的最多是实际开发中的遇到的困难,而非基础技术方面的问题。

    Android_OPhone的UI架構.doc

    Activity在Android中扮演着至关重要的角色,它是应用程序中用户交互的主线程。图4描绘了Activity与View之间的关系。Activity作为一个上下文环境(Context),负责处理与View相关的事件。例如,当用户点击一个按钮时...

    android ophone source code 4

    本篇将深入探讨Android OPhone源码中的关键知识点。 一、系统架构 Android OPhone的系统架构主要由Linux内核、运行时库、应用程序框架和应用程序四部分组成。源码分析将揭示这四个层次如何协同工作,为开发者提供...

Global site tag (gtag.js) - Google Analytics