安卓實現底部彈出框/自定義對話框

本文僅供學習參考,如有雷同,純屬巧合


之前寫的一個項目需要實現類似微信以前版本的註銷提示框的效果,所以就到網上找了一下,發現大家的方法各有所長,

我自己整理了一個方法,在這裏做個筆記,如果這篇文章被你搜到了,那就參考一下吧,共同學習,大家評論見。


受這篇文章的啓發→ 彈出窗口的兩種實現方式 PopupWindow 和 Activity

所以看本文前,還是建議先看看上面的帖子。



下面開始正題

先說下思路:要自定義dialog的樣式,我想到的方法就是不用dialog的setTitle(),setMessage等方法,因爲那樣dialog的樣式就又成了Android自帶樣式了,把dialog給window,然後用window加載佈局,這個佈局就是對話框的佈局了,這個佈局什麼樣,對話框彈出來就是什麼樣。

還有就是,如果只用AlertDialog的話,加載出來的佈局寬度是不會充滿屏幕寬的,兩邊會有空隙,這是因爲Dialog會有一個默認的樣式,用window的話可以設置dialog的寬高,(個人認爲底部彈出的對話框兩邊有空隙不好看,所以用這個方法解決了,如果你不要求這個,可以只實例化一個AlertDialog就可以了)


接下來是代碼,僅僅一個方法就夠了:

private void showDialog() {
		final AlertDialog dialog = new AlertDialog.Builder(MainActivity.this)
				.create();
		dialog.show();
		Window window = dialog.getWindow();
		// 設置佈局
		window.setContentView(R.layout.alertdialog);
		// 設置寬高
		window.setLayout(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
		// 設置彈出的動畫效果
		window.setWindowAnimations(R.style.AnimBottom);
		// 設置監聽
		Button ok = (Button) window.findViewById(R.id.btn_ok);
		Button cancel = (Button) window.findViewById(R.id.btn_cancel);
		ok.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				dialog.cancel();
			}
		});
		cancel.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				dialog.cancel();
			}
		});
		// 因爲我們用的是windows的方法,所以不管ok活cancel都要加上“dialog.cancel()”這句話,
		// 不然有程序崩潰的可能,僅僅是一種可能,但我們還是要排除這一點,對吧?
		// 用AlertDialog的兩個Button,即使監聽裏什麼也不寫,點擊後也是會吧dialog關掉的,不信的同學可以去試下
	}

貼上兩個動畫效果的文件和style樣式:

push_bottom_in.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- 上下滑入式 -->
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="200"
        android:fromYDelta="50%p"
        android:toYDelta="0" />

</set>

push_bottom_out.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- 上下滑入式 -->
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="200"
        android:fromYDelta="0"
        android:toYDelta="50%p" />

</set>
Style樣式(寫在values文件夾下style.xml文件裏):

<style name="AnimBottom" parent="@android:style/Animation">  
    	<item name="android:windowEnterAnimation">@anim/push_bottom_in</item>
        <item name="android:windowExitAnimation">@anim/push_bottom_out</item>
	</style>


總結:上面的那篇帖子用Activity當彈出窗口的方法,不得不說方法非常新穎,但是有個缺點,就是每用一個對話框都要寫一個類,而且還要寫一個佈局,這樣很費事。而且如果要是對話框中有EditText時,Activity之間獲取變量不太方便……

我這種方法如果用到彈出框的需求多並且樣式類似的話,可以加載同一個佈局,然後對佈局裏的TextView和Button設置內容就可以了,較爲靈活。


附Demo下載→安卓實現底部彈出框/自定義對話框


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章