安卓應用-自訂對話方塊

來源:互聯網
上載者:User

標籤:安卓   自訂對話方塊   

現在要說的是自訂對話方塊。

常用的對話方塊有好多網友們整理的資料,對話方塊大全啊神馬的。但是除了常用對話方塊外,有時候要根據自己的需求定義新的對話方塊,下面就稍微說一下自訂對話方塊的一種做法。


1、需要一個對話方塊內容的xml設定檔game_dialog.xml,這個應該不需要過多解釋,基本布局而已。

有幾個圖片按鈕,所以在drawable下面放幾張圖,嫌麻煩的話,也可以用Button替換,看下效果。

需要說明的是,所有控制項的id這裡我都用的@id,因為id我都寫在了res/values/ids.xml裡面,如果不這樣做的話要用@+id,不過不好管理,雖然我在代碼管理這塊做的並不是特別好,但是盡量盡我所能讓他們看起來乾淨清晰簡潔明了,也會做一些注釋,以後回來看或者做改動也會舒心一點。

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:gravity="center_vertical|center_horizontal|center"    android:orientation="vertical" >    <TextView         android:id="@id/id_dialog_message"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:gravity="center_horizontal"        android:textSize="20sp"        android:text="輸出message"        />    <LinearLayout        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:gravity="center_horizontal"        android:orientation="horizontal" >        <ImageButton            android:id="@id/id_dialog_next"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_weight="1"            android:background="#00000000"            android:src="@drawable/dialog_next" />        <ImageButton            android:id="@id/id_dialog_replay"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_weight="1"            android:background="#00000000"            android:src="@drawable/dialog_replay" />        <ImageButton            android:id="@id/id_dialog_continue"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_weight="1"            android:background="#00000000"            android:src="@drawable/dialog_continue" />        <ImageButton            android:id="@id/id_dialog_quit"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_weight="1"            android:background="#00000000"            android:src="@drawable/dialog_quit" />    </LinearLayout></LinearLayout>


ids.xml如下:

<?xml version="1.0" encoding="utf-8"?><resources>        <item name="id_dialog_next" type="id"></item>        <item name="id_dialog_replay" type="id"></item>        <item name="id_dialog_continue" type="id"></item>        <item name="id_dialog_quit" type="id"></item>        <item name="id_dialog_message" type="id"></item></resources>

2、在res/values下的styles.xml中添加如下內容,定義一個名為GameDialog的style,然後設定一些item,基本看意思就能明白,其中android:windowBackground的值可以使用一張圖片,也可以使用一個xml檔案做配置,用xml會稍微美觀一點,用圖片的話,我目前還不太會找圖,不知道怎麼搭配好看。下面也附上我用的shape.xml的源碼。

    <style name="GameDialog" parent="@android:Theme.Dialog">        <item name="android:windowFrame">@null</item>        <item name="android:windowNoTitle">true</item>        <item name="android:windowBackground">@drawable/shape</item>        <item name="android:windowIsFloating">true</item>        <item name="android:windowIsTranslucent">true</item>        <item name="android:windowContentOverlay">@null</item>        <item name="android:backgroundDimEnabled">false</item>    </style>

shap.xml如下:

<?xml version="1.0" encoding="UTF-8"?><shape android:shape="rectangle"  xmlns:android="http://schemas.android.com/apk/res/android">  <!--  <solid android:color="#55222222"/>-->    <solid android:color="#e0000000"/>    <corners android:radius="5dp" />    <padding android:left="6dp"     android:top="6dp"android:right="6dp" android:bottom="6dp"/></shape>


3、定義一個類繼承自Dialog並實現OnClickListener介面,使用setContentview載入視圖,用findViewById擷取對話方塊中的View對象執行個體(不知道這樣說對不對啊?),和我們平時使用一樣,可以為他們設定監聽事件。

需要說一下的是這兩句:

this.setCancelable(false);

見名知意,就是屏蔽掉按返回鍵關閉對話方塊,有時候會有這種需要,強制要求必須做一個選擇。

this.dismiss();

這個是關閉掉對話方塊的。


以下是GameDialog的原始碼:

package com.test.leetledialog;import android.app.Dialog;import android.content.Context;import android.view.View;import android.widget.ImageButton;import android.widget.TextView;/** * 自訂訊息通知對話方塊  * @author Leetle *  */public class GameDialog extends Dialog implementsandroid.view.View.OnClickListener {private TextView gd_message;private ImageButton gd_next;private ImageButton gd_replay;private ImageButton gd_continue;private ImageButton gd_quit;public GameDialog(Context context, String message) {super(context, R.style.GameDialog);setContentView(R.layout.game_dialog);gd_message = (TextView) findViewById(R.id.id_dialog_message);gd_next = (ImageButton) findViewById(R.id.id_dialog_next);gd_continue = (ImageButton) findViewById(R.id.id_dialog_continue);gd_replay = (ImageButton) findViewById(R.id.id_dialog_replay);gd_quit = (ImageButton) findViewById(R.id.id_dialog_quit);// 設定提示訊息gd_message.setText(message);// 設定按鈕監聽gd_next.setOnClickListener(this);gd_quit.setOnClickListener(this);gd_continue.setOnClickListener(this);gd_replay.setOnClickListener(this);// 設定不能通過返回鍵取消this.setCancelable(false);}@Overridepublic void onClick(View view) {switch (view.getId()) {case R.id.id_dialog_next: {System.out.println("GameDialog next");this.dismiss();break;}case R.id.id_dialog_continue: {System.out.println("GameDialog continue");this.dismiss();break;}case R.id.id_dialog_replay: {System.out.println("GameDialog replay");this.dismiss();break;}case R.id.id_dialog_quit: {System.out.println("GameDialog quit");this.dismiss();break;}default: {}}}}


4、在MainActivity中開啟一個視窗

package com.test.leetledialog;import android.os.Bundle;import android.app.Activity;import android.view.Menu;public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //new一個GameDialog        GameDialog gameDialog;        gameDialog = new GameDialog(MainActivity.this,"看我看我快看我");gameDialog.show();    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.main, menu);        return true;    }    }

歐了,運行結果如。話說這個代碼不能摺疊嗎?

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/57/B5/wKiom1SiuO3B5B0GAAJMj2UX_Rc518.jpg" title="Screenshot_2014-12-30-22-37-38.png" width="480" height="857" border="0" hspace="0" vspace="0" style="width:480px;height:857px;" alt="wKiom1SiuO3B5B0GAAJMj2UX_Rc518.jpg" />


安卓應用-自訂對話方塊結束!


2014.12.30

李顏翎



安卓應用-自訂對話方塊

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.