青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

大龍的博客

常用鏈接

統計

最新評論

Android基礎 - 對話框和浮動Activity -- 轉

在之前的學習過程中我們已經知道,Android應用中最常用的屏幕顯示開發是基于Activity的,但是,在很多情況下我們需要顯示一個對話框或浮動窗體來完成一些簡單的任務,比如需要讓用戶輸入一些內容,或讓用戶確認一些信息。

在Android中,我們可以通過兩種方式來創建對話框:
1. 借助Dialog類,或它的子類(如AlertDialog)
2. 使用Activity的對話框主題

使用Dialog類:
讓我們先來看下如何借助Dialog類創建對話框,首先,我們需要定義一個繼承了Dialog類的子類:

class MyDialog extends Dialog {
    public MyDialog(Context context) {
        super(context);
    }
}

然后,為這個對話框的內容定義一個布局文件,比如:

<?xml version=”1.0″ encoding=”utf-8″?>
    <LinearLayout
        android:id=”@+id/widget28″
     android:layout_width=”fill_parent”
     android:layout_height=”fill_parent”
     android:orientation=”vertical”
     xmlns:android=”http://schemas.android.com/apk/res/android”>
        <TextView
            android:id=”@+id/nameMessage”
        android:layout_width=”fill_parent”
        android:layout_height=”wrap_content”
        android:text=”Enter Name:”></TextView>
        <EditText
            android:id=”@+id/nameEditText”
        android:layout_width=”fill_parent”
        android:layout_height=”wrap_content”
        android:textSize=”18sp”></EditText>
        <LinearLayout
            android:id=”@+id/buttonLayout”
        android:layout_width=”fill_parent”
        android:layout_height=”wrap_content”
        android:layout_gravity=”center_horizontal”>
           <Button
               android:id=”@+id/okButton”
          android:layout_width=”wrap_content”
          android:layout_height=”wrap_content”
          android:text=”OK”></Button>
          <Button
               android:id=”@+id/cancelButton”
          android:layout_width=”wrap_content”
          android:layout_height=”wrap_content”
          android:text=”Cancel”></Button>
     </LinearLayout>
</LinearLayout>

接著,將上面這份布局文件應用到我們的對話框上來:

class MyDialog extends Dialog {
    ….
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(”TestApp”, “Dialog created”);
        setContentView(R.layout.mydialog);
    }
}

現在,我們就可以調用這個對話框類的show方法來讓它顯示:


MyDialog dialog = new MyDialog(context);
dialog.show();

對話框組件的事件處理機制和Activity是相同的,讓我們來看下如何處理對話框中的OK和Cancle按鈕的事件:

class MyDialog extends Dialog implements OnClickListener {
    private Button           okButton;
    private Button           cancelButton;
    private EditText         nameEditText;
   
    protected void onCreate(Bundle savedInstanceState) {
         okButton = (Button) findViewById(R.id.okButton);
         cancelButton = (Button) findViewById(R.id.cancelButton);
         nameEditText = (EditText) findViewById(R.id.nameEditText);
         okButton.setOnClickListener(this);
         cancelButton.setOnClickListener(this);
    }

    public void onClick(View view) {
        switch (view.getId()) {
             case R.id.okButton:
                  dismiss();
                  break;
            case R.id.cancelButton:
                  cancel();
                  break;
        }
    }
}

在對話框關閉時,對話框類的dismiss()方法將會被調用,該方法可以被對話框自身調用,也可以被其他外部代碼調用。
對話框支持“取消”功能,“取消”的含義是指不再需要執行對話框上的任何功能和動作。對話框的取消可以通過調用cancel()方法來實現。取消對話框也將會自動調用dismiss()方法。
當用戶點擊手機設備上的“返回”按鈕時,屏幕上的對話框將會被取消,如果你想讓你的對話框不在這種情況下被取消掉的話,你可以如下設置你的對話框:

setCancelable(false);

對話框的取消和關閉事件可以通過OnCancelListener和OnDismissListener兩個監聽器來被監聽處理。

從對話框中返回信息:
現在,到了我們要從對話框上獲取用戶輸入的值,將它返回到主調的Activity中的時候了。然而, Dialog類并沒有提供可以直接返回這些值的方法…但是,我們可以使用自己創建的監聽類:

public interface MyDialogListener {
    public void onOkClick(String name);
    public void onCancelClick();
}

我們的對話框類的構造方法同時需要作一點小小的修改:

public MyDialog(Context context, MyDialogListener listener) {
    super(context);
    this.listener = listener;
}

接著,你就得在創建這個對話框的時候提供一個已經實現了MyDialogListener這接口的監聽器實現對象了。
然后,我們要在對話框的onclick方法中傳出這個值:

public void onClick(View view) {
    switch (view.getId()) {
        case R.id.okButton:
             listener.onOkClick(nameEditText.getText().toString());
             dismiss();
             break;
        case R.id.cancelButton:
            cancel();
            break;
    }
}

使用AlertDialog:
AlertDialog類是Dialog類的子類。它默認提供了3個按鈕和一個文本消息。這些按鈕可以按需要來使他們顯示或隱藏。下列代碼將創建一個AlertDialog對話框,對話框上將向用戶展示一個問題以及備選的yes/no答案:

AlertDialog dialog = new AlertDialog.Builder(context).create();
dialog.setMessage(”Do you play cricket?”);
dialog.setButton(”Yes”, myOnClickListener);
dialog.setButton2(”No”, myOnClickListener);
dialog.show();

myOnClickListener這個事件監聽器的代碼可以類似如下:

public void onClick(DialogInterface dialog, int i) {
    switch (i) {
        case AlertDialog.BUTTON1:
           
           break;
        case AlertDialog.BUTTON2:
           
            break;
    }
}

AlertDialog.Builder:
AlertDialog類中有一個內部類,名為‘Builder’,Builder類提供了為對話框添加多選或單選列表,以及為這些列表添加事件處理的功能。另外,這個Builder類將AlertDialog對話框上的3個按鈕按照他們的位置分別稱呼為:PositiveButton, NeutralButton, NegativeButton
下列代碼是一個多選列表的例子:

new AlertDialog.Builder(context)
    .setIcon(R.drawable.icon)
    .setTitle(R.string.alert_dialog_multi_choice)
    .setMultiChoiceItems(
        R.array.select_dialog_items,
        new boolean[]{false, true, false, true, false},
        new DialogInterface.OnMultiChoiceClickListener() {
            public void onClick(DialogInterface dialog, int whichButton, boolean isChecked) {
               
            }
       }).setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
              
           }
       }).setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
                
            }
       }
    ).create();

 

Activity托管對話框:
Android也提供了創建對話框的快捷方式,在Activity中可以通過如showDialog(), onCreateDialog(), onPrepareDialog(),dismissDialog(), removeDialog()等方法來創建和管理對話框。
Activity的onCreateDialog方法用于在創建并顯示對話框的時候調用,比如:

@Override
protected Dialog onCreateDialog(int id) {
    return new AlertDialog.Builder(this).setMessage(”How are you?”).setPositiveButton(
          ”Fine”,
          new DialogInterface.OnClickListener() {
              public void onClick(DialogInterface dialog, int which) {
                 
             }
          }).setNegativeButton(”Not so good”, new DialogInterface.OnClickListener() {
              public void onClick(DialogInterface dialog, int which) {
                
              }
          }
    ).create();
}

你可以同時創建多個對話框,通過為他們設置id參數來區分它們,然后可以通過 showDialog(id)方法來顯示。 onCreateDialog方法只會在第一次調用showDialog方法時才會被調用,在之后的showDialog()的調用中,對話框不是被新建出來的,而是直接顯示之前創建過的那些對話框。

如果你想要更新對話框的內容,你只要在 onPrepareDialog()中作相應的工作就可以了,該方法會在對話框顯示之前進行調用。
dismissDialog()方法是用來關閉對話框的;removeDialog()方法用來將對話框從Activity的托管中移除(如果對已經移除的對話框重新進行調用showDialog ,則該對話框將進行重新創建)。

使用Dialog主題:
另外一種簡單的顯示對話框的方式是讓Activity以Dialog的方式來工作(假裝?),這種Activity被稱作浮動Activity。這種Activity可以通過配置它的主題來實現,我們可以在AndroidManifest.xml中進行類似如下的配置:

<activity android:name=”.DialogActivity” android:label=”@string/activity_dialog” android:theme=”@android:style/Theme.Dialog”>

</activity>

這樣,該Activity就會應用了 ‘Theme.Dialog’的主題而看起來像對話框了。

posted on 2010-06-07 16:32 大龍 閱讀(5776) 評論(0)  編輯 收藏 引用

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久久精品tv| 久久成人18免费观看| 久久色在线观看| 亚洲欧美一区二区原创| 国产精品一区毛片| 久久精品一区四区| 久久蜜桃资源一区二区老牛| 亚洲第一精品夜夜躁人人爽| 欧美高清视频一二三区| 欧美日韩www| 欧美一区国产一区| 久久免费黄色| 一区二区三区 在线观看视频| 亚洲无亚洲人成网站77777| 国产日韩欧美在线一区| 欧美jizz19hd性欧美| 欧美日韩美女一区二区| 久久久www成人免费毛片麻豆| 蜜桃av久久久亚洲精品| 亚洲欧美日韩国产| 久久精品理论片| 亚洲精品日韩在线观看| 亚洲综合精品四区| 亚洲第一狼人社区| 一区二区三区四区五区在线| 韩国久久久久| 亚洲美女黄网| 国产日韩一区二区三区在线播放 | 欧美大片一区二区| 欧美亚洲日本国产| 蜜月aⅴ免费一区二区三区| 午夜精品一区二区三区电影天堂 | 亚洲黑丝在线| 午夜国产不卡在线观看视频| 亚洲精品日韩一| 久久精品亚洲精品国产欧美kt∨| 99热这里只有成人精品国产| 欧美有码在线视频| 亚洲欧美国产77777| 欧美成人资源| 蜜桃av一区二区三区| 国产精品一区二区在线观看不卡| 亚洲国产一区二区三区青草影视| 欧美日韩精品是欧美日韩精品| 美国十次了思思久久精品导航| 欧美视频一区| 日韩天堂在线观看| 亚洲日韩欧美视频一区| 久久久美女艺术照精彩视频福利播放 | 欧美日韩免费观看一区二区三区| 麻豆久久久9性大片| 国产欧美一区二区三区国产幕精品 | 亚洲黄色性网站| 久久精品99国产精品日本 | 久久人人97超碰精品888| 性亚洲最疯狂xxxx高清| 欧美体内谢she精2性欧美| 亚洲高清在线播放| 亚洲日韩视频| 欧美电影免费| 亚洲国产综合视频在线观看 | 欧美久久影院| 亚洲欧洲一区二区在线播放| 亚洲激情小视频| 免费在线观看精品| 亚洲国产精品高清久久久| 亚洲黄色成人| 欧美日韩国产首页| 一本久道久久综合婷婷鲸鱼| 亚洲自拍偷拍一区| 国产精品一区二区黑丝| 香蕉乱码成人久久天堂爱免费| 欧美在线啊v| 国精品一区二区三区| 久久久欧美一区二区| 欧美激情国产日韩精品一区18| 亚洲国产日韩欧美综合久久| 欧美激情1区2区3区| 一本色道**综合亚洲精品蜜桃冫 | 久久婷婷人人澡人人喊人人爽| 国内外成人免费视频 | 99国内精品| 午夜免费电影一区在线观看| 国产一区二区三区久久| 久久免费高清| 一区二区三区四区五区精品视频| 欧美在线视频导航| 在线观看日韩精品| 欧美三级在线视频| 久久九九精品| 亚洲精品黄色| 久久久7777| 亚洲免费观看高清完整版在线观看熊 | 国产精品网站一区| 久久躁日日躁aaaaxxxx| 99精品热视频| 美女国产一区| 亚洲一卡久久| 狠狠色狠狠色综合人人| 欧美日韩国产123| 欧美一区午夜视频在线观看| 亚洲欧洲日本mm| 久久gogo国模啪啪人体图| 亚洲欧洲日本一区二区三区| 国产精品久久久久久久久久ktv| 久久精品一区二区三区中文字幕| 亚洲人成网站777色婷婷| 久久精品国产久精国产思思| 一本一本大道香蕉久在线精品| 国产日韩欧美电影在线观看| 欧美精品v国产精品v日韩精品 | 欧美伊人久久久久久久久影院| 亚洲人成在线免费观看| 樱花yy私人影院亚洲| 欧美视频精品在线观看| 免费亚洲电影在线| 欧美一区观看| 亚洲一区二区成人| 亚洲精品国产欧美| 免费亚洲网站| 久久久免费精品| 欧美在线一二三区| 亚洲永久免费| 妖精成人www高清在线观看| 亚洲丶国产丶欧美一区二区三区| 国产欧美精品日韩| 欧美午夜理伦三级在线观看| 欧美激情一区二区三区在线视频观看 | 亚洲欧美激情视频在线观看一区二区三区| 国产无一区二区| 国产精品久久网| 国产精品久久久对白| 欧美日韩中文精品| 欧美日韩一区二区国产| 欧美黑人在线播放| 欧美精品在线播放| 欧美激情精品久久久久久| 噜噜噜躁狠狠躁狠狠精品视频| 久久精品人人做人人爽电影蜜月| 亚洲欧美在线免费| 性欧美video另类hd性玩具| 亚洲一区在线免费观看| 亚洲一区二区三区在线看 | 性亚洲最疯狂xxxx高清| 亚洲欧美bt| 久久成人精品视频| 久久久国产成人精品| 久久免费视频网站| 欧美成人在线免费观看| 欧美精品系列| 欧美午夜国产| 国产欧美日韩中文字幕在线| 国产亚洲人成网站在线观看| 韩国在线一区| 亚洲精品美女| 亚洲专区免费| 久久精品国产99精品国产亚洲性色| 久久精品91久久香蕉加勒比| 久久婷婷国产综合精品青草| 男女av一区三区二区色多| 欧美福利专区| 亚洲天堂av电影| 久久久99爱| 欧美激情亚洲自拍| 国产嫩草一区二区三区在线观看 | 亚欧成人精品| 欧美超级免费视 在线| 亚洲精品乱码久久久久久蜜桃麻豆| 99国产一区| 久久视频在线看| 欧美日韩国产黄| 国产欧美一区二区三区在线老狼| 激情六月婷婷综合| 一区二区三区四区在线| 久久久久一区二区三区| 亚洲经典在线| 欧美在线短视频| 欧美日韩亚洲天堂| 在线观看一区欧美| 午夜国产精品影院在线观看 | 国产精品美女在线| 亚洲成人资源网| 亚洲午夜精品福利| 美女日韩欧美| 亚洲主播在线| 欧美人与性动交cc0o| 国产一区久久久| 亚洲一区二区免费看| 欧美大片免费观看在线观看网站推荐| 日韩写真视频在线观看| 看欧美日韩国产| 国产日韩精品电影| 亚洲一区二区免费在线| 亚洲国产91| 久久国产免费看| 国产精品日韩久久久久| 99精品视频免费观看| 美国十次成人| 久久精品视频网| 国产日韩一区二区三区在线|