Android中彈出框形式的Activity簡(jiǎn)析

均屬于筆記,僅供個(gè)人參考,有問題歡迎指正

一,activity以窗口形式呈現(xiàn):

在AndroidManifest.xml中進(jìn)行一個(gè)theme配置:

如:<activity Android:name=".OtherActivity" android:theme="@android:style/Theme.Dialog"></activity>

參考:http://blog.csdn.net/xingmeng916/article/details/6857620

二,Android:將activity設(shè)置為彈出式的并設(shè)置為透明的

1. 在res/values 下建立color.xml

? <resources>?

<color name="transparent_background">#80ffffff</color>

</resources>

PS:? #80是透明度的值(即80%透明),ffffff是顏色值(為黑色)

2. 在res/values下建立style.xml

<resources>

<style name="Transparent" parent="android:style/Theme.Dialog">

? <item name="android:windowBackground">@color/transparent_background</item>

? <item name="android:windowNoTitle">true</item>

? <item name="android:windowIsTranslucent">true</item>

? <item name="android:windowAnimationStyle">@+android:style/Animation.Translucent</item>

</style>

</resources>

PS: parent="android:style/Theme.Dialog" 是將activity設(shè)置為彈出式窗口

3. 在AndroidManifest.xml中找到要彈出的activity,加入theme:

<activity android:name="ActivityName"

? android:theme="@style/Transparent"

? />

完成上面設(shè)置后,你的activity就已經(jīng)是透明的了,但是該Activity中的控件還沒有透明,如果還需要控件透明,則需要在該activity的代碼中加入如下代碼:

//設(shè)置activity中的控件透明

? Window window = getWindow();

? WindowManager.LayoutParams wl = window.getAttributes();

? wl.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;

? wl.alpha=0.95f;//設(shè)置透明度,0.0為完全透明,1.0為完全不透明

? window.setAttributes(wl);

參考:http://blog.csdn.net/chaozhung_no_l/article/details/8900682

三,對(duì)讓彈出框消失的處理

1,自身布局中的控件

cancel = (Button) findViewById(R.id.cancel);

cancel.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View arg0) {

finish();

}

});

}

對(duì)于點(diǎn)擊外圍和返回鍵不攔截時(shí),默認(rèn)的操作就是讓彈出框消失。(和自己攔截后調(diào)用finish方法的效果相同)

2,點(diǎn)擊外圍(判斷是否需要攔截,攔截后什么都不做,再消費(fèi)掉對(duì)應(yīng)的事件即可)

//當(dāng)需要是返回鍵和點(diǎn)擊外圍失效可以重寫onTouchEvent方法,截取返回鍵點(diǎn)擊事件

//這塊可以沒有onTouchEvent這個(gè)方法,既不需要攔截觸摸事件,默認(rèn)的就是銷毀該活動(dòng)

@Override

public boolean onTouchEvent(MotionEvent event)

{

finish();

return true;

//這塊true和false都可以,一個(gè)是消費(fèi)掉事件,一個(gè)是不消費(fèi)交由父控件消費(fèi)

// return false;

}

3,返回鍵(判斷是否需要攔截,攔截后什么都不做,再消費(fèi)掉對(duì)應(yīng)的事件即可)

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

if (keyCode == KeyEvent.KEYCODE_BACK) {

//攔截了什么都不做

// finish();

return true;

}

return false;

}

四,控制對(duì)話框風(fēng)格的activity的顯示大小與位置

實(shí)現(xiàn)對(duì)話框風(fēng)格的activity,我們需要在AndroidManifest.xml添加一句樣式聲明:

<activity

  android:name=".product.MyselfPayProduct"

? android:screenOrientation="portrait"

? android:theme="@android:style/Theme.Dialog" >

不過這樣的對(duì)話框風(fēng)格往往無法滿足我們的需要,顯示的效果不那么令人滿意,第一點(diǎn)就是如何控制對(duì)話框的大?。?/p>

//窗口對(duì)齊屏幕寬度

Window win = this.getWindow();

win.getDecorView().setPadding(0, 0, 0, 0);

WindowManager.LayoutParams lp = win.getAttributes();

lp.width = WindowManager.LayoutParams.MATCH_PARENT;

lp.height = WindowManager.LayoutParams.WRAP_CONTENT;

lp.gravity = Gravity.TOP;//設(shè)置對(duì)話框置頂顯示

win.setAttributes(lp);

將這個(gè)控制語句添加在我們的對(duì)話框activity的onCreate()方法中,這樣我們的對(duì)話框就可以寬度與屏幕一樣寬了,lp.gravity = Gravity.TOP;//設(shè)置對(duì)話框置頂顯示,android默認(rèn)對(duì)話框居中顯示,我們可以通過這句代碼設(shè)置對(duì)話框的顯示位置。

Window win = this.getWindow();

win.getDecorView().setPadding(0, 0, 0, 0);

WindowManager.LayoutParams lp = win.getAttributes();

lp.width = WindowManager.LayoutParams.MATCH_PARENT;

lp.height = WindowManager.LayoutParams.WRAP_CONTENT;

lp.gravity = Gravity.BOTTOM;

win.setAttributes(lp);

// 這里是設(shè)置偏移量,這里的x,y并不是相對(duì)于屏幕的絕對(duì)坐標(biāo),而是相對(duì)于對(duì)話框在中心位置(默認(rèn)的對(duì)話框一般顯示在屏幕的中心)而言的?

// lp.x = -20;// 設(shè)置水平偏移量?

// lp.y = 180;// 設(shè)置豎直偏移量?

// WindowManager.LayoutParams lp = getWindow().getAttributes();?

// ? ? lp.width = LayoutParams.FILL_PARENT;?

// ? ? lp.gravity = Gravity.BOTTOM;?

// ? ? getWindow().setAttributes(lp);?

參考:http://blog.csdn.net/fengqiaoyebo2008/article/details/5907373

http://www.cnblogs.com/AndroidJotting/p/4768849.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容