Android懸浮對話框(即點即關(guān)對話框)實現(xiàn)代碼
Activity是Android系統(tǒng)的4個應(yīng)用程序組件之一。通過傳統(tǒng)方法顯示的Activity都是充滿整個屏幕,也就是全屏的Activity。事實上,Activity不僅可以全屏顯示,還可以象對話框一樣直接顯示在屏幕上。而且可以通過單擊屏幕的任何位置(包括Activity內(nèi)部和Activity外部)來關(guān)閉Activity。 Activity的傳統(tǒng)風(fēng)格 Activity是學(xué)習(xí)Android的入門技術(shù)。幾乎所有的初學(xué)者都會從Activity學(xué)起。因此,Activity這個組件對于Android的開發(fā)人員是再熟悉不過了。下面來看一下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中也內(nèi)置了很多程序,大多數(shù)都會包含Activity,例如,圖1是一個時鐘程序,也是一個典型的Activity。

懸浮Activity
所謂懸浮Activity,就是懸浮在桌面上,看起來象一個對話框。如圖2所示。

事實上,實現(xiàn)上面的效果并不復(fù)雜,只需要在AndroidManifest.xml文件中定義Activity的<activity>標(biāo)簽中添加一個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="當(dāng)前日期" /> <Button android:id="@+id/btnFinish" android:layout_width="80dp" android:layout_height="wrap_content" android:text="關(guān)閉" /> </LinearLayout> </LinearLayout>
這兩個按鈕的單擊事件代碼如下:
public void onClick(View view)
{
switch (view.getId())
{
case R.id.btnCurrentDate:
// 顯示當(dāng)前日期對話框
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
"yyyy-MM-dd");
dateDialog.setIcon(R.drawable.date);
dateDialog.setTitle("當(dāng)前日期:"
+ 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(
"您已經(jīng)關(guān)閉的當(dāng)前對話框.").create().show();
}
});
dateDialog.show();
break;
case R.id.btnFinish:
// 關(guān)閉懸浮Activity
finish();
break;
}
}
單擊“顯示日期”按鈕后,效果如圖4所示。
觸摸任何位置都可以關(guān)閉的對話框
通常需要單擊“關(guān)閉”或其他類似的按鈕來關(guān)閉Activity或?qū)υ捒?。但有時需要單擊(觸摸)屏幕的任何位置來關(guān)閉Activity或?qū)υ捒?。關(guān)閉Activity很好處理,只需要處理Activity的觸摸事件即可,代碼如下:
@Override
public boolean onTouchEvent(MotionEvent event)
{
finish();
return true;
}
如果是對話框,也同樣可以使用onTouchEvent事件方法。不過一般使用了AlertDialog對話框都是封裝好的。因此,要使用onTouchEvent事件方法,就需要繼承AlertDialog類。在上一節(jié)給出的onClick方法中彈出當(dāng)前顯示對話框的代碼中使用了一個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)
{
// 關(guān)閉顯示日期對話框
dismiss();
return super.onTouchEvent(event);
}
}
在上面的代碼中也使用了onTouchEvent事件方法。在該方法中調(diào)用了dismiss方法來關(guān)閉對話框。讀者可以運行本文的例子,看看是否能通過單擊屏幕的任何位置來關(guān)閉對話框和懸浮Activity。
總結(jié)
本文介紹了懸浮Activity和觸摸任何位置都可以關(guān)閉的對話框的實現(xiàn)。懸浮Activity只需要在<activity>元素中添加android:theme="@android:style/Theme.Dialog"即可。要想觸摸任何位置關(guān)閉對話框或Activity,需要使用觸摸事件(onTouchEvent方法)。如果是對話框,需要通過繼承AlertDialog類的方式來使用onTouchEvent方法。
當(dāng)使用上面的配置代碼時,顯示的Activity就會如圖2所示。在本例中向Activity添加了兩個按鈕,分別用來顯示當(dāng)前日期和關(guān)閉對話框。
- android 添加隨意拖動的桌面懸浮窗口
- Android實現(xiàn)類似360,QQ管家那樣的懸浮窗
- android編程實現(xiàn)懸浮窗體的方法
- Android實現(xiàn)桌面懸浮窗、蒙板效果實例代碼
- Android中懸浮窗口的實現(xiàn)原理實例分析
- Android利用懸浮按鈕實現(xiàn)翻頁效果
- 圣誕節(jié),寫個程序練練手————Android 全界面懸浮按鈕實現(xiàn)
- Android實現(xiàn)仿360桌面懸浮清理內(nèi)存
- 模仿美團(tuán)點評的Android應(yīng)用中價格和購買欄懸浮固定的效果
- Android實現(xiàn)App中導(dǎo)航Tab欄懸浮的功能
相關(guān)文章
android 仿QQ動態(tài)背景、視頻背景的示例代碼
本篇文章主要介紹了android 仿QQ動態(tài)背景、視頻背景的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03
Android學(xué)習(xí)之AppWidget筆記分享
這篇文章主要為大家詳細(xì)介紹了Android學(xué)習(xí)筆記之AppWidget的相關(guān)資料,感興趣的小伙伴們可以參考一下2016-08-08
android 6.0 權(quán)限授權(quán)方法
今天小編就為大家分享一篇android 6.0 權(quán)限授權(quán)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07
Android使用URLConnection提交請求的實現(xiàn)
這篇文章主要為大家詳細(xì)介紹了Android使用URLConnection提交請求的實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10
Android帶進(jìn)度條的下載圖片示例(AsyncTask異步任務(wù))
本文主要介紹Android帶進(jìn)度條的下載圖片示例(AsyncTask異步任務(wù))的方法解析。具有很好的參考價值。下面跟著小編一起來看下吧2017-04-04

