日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android+第三发输入法控制,android输入法属性使用,软键盘隐藏、显示状态控制大揭秘...

發布時間:2023/12/15 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android+第三发输入法控制,android输入法属性使用,软键盘隐藏、显示状态控制大揭秘... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

經常會遇到需要控制輸入法的情況,如輸入法顯示、隱藏; 輸入法彈出后,界面被頂上去或編輯框被遮擋等問題;下面分為幾個部分總結輸入法屬性設置,及輸入法控制。

一、windowSoftInputMode設置

activity主窗口與軟鍵盤的交互模式,可以用來避免輸入法面板遮擋問題

這個屬性能影響兩件事情:

a. 當有焦點產生時,軟鍵盤是隱藏還是顯示

b. 是否減少活動主窗口大小以便騰出空間放軟鍵盤

【1】 在manifest設置

軟鍵盤顯示或隱藏的屬性有以下幾個選擇:

【A】stateUnspecified:軟鍵盤的狀態(是否它是隱藏或可見)沒有被指定。系統將選擇一個合適的狀態或依賴于主題的設置

【B】stateUnchanged:當這個activity出現時,軟鍵盤將一直保持在上一個activity里的狀態,無論是隱藏還是顯示

【C】stateHidden:當用戶選擇該Activity時,軟鍵盤被隱藏——也就是,當用戶導航到該Activity時,而不是由于離開另一個Activity返回到它。

【D】stateAlwaysHidden:當該Activity主窗口獲取焦點時,軟鍵盤總是被隱藏的;無論是導航到該activity,或是從其他Activity返回到該Activity

stateHidden 與stateAlwaysHidden的區別: 后者,無論何種情況到達該Activity都隱藏輸入法,而前者,只確保首次進入該Activity時隱藏輸入法;

【E】stateVisible:軟鍵盤是可見的,當那個是正常合適的時(當用戶導航到Activity主窗口時)

【F】stateAlwaysVisible:當用戶選擇這個Activity時,軟鍵盤是可見的-- 無論是導航到它,或是由于離開另一個Activity返回到它

這兩者的區別于 hidden和alwaysHiden一樣;

示例:

HomeFragmentActivity的設置:

android:windowSoftInputMode

=

"stateAlwaysHidden|adjustPan" 無論何時到達該界面該界面都隱藏輸入法

FindFriendActivity的設置:

android:windowSoftInputMode

=

"stateVisible|adjustPan", 首次進入該界面時,顯示輸入法; 如果改為

stateAlwaysVisible,那么從其他界面返回該界面時,輸入法也會自動彈出

當前窗口變化模式有以下幾個選擇:

【G】adjustUnspecified:它不被指定是否該Activity主窗口調整大小以便留出軟鍵盤的空間,或是否窗口上的內容得到屏幕上當前的焦點是可見的。系統將自動選擇這些模式中一種主要依賴于是否窗口的內容有任何布局視圖能夠滾動他們的內容。如果有這樣的一個視圖,這個窗口將調整大小,這樣的假設可以使滾動窗口的內容在一個較小的區域中可見的。這個是主窗口默認的行為設置。

【H】adjustResize:該Activity總是調整屏幕的大小以便留出軟鍵盤的空間;即當前窗口的size 會發生變化;

【I】adjustPan:該Activity主窗口并不調整屏幕的大小以便留出軟鍵盤的空間。相反,當前窗口的內容將自動移動以便當前焦點從不被鍵盤覆蓋和用戶能總是看到輸入內容的部分,如果輸入法彈出時,焦點不被覆蓋,那么窗口不會自動移動。這個通常是不期望比調整大小,因為用戶可能關閉軟鍵盤以便獲得與被覆蓋內容的交互操作。

【2】代碼設置

windowSoftInputMode也可以在代碼中設置,效果一樣

二、控制輸入法隱藏、顯示 狀態

除了進入Activity時,控制輸入法的顯示/隱藏狀態,在Activity使用過程中,有時也需要手動控制。

【1】 切換輸入法的顯示/隱藏狀態 :

如果輸入法在窗口上已經顯示,則隱藏,反之則顯示

InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.

INPUT_METHOD_SERVICE

);

imm.toggleSoftInput(0, InputMethodManager.

HIDE_NOT_ALWAYS

);

該方法優點:無需知道當前窗口是否有焦點,也就無需找到該窗口中能獲取焦點的控件了;

該方法缺點:如果事先不確定輸入法是顯示還是隱藏的狀態,那么該方法可能無法達到預期效果; 只有確定當前輸入法的狀態才能使用該方法;

【2】強制彈出輸入法

imm.showSoftInput(

currentfocusedView

, 0);

【3】強制隱藏輸入法

imm.hideSoftInputFromWindow(

currentfocusedView

.getWindowToken(),

0

)

方法【2】、【3】 必須找到當前具有焦點的控件。 如果當前Activity失去焦點

如彈出對話框,則該Activity無法控制輸入法狀態了,即上面的方法不起任何效果

第一個參數

currentfocusedView是當前窗口具有焦點的控件,一般是EditText;

三、監控輸入法是否彈出

android沒有現成的方法告知上層,輸入法的狀態是顯示的還是隱藏的, 但有時需要根據輸入法的狀態進行一些操作,如 “彈幕”界面,當輸入法彈出時,隱藏彈幕面板,反之顯示;

windowSoftInputMod

e屬性中,

adjustResize模式,在輸入法彈出時,會調整界面大小,可以通過界面大小變化來判斷輸入法是否彈出

【1】自定義界面布局根View

onSizeChanged

中監聽大小變化,高度變小,說明輸入法彈出,反之,輸入法隱藏;

public

class

CheckSoftInputLayout

extends

FrameLayout{

private

OnResizeListener

onResizeListener

;

public

interface

OnResizeListener{

void

OnResize(

int

w,

int

h,

int

oldw,

int

oldh);

}

public

CheckSoftInputLayout(Context context, AttributeSet attrs) {

this

(context, attrs, 0);

}

public

CheckSoftInputLayout(Context context, AttributeSet attrs,

int

defStyle) {

super

(context, attrs, defStyle);

}

public

void

setOnResizeListener(OnResizeListener _listener) {

this

.

onResizeListener

= _listener;

}

@Override

protected

void

onSizeChanged(

int

w,

int

h,

int

oldw,

int

oldh) {

super

.onSizeChanged(w, h, oldw, oldh);

if

(

onResizeListener

!=

null

) {

onResizeListener

.OnResize(w, h, oldw, oldh);

}

}

}

【2】在listener事件中處理

Activity代碼:

rootView

.setOnResizeListener(

new

OnResizeListener() {

@Override

public

void

OnResize(

int

w,

int

h,

int

oldw,

int

oldh) {

if

(h < oldh) {

//輸入法彈出

//todo

}

else

{

//輸入法關閉

//todo

}

}

});

注意:在manifest.xml中,activity的

windowSoftInputMode必須設置為

adjustResize

總結

以上是生活随笔為你收集整理的android+第三发输入法控制,android输入法属性使用,软键盘隐藏、显示状态控制大揭秘...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。