<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 312, 文章 - 14, 評(píng)論 - 1393, 引用 - 0
    數(shù)據(jù)加載中……

    Android/Ophone中的懸浮對(duì)話框和即點(diǎn)即關(guān)對(duì)話框

    本文為原創(chuàng),如需轉(zhuǎn)載,請(qǐng)注明作者和出處,謝謝!

    ActivityOphone系統(tǒng)的4個(gè)應(yīng)用程序組件之一。通過(guò)傳統(tǒng)方法顯示的Activity都是充滿整個(gè)屏幕,也就是全屏的Activity。事實(shí)上,Activity不僅可以全屏顯示,還可以象對(duì)話框一樣直接顯示在屏幕上。而且可以通過(guò)單擊屏幕的任何位置(包括Activity內(nèi)部和Activity外部)來(lái)關(guān)閉Activity

    Activity
    的傳統(tǒng)風(fēng)格

    Activity是學(xué)習(xí)Ophone的入門(mén)技術(shù)。幾乎所有的初學(xué)者都會(huì)從Activity學(xué)起。因此,Activity這個(gè)組件對(duì)于Ophone的開(kāi)發(fā)人員是再熟悉不過(guò)了。下面來(lái)看一下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>

    上面的配置代碼是一個(gè)典型的Activity配置。在這個(gè)配置中主要指定了actioncategory。按著這個(gè)配置顯示的Activity會(huì)充滿整個(gè)屏幕。在Ophone中也內(nèi)置了很多程序,大多數(shù)都會(huì)包含Activity,例如,圖1是一個(gè)時(shí)鐘程序,也是一個(gè)典型的Activity


    懸浮Activity

    所謂懸浮Activity,就是懸浮在桌面上,看起來(lái)象一個(gè)對(duì)話框。如圖2所示。



    事實(shí)上,實(shí)現(xiàn)上面的效果并不復(fù)雜,只需要在AndroidManifest.xml文件中定義Activity<activity>標(biāo)簽中添加一個(gè)android:theme屬性,并指定對(duì)話框主題即可,代碼如下:

    <?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>

    當(dāng)使用上面的配置代碼時(shí),顯示的Activity就會(huì)如圖2所示。在本例中向Activity添加了兩個(gè)按鈕,分別用來(lái)顯示當(dāng)前日期和關(guān)閉對(duì)話框。Activity的布局文件的內(nèi)容如下:

    <?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="這是一個(gè)懸浮對(duì)話框"
            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>

    這兩個(gè)按鈕的單擊事件代碼如下:

        public void onClick(View view)
        {
            
    switch (view.getId())
            {
                
    case R.id.btnCurrentDate:
                     
    //  顯示當(dāng)前日期對(duì)話框
                    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)前對(duì)話框.").create().show();
                        }
                    });
                    dateDialog.show();
                    
    break;

                
    case R.id.btnFinish:
                    
    //  關(guān)閉懸浮Activity
                    finish();
                    
    break;
            }
        }

    單擊“顯示日期”按鈕后,效果如圖4所示。

    觸摸任何位置都可以關(guān)閉的對(duì)話框

    通常需要單擊“關(guān)閉”或其他類(lèi)似的按鈕來(lái)關(guān)閉Activity或?qū)υ捒颉5袝r(shí)需要單擊(觸摸)屏幕的任何位置來(lái)關(guān)閉Activity或?qū)υ捒颉jP(guān)閉Activity很好處理,只需要處理Activity的觸摸事件即可,代碼如下:


    @Override
    public boolean onTouchEvent(MotionEvent event)
    {

        finish();
       
    return true;
    }

    如果是對(duì)話框,也同樣可以使用onTouchEvent事件方法。不過(guò)一般使用了AlertDialog對(duì)話框都是封裝好的。因此要使用onTouchEvent事件方法就需要繼承AlertDialog類(lèi)。在上一節(jié)給出的onClick方法中彈出當(dāng)前顯示對(duì)話框的代碼中使用了一個(gè)DateDialog類(lèi),該類(lèi)是AlertDialog的子類(lèi),代碼如下:

    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)閉顯示日期對(duì)話框
            dismiss();
            
    return super.onTouchEvent(event);
        }
    }

    在上面的代碼中也使用了onTouchEvent事件方法。在該方法中調(diào)用了dismiss方法來(lái)關(guān)閉對(duì)話框。讀者可以運(yùn)行本文的例子,看看是否能通過(guò)單擊屏幕的任何位置來(lái)關(guān)閉對(duì)話框和懸浮Activity

    總結(jié)

    本文介紹了懸浮Activity和觸摸任何位置都可以關(guān)閉的對(duì)話框的實(shí)現(xiàn)。懸浮Activity只需要在<activity>元素中添加android:theme="@android:style/Theme.Dialog"即可。要想觸摸任何位置關(guān)閉對(duì)話框或Activity,需要使用觸摸事件(onTouchEvent方法)。如果是對(duì)話框,需要通過(guò)繼承AlertDialog類(lèi)的方式來(lái)使用onTouchEvent方法。

     





    Android開(kāi)發(fā)完全講義(第2版)(本書(shū)版權(quán)已輸出到臺(tái)灣)

    http://product.dangdang.com/product.aspx?product_id=22741502



    Android高薪之路:Android程序員面試寶典 http://book.360buy.com/10970314.html


    新浪微博:http://t.sina.com.cn/androidguy   昵稱(chēng):李寧_Lining

    posted on 2010-01-11 08:31 銀河使者 閱讀(3272) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): java 原創(chuàng)移動(dòng)(mobile)Google

    主站蜘蛛池模板: 国产精品免费大片一区二区| 免费观看美女用震蛋喷水的视频| 成人啪精品视频免费网站| 亚洲人成人一区二区三区| 亚洲精品无码你懂的| 久艹视频在线免费观看| 免费在线视频一区| 亚洲一级毛片视频| 美女在线视频观看影院免费天天看| 永久免费AV无码网站在线观看| 亚洲成人激情在线| a级毛片免费观看网站| 成人au免费视频影院| 自怕偷自怕亚洲精品| 91av免费在线视频| 日韩中文无码有码免费视频| 亚洲美女视频免费| 国产情侣久久久久aⅴ免费| 免费a级毛片在线观看| 美女视频黄免费亚洲| 最近2018中文字幕免费视频| 亚洲乱码国产一区三区| 日韩电影免费在线观看网址| 天天摸夜夜摸成人免费视频| 亚洲无人区视频大全| 久久99热精品免费观看牛牛| 亚洲一区二区三区在线观看精品中文| 亚洲av无码一区二区三区天堂| 免费看黄视频网站| 亚洲第一页中文字幕| 国产成人精品无码免费看| 在线观看国产区亚洲一区成人| 美女黄频免费网站| 免费看美女被靠到爽| 亚洲国产日韩精品| 无遮免费网站在线入口| 亚洲一区二区影院| 亚洲视频在线免费观看| 亚洲av永久无码精品漫画| 免费萌白酱国产一区二区三区| 久久久久亚洲AV成人网人人网站|