當前位置:首頁 » 安卓系統 » android窗口

android窗口

發布時間: 2024-07-20 08:58:51

『壹』 Android 輸入法窗口焦點獲取流程(2) ,輸入法窗口和應用窗口綁定

基於Android9.x

Window和Session創建成功後,窗口的下一步流程為獲取焦點
我們看下焦點獲取過程,跟輸入法相關的流程

兩個Activity切換時,對應的狀態變化過程為:

以下是Activity窗口初次獲取焦點的流程

當兩個activity 切換時,失去焦點的窗口調用過程如下:

對應的,獲取焦點的額窗口的調用過程如下:

當B窗口的狀態切換到RESUMED時,當窗口的focus可能變化時,會調用updateFocusedWindowLocked

在該方法中,判斷,如果還沒有執行startInputInner方法,則執行startInputInner方法,否則,直接執行startInputOrWindowGainedFocus方法

主要流程:
1:設置controlFlags的flag為CONTROL_WINDOW_FIRST
2:檢查是否已經執行過startInputInner,沒有的話執行startInputInner-->startInputOrWindowGainedFocus;否則,直接執行startInputOrWindowGainedFocus
兩條路徑,攜帶的startInputReason參數不一樣

主要流程:
1:檢查要啟動和退出的ServedView是否為同一個,如果為同一個,則表示已經執行過startInputInner,則返回false,表示不再執行startInputInner
2:如果獲取焦點的是EditorText,會創建跟IMS通信的mServedInputConnectionWrapper對象

主要流程:
1:創建EditorInfo對象tba,這個參數對TextView布局才有意義,它的初始化是在mServedView的onCreateInputConnection完成實例化的
2:根據EditorInfo創建一個InputConnection對象,輸入法應用通過該對象,完成輸入內容到輸入框的傳遞;ACTIVITY獲取焦點場景,該對象
為null,因為沒有要輸入的對象

startInputOrWindowGainedFocus攜帶的參數

startInputReason = 1

表示,該流程是窗口獲取焦點過程

mClient
應用層創建的IInputMethodClient對象,為服務層提供應用層的各個回調方法
該方法跟應用進程首次創建時Session時,傳遞到IMMS的對象是同一個對象

windowGainingFocus:
應用層的ViewRootImpl$W對象

controlFlags |= CONTROL_START_INITIAL;
表示window窗口剛開始獲取焦點

softInputMode = SOFT_INPUT_ADJUST_RESIZE , 允許調整輸入法窗口,避免被其他窗口遮擋
tba , EditorInfo對象

servedContext
null
missingMethodFlags

ic等於null的情況下,為0

當應用層傳遞的W對象windowToken不為null的時候,則創建windowGainedFocus對象,返回給app

結果返回後,會對IMM的對象進行賦值

如此,進入一個窗口,獲取窗口焦點過程,窗口與輸入法相關的流程,就結束了。

下一篇:輸入法在輸入框彈出流程
Android輸入法(3),彈出流程

『貳』 如何在Android中打開一個窗口

1、 首先在默認工程中新建一個Activity

2、添加動作屬性
在activity_main.xml文件中添加動作動作屬性
android:onClick="OpenNewWindow"

OpenNewWindow是自己取的名字
3、添加動作函數
在MainActivity.java文件中添加:
import android.view.View;
然後在添加:
public void OpenNewWindow(View view){
//打開一個新的窗口

Intent intent = new Intent(this,MainActivity2.class);
startActivity(intent);
Toast.makeText(this, "Toast", Toast.LENGTH_SHORT).show();
}
其中:
Intent intent = new Intent(this,MainActivity2.class);
是定義一個意圖,MainActivity2.class是要打開的窗口
startActivity(intent);
是激活這個意圖
Toast.makeText(this, "Toast", Toast.LENGTH_SHORT).show();
作為調試的時候看的,可以刪除,作用是在屏幕是顯示有沒有啟動這個動作。

請注意,為了讓系統能夠將這個方法與在android:onClick屬性中提供的方法名字匹配,它們的名字必須一致,特別是,這個方法必須滿足以下條件:
公共的
沒有返回值
有一個唯一的視圖(View)參數

使用上述方法添加Activity,在調試的時候需要用Andriod4,在此說明另外一種添加Activity的方法。
雙擊Manifest.xml文件,選中Application選項卡,向下拉,找到Application Nodes,點擊添加,跳出以下對話框:

選擇Activity選項,點擊OK。
然後選中新建的Activity,點擊右邊Name,在彈出的對話框中填入名字就可以了。然後,添加xml文件,名字任意取,當然,最好是同名文件,以後好找,填寫相應文檔既可。
Xml文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity3" >

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/AText1" />

</RelativeLayout>
其中RelativeLayout說明是相對布局。

『叄』 android 怎麼實現窗口化並指定位置顯示app

需要3個軟體: - Xposed 安裝器:在下方下載 - Xhalo Floating Window:在下方下載 - Portal (Floating Apps) [BETA] :在下方下載 然後是下一步:1.安裝Xposed安裝器 2.選 框架——安裝 3.重新啟動 4.安裝Xhalo Floating Window 並在Xpose裡面的模塊裡面勾選上,重啟 5.打開Xhalo Floating Window 選擇MOVABLE那項 選擇成Enable,退出 6.安裝最後一個Portal (Floating Apps) [BETA]7.(MIUI V5系統才需要)在設置——應用裡面找到後面兩個軟體,允許顯示懸浮窗 8.打開Portal (Floating Apps) [BETA]軟體,會在屏幕上出現一個小圓點,長按,之後會出現一個扇形的界面,長按裡面的任何一個小塊,就會出現選擇程序的界面,選擇你想要窗口操作的程序即可 9.長按小圓點,點擊一下你想打開的...

熱點內容
ios應用上傳 發布:2024-09-08 09:39:41 瀏覽:439
ios儲存密碼哪裡看 發布:2024-09-08 09:30:02 瀏覽:873
opensslcmake編譯 發布:2024-09-08 09:08:48 瀏覽:653
linux下ntp伺服器搭建 發布:2024-09-08 08:26:46 瀏覽:744
db2新建資料庫 發布:2024-09-08 08:10:19 瀏覽:173
頻率計源碼 發布:2024-09-08 07:40:26 瀏覽:780
奧迪a6哪個配置帶後排加熱 發布:2024-09-08 07:06:32 瀏覽:101
linux修改apache埠 發布:2024-09-08 07:05:49 瀏覽:209
有多少個不同的密碼子 發布:2024-09-08 07:00:46 瀏覽:566
linux搭建mysql伺服器配置 發布:2024-09-08 06:50:02 瀏覽:995