當前位置:首頁 » 安卓系統 » androidactivity設置

androidactivity設置

發布時間: 2023-07-06 15:59:34

A. Android中的Activity詳解--啟動模式與任務棧

目錄

activity的簡單介紹就不寫了,作為最常用的四大組件之一,肯定都很熟悉其基本用法了。

首先,是都很熟悉的一張圖,即官方介紹的Activity生命周期圖.

情景:打開某個應用的的FirstActivity調用方法如下:
由於之前已經很熟悉了,這里就簡單貼一些圖。

按下返回鍵:

重新打開並按下home鍵:

再重新打開:

在其中打開一個DialogActivity(SecondActivity)

按下返回:

修改SecondAcitvity為普通Activity,依舊是上述操作:

這里強調一下 onSaveInstanceState(Bundle outState) 方法的調用時機:
當Activity有可能被系統殺掉時調用,注意,一定是被系統殺掉,自己調用finish是不行的。
測試如下:FirstActivity啟動SecondActivity:

一個App會包含很多個Activity,多個Activity之間通過intent進行跳轉,那麼原始的Activity就是使用棧這個數據結構來保存的。
Task
A task is a collection of activities that users interact with when performing a certain job. The activities are arranged in a stack (the back stack ), in the order in which each activity is opened.
即若干個Activity的集合的棧表示一個Task。
當App啟動時如果不存在當前App的任務棧就會自動創建一個,默認情況下一個App中的所有Activity都是放在一個Task中的,但是如果指定了特殊的啟動模式,那麼就會出現同一個App的Activity出現在不同的任務棧中的情況,即會有任務棧中包含來自於不同App的Activity。

標准模式,在不指定啟動模式的情況下都是以此種方式啟動的。每次啟動都會創建一個新的Activity實例,覆蓋在原有的Activity上,原有的Activity入棧。
測試如下:在FirstActivity中啟動FirstActivity:

當只有一個FirstActivity時堆棧情況:

此種模式下,Activity在啟動時會進行判斷,如果當前的App的棧頂的Activity即正在活動的Activity就是將要啟動的Activity,那麼就不會創建新的實例,直接使用棧頂的實例。
測試,設置FirstActivity為此啟動模式,多次點擊FirstActivity中的啟動FirstActivity的按鈕查看堆棧情況:
(其實點擊按鈕沒有啟動新Activity的動畫就可以看出並沒有啟動新Activity)

大意就是:
對於使用singleTop啟動或Intent.FLAG_ACTIVITY_SINGLE_TOP啟動的Activity,當該Activity被重復啟動(注意一定是re-launched,第一次啟動時不會調用)時就會調用此方法。
且調用此方法之前會先暫停Activity也就是先調用onPause方法。
而且,即使是在新的調用產生後此方法被調用,但是通過getIntent方法獲取到的依舊是以前的Intent,可以通過setIntent方法設置新的Intent。
方法參數就是新傳遞的Intent.

1.如果是同一個App中啟動某個設置了此模式的Activity的話,如果棧中已經存在該Activity的實例,那麼就會將該Activity上面的Activity清空,並將此實例放在棧頂。
測試:SecondActivity啟動模式設為singleTask,啟動三個Activity:

這個模式就很好記,以此模式啟動的Activity會存放在一個單獨的任務棧中,且只會有一個實例。
測試:SecondActivity啟動模式設為singleInstance

結果:

顯然,啟動了兩次ThirdActivity任務棧中就有兩個實例,而SecondActivity在另外一個任務棧中,且只有一個。

在使用Intent啟動一個Activity時可以設置啟動該Activity的啟動模式:
這個屬性有很多,大致列出幾個:

每個啟動的Activity都在一個新的任務棧中

singleTop

singleTask

用此種方式啟動的Activity,在它啟動了其他Activity後,會自動finish.

官方文檔介紹如下:

這樣看來的話,通俗易懂的講,就是給每一個任務棧起個名,給每個Activity也起個名,在Activity以singleTask模式啟動時,就檢查有沒有跟此Activity的名相同的任務棧,有的話就將其加入其中。沒有的話就按照這個Activity的名創建一個任務棧。
測試:在App1中設置SecondActivity的taskAffinity為「gsq.test」,App2中的ActivityX的taskAffinity也設為「gsq.test」

任務棧信息如下:

結果很顯然了。
測試:在上述基礎上,在ActivityX中進行跳轉到ActivityY,ActivityY不指定啟動模式和taskAffinity。結果如下:

這樣就沒問題了,ActivityY在一個新的任務棧中,名稱為包名。
這時從ActivityY跳轉到SecondActivity,那應該是gsq.test任務棧只有SecondActivity,ActivityX已經沒有了。因為其啟動模式是singleTask,在啟動它時發現已經有一個實例存在,就把它所在的任務棧上面的Activity都清空了並將其置於棧頂。

還有一點需要提一下,在上面,FirstActivity是App1的lunch Activity,但是由於SecondActivity並沒有指定MAIN和LAUNCHER過濾器,故在FirstActivity跳轉到SecondActivity時,按下home鍵,再點開App1,回到的是FirstActivity。

大致就先寫這么多吧,好像有點長,廢話有點多,估計也有錯別字,不要太在意~~~

B. android怎麼設置activity為對話框模式

將activity設置成對話框樣式,只需在activity屬性裡面增加下面一句代碼:
然後可以activity左邊增加一個小圖片,讓它更像dialog,代碼如下:
但是上面的設置往往還不能滿足實際需求,因為樣子、背景和一些屬性使用的默認的,下面使用style自定義一個,以後可以根據實際需要自行更改:

C. Android UI開發中,設置Activity的什麼屬性可以使Activity顯示為對話框樣式.

將activity設置成對話框樣式,只需在activity屬性裡面增加下面一句代碼:

D. android 里如何設置Activity標題的背景

設置Android的Activity標題的背景是有多種方法的

首先最簡單的是直接在布局裡面設置個background

其中background是可以直接使用顏色或者圖片或者是自定義的形狀

還有就是可以利用Android:theme 自帶的主題背景設置

設置theme更改主題背景

下面是自帶的theme說明文檔

Android應用開發——系統自帶樣式Android:theme

•android:theme="@android:style/Theme.Dialog"將一個Activity顯示為能話框搜握模式
•android:theme="@android:style/Theme.NoTitleBar"不顯示應用程序標題欄
•android:theme="@android:style/Theme.NoTitleBar.Fullscreen"不顯示應用程序標題欄,並全屏
•android:theme="Theme.Light"背景為白色
•android:theme="Theme.Light.NoTitleBar"白色背景並無標題欄
•android:theme="Theme.Light.NoTitleBar.Fullscreen"白色背景,無標題欄,全屏
•android:theme="Theme.Black"背景黑色
•android:theme="Theme.Black.NoTitleBar"黑色背景並無標題欄
•android:theme="Theme.Black.NoTitleBar.Fullscreen"黑色背景,無標題欄,全屏
•android:theme="Theme.Wallpaper"用系統桌面為應用程序背迅游景
•android:theme="Theme.Wallpaper.NoTitleBar"用系統桌面為應用程序背景,且無標題欄
•android:theme="Theme.Wallpaper.NoTitleBar.Fullscreen"用系統桌面為應用程序背景,無標題欄,全屏
•android:theme="Translucent"
•android:theme="Theme.Translucent.NoTitleBar"
•android:theme="Theme.Translucent.NoTitleBar.Fullscreen"
•android:theme="世昌慶Theme.Panel"
•android:theme="Theme.Light.Panel"

下面看看具體的布局代碼


android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:layout_gravity="center"
android:orientation="vertical"
android:background="@drawable/bkg_img_default">
<!--使用圖片來改變布局背景-->

效果

java">//這個去除標題的代碼一定要載入布局文件之前
requestWindowFeature(Window.FEATURE_NO_TITLE);

E. android裡面有多個activity如何設置一個為主界面上的activity

答:首先打開AndroidManifest.xml配置文件,在AndroidManifest.xml里修改
找到activity標簽,添加如下內容

<activity

android:name=".CdBusSearchActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".BusInfoActivity"/>

F. android裡面有多個activity如何設置一個為主界面上的activity

在Application標簽下配置
<activity
android:name=".XXXActivity"
android:label="@string/XXXName">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
應用啟動的時候就會進入XXXActivity。最要是要在activity 里設置 <category android:name="android.intent.category.LAUNCHER" />

G. Android設置Activity背景為透明style的方法

1.設置Theme.Translucent

只需要在Manifest中需要透明的Activity內設置theme為以上任意一個就可以了

2.在Activity的layout.xml文件中,設置父布局背景透明度(不設置背景色默認全透明),不設置透明度看不出效果,如果子控制項設置了背景色且不透明,則子控制項所佔位置無透明效果。

3.效果圖

1.使用自定義的Theme

2.在res-values-styles.xml中添加MyTransparent

3.在res-values-colors.xml中添加透明顏色值

4.以上步驟設置完成和方法一有同樣的效果,省去了在layout.xml設置透明背景色(如果在布局中頁設置了背景色,將以布局中的為准)。方法二相對靈活一點,可以多設置一些屬性,如模糊背景:

熱點內容
bi可視化php 發布:2025-02-06 13:50:15 瀏覽:929
shell寫腳本文件 發布:2025-02-06 13:47:32 瀏覽:229
健身器材腳本 發布:2025-02-06 13:46:36 瀏覽:854
怎麼從手機里卸載存儲卡 發布:2025-02-06 13:35:04 瀏覽:641
誅仙青雲志2ftp 發布:2025-02-06 13:34:48 瀏覽:31
mill91編程 發布:2025-02-06 13:10:27 瀏覽:291
華為平板怎麼儲存伺服器文件 發布:2025-02-06 12:49:21 瀏覽:481
php查詢結果數組 發布:2025-02-06 12:31:05 瀏覽:717
怎樣把照片壓縮打包 發布:2025-02-06 12:15:19 瀏覽:498
如何編譯java文件 發布:2025-02-06 12:05:58 瀏覽:237