溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

安卓應(yīng)用-自定義對(duì)話框

發(fā)布時(shí)間:2020-08-03 05:12:10 來源:網(wǎng)絡(luò) 閱讀:374 作者:sy月牙兒 欄目:移動(dòng)開發(fā)

現(xiàn)在要說的是自定義對(duì)話框。

常用的對(duì)話框有好多網(wǎng)友們整理的資料,對(duì)話框大全啊神馬的。但是除了常用對(duì)話框外,有時(shí)候要根據(jù)自己的需求定義新的對(duì)話框,下面就稍微說一下自定義對(duì)話框的一種做法。


1、需要一個(gè)對(duì)話框內(nèi)容的xml配置文件game_dialog.xml,這個(gè)應(yīng)該不需要過多解釋,基本布局而已。

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

需要說明的是,所有控件的id這里我都用的@id,因?yàn)閕d我都寫在了res/values/ids.xml里面,如果不這樣做的話要用@+id,不過不好管理,雖然我在代碼管理這塊做的并不是特別好,但是盡量盡我所能讓他們看起來干凈清晰簡(jiǎn)潔明了,也會(huì)做一些注釋,以后回來看或者做改動(dòng)也會(huì)舒心一點(diǎn)。

<?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中添加如下內(nèi)容,定義一個(gè)名為GameDialog的style,然后設(shè)置一些item,基本看意思就能明白,其中android:windowBackground的值可以使用一張圖片,也可以使用一個(gè)xml文件做配置,用xml會(huì)稍微美觀一點(diǎn),用圖片的話,我目前還不太會(huì)找圖,不知道怎么搭配好看。下面也附上我用的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、定義一個(gè)類繼承自Dialog并實(shí)現(xiàn)OnClickListener接口,使用setContentview加載視圖,用findViewById獲取對(duì)話框中的View對(duì)象實(shí)例(不知道這樣說對(duì)不對(duì)?。浚?,和我們平時(shí)使用一樣,可以為他們?cè)O(shè)置監(jiān)聽事件。

需要說一下的是這兩句:

this.setCancelable(false);

見名知意,就是屏蔽掉按返回鍵關(guān)閉對(duì)話框,有時(shí)候會(huì)有這種需要,強(qiáng)制要求必須做一個(gè)選擇。

this.dismiss();

這個(gè)是關(guān)閉掉對(duì)話框的。


以下是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;

/**
 * 自定義消息通知對(duì)話框 
 * @author Leetle
 * 
 */
public class GameDialog extends Dialog implements
		android.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);

		// 設(shè)置提示消息
		gd_message.setText(message);
		// 設(shè)置按鈕監(jiān)聽
		gd_next.setOnClickListener(this);
		gd_quit.setOnClickListener(this);
		gd_continue.setOnClickListener(this);
		gd_replay.setOnClickListener(this);
		// 設(shè)置不能通過返回鍵取消
		this.setCancelable(false);

	}

	@Override
	public 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中打開一個(gè)窗口

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一個(gè)GameDialog
        GameDialog gameDialog;
        gameDialog = new GameDialog(MainActivity.this,"看我看我快看我");
	gameDialog.show();
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
}

歐了,運(yùn)行結(jié)果如下圖。話說這個(gè)代碼不能折疊么?

安卓應(yīng)用-自定義對(duì)話框


安卓應(yīng)用-自定義對(duì)話框結(jié)束!


2014.12.30



向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI