當前位置:首頁 » 安卓系統 » android按鍵處理

android按鍵處理

發布時間: 2023-02-13 21:59:16

安卓手機怎麼設置下面的三個按鍵

安卓手機下面三個鍵調出方法如下(以華為nova8手機為例):

1、解鎖手機,在設置里點擊「系統和更新」選項。

2、在系統和更新界面點擊「系統導航方式」選項。

3、在系統導航方式界面點擊「屏幕內導航」右側的開關。

4、打開「屏幕三鍵導航」開關後即可看到手機屏幕下方的三個按鈕,三角形按鈕是返回鍵。

安卓(Android)是一種基於Linux內核(不包含GNU組件)的自由及開放源代碼的操作系統,主要使用於移動設備,如智能手機和平板電腦,由美國Google公司和開放手機聯盟領導及開發,Android操作系統最初由安迪魯賓開發,主要支持手機。

安卓系統的優勢

開放性:在優勢方面,Android平台首先就是其開放性,開發的平台允許任何移動終端廠商加入到Android聯盟中來,顯著的開放性可以使其擁有更多的開發者,隨著用戶和應用的日益豐富,一個嶄新的平台也將很快走向成熟。

豐富的硬體:這一點還是與Android平台的開放性相關,由於Android的開放性,眾多的廠商會推出千奇百怪,功能特色各具的多種產品。功能上的差異和特色,卻不會影響到數據同步、甚至軟體的兼容,如同從諾基亞Symbian風格手機一下改用蘋果iPhone,同時還可將Symbian中優秀的軟體帶到iPhone上使用、聯系人等資料更是可以方便地轉移。

以上內容參考:網路—安卓系統

Ⅱ 關於Android中的軟鍵盤

原文鏈接:徹底搞定Android開發中軟鍵盤的常見問題
軟體盤的本質是什麼?軟鍵盤其實是一個Dialog。

InputMethodService為我們的輸入法創建了一個Dialog,並且將該Dialog的Window的某些參數(如Gravity)進行了設置,使之能夠在底部或者全屏顯示。當我們點擊輸入框時,系統對活動主窗口進行調整,從而為輸入法騰出相應的空間,然後將該Dialog顯示在底部,或者全屏顯示。
軟鍵盤顯示的調整
Android 定義了一個屬性,名字為windowSoftInputMode, 這個屬性用於設置Activity主窗口與軟鍵盤的交互模式,用於避免軟鍵盤遮擋內容的問題。我們可以在AndroidManifet.xml中對Activity進行設置。如:android:windowSoftInputMode=」stateUnchanged|adjustPan」。 該屬性可選的值有兩部分,一部分為軟鍵盤的狀態控制,控制軟鍵盤是隱藏還是顯示,另一部分是Activity窗口的調整,以便騰出空間展示軟鍵盤。 android:windowSoftInputMode的屬性設置必須是下面中的一個值,或一個」state」值加一個」adjust」值的組合,各個值之間用 | 分開。
stateUnspecified-未指定狀態 :當我們沒有設置android:windowSoftInputMode屬性的時候,軟體默認採用的就是這種交互方式,系統會根據界面採取相應的軟鍵盤的顯示模式。
stateUnchanged-不改變狀態 :當前界面的軟鍵盤狀態,取決於上一個界面的軟鍵盤狀態,無論是隱藏還是顯示。
stateHidden-隱藏狀態 :當設置該狀態時,軟鍵盤總是被隱藏,不管是否有輸入的需求。
stateAlwaysHidden-總是隱藏狀態 :當設置該狀態時,軟鍵盤總是被隱藏,和stateHidden不同的是,當我們跳轉到下個界面,如果下個頁面的軟鍵盤是顯示的,而我們再次回來的時候,軟鍵盤就會隱藏起來。
stateVisible-可見狀態 :當設置為這個狀態時,軟鍵盤總是可見的,即使在界面上沒有輸入框的情況下也可以強制彈出來出來。
stateAlwaysVisible-總是顯示狀態 :當設置為這個狀態時,軟鍵盤總是可見的,和stateVisible不同的是,當我們跳轉到下個界面,如果下個頁面軟鍵盤是隱藏的,而我們再次回來的時候,軟鍵盤就會顯示出來。
adjustUnspecified-未指定模式 :設置軟鍵盤與軟體的顯示內容之間的顯示關系。當你跟我們沒有設置這個值的時候,這個選項也是默認的設置模式。在這中情況下,系統會根據界面選擇不同的模式。
adjustResize-調整模式 :該模式下窗口總是調整屏幕的大小用以保證軟鍵盤的顯示空間;這個選項不能和adjustPan同時使用,如果這兩個屬性都沒有被設置, 系統會根據窗口中的布局自動選擇其中一個
adjustPan-默認模式 :該模式下通過不會調整來保證軟鍵盤的空間,而是採取了另外一種策略,系統會通過布局的移動,來保證用戶要進行輸入的輸入框肯定在用戶的視野范圍裡面,從而讓用戶可以看到自己輸入的內容。

案例
沒有滾動布局xml

對於沒有滾動控制項的布局來說,adjustPan就是默認的設置,比如我們案例應用中的文本輸入8,上面的文本輸入框123和按鈕都會被頂上去,且頁面布局不可以滾動。

對於沒有滾動控制項的布局來說,整個布局會網上偏移(包括標題等)以保證輸入框的可見。如果有滾動控制項,那麼就是內容網上偏移,標題不會動,還可以通關滾動來查看被頂上去的內容,而這點是不可滾動的布局所不具備的

有滾動布局xml

對於有滾動控制項的布局,則是採用的adjustResize方式,比如我們案例應用中的文本輸入8,上面的文本輸入框123和按鈕都會被頂上去, 可以通過滾動來查看被頂上去的內容。

** 根據這一原理,我們就可以把開發中遇到的軟鍵盤遮擋頁面的問題,利用ScrollView當做根布局,讓系統採用adjustResize模式,很好地解決這一問題。**

自動彈出軟鍵盤
有時候需要一進入Activity後就自動彈出軟鍵盤,可以通過設置一個時間函數來實現,具體寫法如下:
方法一:

方法二:

有時進入Activity後不希望系統自動彈出軟鍵盤,我們可以按照下面的方法來實現:
方法一:
在AndroidMainfest.xml中選擇那個activity,設置windowSoftInputMode屬性為adjustUnspecified|stateHidden

方法二:
讓EditText失去焦點,使用EditText的clearFocus方法

方法三:
強制隱藏Android輸入法窗口

方法四:
EditText始終不彈出軟體鍵盤

EditText設置ScrollView壓縮背景圖片解決辦法
在你的Activity里加上

有時希望根據條件動態關閉軟鍵盤,我們可以使用InputMethodManager類,按照下面的方法來實現:
方法一:

方法二:
強制隱藏軟鍵盤,這個方法倒是很實用。

方法三:

方法四:

在onclick事件下.以下方法可行.(如果是EditText失去焦點/得到焦點,沒有效果)

InputMethodManager的具體用法可以參考下面的鏈接: http://www.apihome.cn/api/android/InputMethodManager.html

使用android:imeOptinos可對Android自帶的軟鍵盤進行一些界面上的設置:

android:imeOptions="flagNoExtractUi" //使軟鍵盤不全屏顯示,只佔用一部分屏幕

同時,這個屬性還能控制項軟鍵盤右下角按鍵的顯示內容,默認情況下為回車鍵
android:imeOptions="actionNone" //輸入框右側不帶任何提示 android:imeOptions="actionGo" //右下角按鍵內容為'開始' android:imeOptions="actionSearch" //右下角按鍵為放大鏡圖片,搜索 android:imeOptions="actionSend" //右下角按鍵內容為'發送' android:imeOptions="actionNext" //右下角按鍵內容為'下一步' android:imeOptions="actionDone" //右下角按鍵內容為'完成'

同時,可能EditText添加相應的監聽器,捕捉用戶點擊了軟鍵盤右下角按鈕的監聽事件,以便進行處理。

開發中有個需求是將頁面底部的一個按鈕頂起,但是開發時發現Android5.0以後的版本設置了adjustResize屬性後無法成功頂起。糾結了好久,最後在stackoverflow找到解決方案,那就是在根布局上加上fitsSystemWindow=」true」即可。

這里的fitsSystemWindow具體的作用就是你的**contentview是否忽略actionbar,title,屏幕的底部虛擬按鍵,將整個屏幕當作可用的空間。 **
正常情況,contentview可用的空間是去除了actionbar,title,底部按鍵的空間後剩餘的可用區域;這個屬性設置為true,則忽略,false則不忽略

在edittext上加入Android:imeOptions=」actionSearch」這個屬性沒響應,最後發現在2.3及以上版本不起作用,解決方案:加上

因為輸入法鍵盤右下角默認的回車鍵本來就是換行用的,當設置單行後,回車換行就失去作用了,這樣就可以設置為搜索、發送、go等等。

Ⅲ 如何屏蔽Android特殊按鍵事件

會的哪個

Ⅳ android 怎麼改鍵盤按鍵

首先,保證手機已經ROOT,並且安裝了RE文件管理器,先用RE管理器打開system\usr\keylayout下的文件s3c-keypad.kl(以文本編輯方式打開),在目錄中不同的數字對應不同的功能,看好原先對應的功能,在將數字按照喜歡的風格進行重新編寫:
1.
116代表鎖屏鍵
2.
102代表寶石鍵
3.
231代表撥號鍵
4.
217代表相機上面的鍵
5.
26代表掛機鍵
6.
115代表音量+
7.
114代表音量-
8.
158代表相機鍵
9.
改完立刻重啟就OK了。

Ⅳ Android自定義軟鍵盤

Android自定義鍵盤的使用

1、新建一個xml文件夾放在res目錄下面,然後新建xml文件:money_keyboard.xml
2、然後在XML文件中添加按鈕布局,這個布局就是鍵盤的樣子了

3 屬性介紹:
Keyboard:
存儲鍵盤以及按鍵相關信息。
android:horizontalGap
按鍵之間默認的水平間距。
android:verticalGap
按鍵之間默認的垂直間距。
android:keyHeight
按鍵的默認高度,以像素或顯示高度的百分比表示。
android:keyWidth:
按鍵的默認寬度,以像素或顯示寬度的百分比表示。
Row:
為包含按鍵的容器。
Key:
用於描述鍵盤中單個鍵的位置和特性。
android:codes
該鍵輸出的unicode值。
android:codes 官網介紹是說這個是該鍵的unicode 值或者逗號分隔值,當然我們也可以設置成我們想要的值,在源碼中提供了幾個特定的值
對照表:

android:isRepeatable
這個屬性如果設置為true,那麼當長按該鍵時就會重復接受到該鍵上的動作,在 刪除鍵鍵 和 空格鍵 上通常設為true。
android:keyLabel
顯示在按鍵上的文字。
android:keyIcon 與 keyLabel
是二選一關系,它會代替文字以圖標的形式顯示在鍵上。

android:keyWidth="33.33333%p"
每一個按鈕的寬度,可以設置百分比

android:keyHeight="10%p"
每一個按鈕高度,可以設置百分比

KeyboardView是一個渲染虛擬鍵盤的View。 它處理鍵的渲染和檢測按鍵和觸摸動作。
顯然我們需要KeyboardView來對Keyboard里的數據進行渲染並呈現給我們以及相關的點擊事件做處理。 1)//設置keyboard與KeyboardView相關聯的方法。
public void setKeyboard(Keyboard keyboard)
2)//設置虛擬鍵盤事件的監聽,此方法必須設置,不然會報錯。
public void setOnKeyboardActionListener(OnKeyboardActionListener listener) 步驟上呢,做完第一步的關聯,並設置第二步的事件,調用KeyboardView.setVisible(true);鍵盤就可以顯示出來了, 是不是很簡單。不過到這里還沒有結束哦,接下來我們為了使用上的便利要進行相應的封裝。 封裝 這里我們通過繼承EditText來對Keyboard與KeyboardView進行封裝。
attr.xml文件,這里我們需要通過一個xml類型的自定義屬性引入我們的鍵盤描述文件。

1、新建一個類,我取名叫KeyUtils然後在裡面新建三個屬性。KeyBoard用處可大了,他才是本體,可以通過設置他來切換鍵盤。
2、構造函數,初始下三個參數。
3、先說下預覽圖吧,就是效果圖上的預覽圖,需要預覽圖的話的將setPreviewEnabled設置為true,不過還得在布局文件中的android.inputmethodservice.KeyboardView標簽對立面設置預覽布局。否則,不會有字。至於設置的布局,一個TextView就好了~

onPress: 按下觸發。
onRelease:松開觸發。
onKey : 松開觸發,在OnRelease之前觸發。
swipeLeft : 左滑動,其他同理。哈哈~就這么懶。
onText :需要在 鍵盤xml,也就是我此時的number.xml裡面中key標簽對里添加一個

Ⅵ Android TV按鍵焦點原理淺談

原文鏈接: Android TV按鍵焦點原理淺談

本篇主要閱讀 Android 源碼講解 TV 的按鍵事件分發原理和焦點查找原理,源碼基於 Android9.0 ,首先思考幾個問題:

帶著這些問題,我們一起來擼 Android 源碼吧!了解了系統是如何處理的有便於我們解決 TV 上一些按鍵和焦點的問題。

首先我們看下按鍵事件的入口 ViewRootImpl 類中的 ViewPostImeInputStage 內部類:

可以看到注釋1,2,3,4分別判斷不同事件執行不同方法,本篇主要討論的TV焦點事件,主要看下 processKeyEvent 方法:

可以看到在該方法中執行了 mView.dispatchKeyEvent 方法,這里的 View 其實是 DecorView ,接著看下該方法:

上面首先判斷了如果是第一次按下則處理panel的快捷鍵,如果處理了則不往下走,否則繼續判斷當窗口未銷毀且回調非空則回調處理,如果處理了則不往下走,否則讓 PhoneWindow 對應的 onKeyDown , onKeyUp 方法來處理。

接下來我們按照這個派發順序依次來看看相關方法的實現,這里先看看 Activity 的 dispatchKeyEvent 實現:

我們看第1點 superDispatchKeyEvent 方法,可以看到該方法為一個抽象方法,而它的實現是實現它的子類 PhoneWindow :

該方法又回調用 DecorView 中的 superDispatchKeyEvent 方法:

此時,再來看下 ViewGroup 的 dispatchKeyEvent 方法:

接著看下 View 的 dispatchKeyEvent 方法:

該方法主要是判斷如果有給 View 設置 OnKeyListener 事件且 View 為可用狀態,則優先處理監聽事件,其次調用 KeyEvent 的 dispatch 方法,接下來我們看下該方法:

該方法主要處理了按下、彈起事件,其中按下如果 mRepeatCount 重復次數大於0判斷為長按,則執行長按事件。

我們繼續看下 View 的 onKeyDown 方法:

按下事件判斷了如果為確認相關的按鍵才到下一步處理,判斷點擊或長按條件滿足,執行按下 View 正中心坐標,然後執行 checkForLongClick 檢查長按方法,看下該方法如下:

我們經常會遇到電視按遙控器時長按會執行一次 onKeyDown 、 onKeyUp ,之後才是一直 onKeyDown ,松開後才執行 onKeyUp ,原因就在於這個檢查長按方法是延遲的。 delayOffset 傳進來的是0,所以延遲時間為 ViewConfiguration.getLongPressTimeout() ,即該類中定義的 DEFAULT_LONG_PRESS_TIMEOUT 常量。

同樣的如果是觸摸屏,可以看下 View 類中的 onTouchEvent 方法在按下操作的時候會開啟 CheckForTap 線程檢查是否是長按,該線程同樣是延遲的,時間為 ViewConfiguration.getTapTimeout() ,即該類中的 TAP_TIMEOUT 常量,知道了這個你就知道如果寫腳本或插件模擬長按應該間隔多長時間了,是不是一下你的模擬長按插件速度又可以更加准確快速的實現了。

不同版本系統定義的延遲時間有可能不一樣,比如Google API 28 的 DEFAULT_LONG_PRESS_TIMEOUT 是500, TAP_TIMEOUT 是100,而 API 30 的 DEFAULT_LONG_PRESS_TIMEOUT 是400, TAP_TIMEOUT 也是100。

接下來再看下 Activity 的 onKeyDown :

回到 Decorview 中的 dispatchKeyEvent 方法看看 PhoneWindow 的 onKeyDown 方法:

onKeyUp 方法也可以自己再看下,以上就是淺談按鍵事件的分發流程了。

總結:

上面講解了按鍵事件分發流程,當上面分發完所有都沒消費的時候,就會繼續走 ViewRootImpl 的焦點導航流程,接下來看下 performFocusNavigation 方法:

首先我們看 mView.findFocus() ,該方法實際是調用了 ViewGroup 的 findFocus 方法:

該方法很簡單,就是向下遞歸查找在當前頁面已經獲取焦點的 View ,繼續看 focused.focusSearch(direction) 調用了 View 的 focusSearch 方法:

該方法向上遞歸查找,調用 ViewGroup 的 focusSearch 方法:

如果是根命名空間,則調用 FocusFinder 的 findNextFocus 方法查找焦點,否則繼續往上查找。繼續看 FocusFinder 的 findNextFocus 方法:

可以看到該方法首先查找用戶指定的下一個獲取焦點的 view ,如果找到了直接返回該 view ,如果沒找到繼續下面先添加 effectiveRoot 下的所有 view 到 focusables 集合中去,然後調用 findNextFocus 方法查找系統可獲取下一個焦點的最近 view 。

我們先看下 findNextUserSpecifiedFocus 方法的實現:

通過用戶指定焦點方式不是本篇的重點,這里就不貼出內部細節源碼了。該方法實際就是調用 View 的 findUserSetNextFocus 方法來查找用戶設置的下一個可獲取焦點的 view ,然後在 while 循環中判斷如果找到的是可以獲取焦點並且可見的並且不是 InTouchNode 模式,則返回該焦點,否則繼續循環查找直到找了一個循環沒有找到可以獲取焦點的或者 userSetNextFocus 為 null 跳出循環返回 null 。

再來看下系統就近原則查找的 findNextFocus 方法:

該方法主要通過 在相對方向上找下一個焦點,該方法內部邏輯比較簡單,這里就不貼出來了,進去看下就知道其實就是先給 focusables 排序,然後從中找到 focused 在其中的後一個或前一個 view ,如果沒找到並且 focusables 不為空則返回 focusables 的第一個。

接下來我們重點看下 方法:

再看下 isBetterCandidate 方法,該方法很關鍵,內部包含一系列邏輯如何成為最佳候選者:

該方法英文注釋很直觀,就不中文翻譯了,首先看下成為候選人的 isCandidate 方法:

該方法判斷了目標Rect如果在源Rect的方向一側且不在內部的話,則為候選者,如第一個 destRect 左側應在 srcRect 左側左邊, destRect 右側應在 srcRect 右側左邊,其他方向同理。

接下來看下 beamBeats 方法:

Ⅶ android fragment 中怎麼處理按鍵事件dispatchkeyevent

fragment里不能寫dispatchkeyevent
可以在啟動fragment的activity里寫一個回調方法

public interface MyTouchListener
{
public void onTouchEvent(MotionEvent event);
}
/*
* 保存MyTouchListener介面的列表
*/
private ArrayList<MyTouchListener> myTouchListeners = new ArrayList<MyActivity.MyTouchListener>();

/**
* 提供給Fragment通過getActivity()方法來注冊自己的觸摸事件的方法
* @param listener
*/
public void registerMyTouchListener(MyTouchListener listener)
{
myTouchListeners.add(listener);
}

/**
* 提供給Fragment通過getActivity()方法來取消注冊自己的觸摸事件的方法
* @param listener
*/
public void unRegisterMyTouchListener(MyTouchListener listener)
{
myTouchListeners.remove(listener);
}

/**
* 分發觸摸事件給所有注冊了MyTouchListener的介面
*/
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
// TODO Auto-generated method stub
for (MyTouchListener listener : myTouchListeners) {
listener.onTouchEvent(ev);
}
return super.dispatchTouchEvent(ev);

}

然後在fragment中注冊使用這個方法
/**
* Fragment中,注冊
* 接收ChatActivity的Touch回調的對象
* 重寫其中的onTouchEvent函數,並進行該Fragment的邏輯處理
*/
private MyActivity.MyTouchListener mTouchListener = new ChatActivity.MyTouchListener() {
@Override
public void onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
//邏輯處理
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
if (vTracker == null) {
vTracker = VelocityTracker.obtain();
} else {
vTracker.clear();
}
vTracker.addMovement(event);
break;
case MotionEvent.ACTION_MOVE:
vTracker.addMovement(event);

break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
try{
vTracker.recycle();
}catch (Exception e){
e.printStackTrace();
}

break;
}
}
};

注意,要在fragment的onAttach方法中注冊回調
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
//在該Fragment的構造函數中注冊mTouchListener的回調
if(mTouchListener!=null){
if(getActivity()!=null){
((MyActivity)getActivity()).registerMyTouchListener(mTouchListener);
}
}
}

Ⅷ 如何捕獲android系統按鍵事件

下面是android學習手冊中關於按鍵的介紹,例子,文檔、源碼都可以看,360手機助手中下載

在Android系統中,存在多種界面事件,如點擊事件、觸摸事件、焦點事件和菜單事件等,在這些界面事件發生時,Android界面框架調用界面控制項的事件處理方法對事件進行處理。
Android系統界面事件的傳遞和處理遵循以下規則。
·如果界面控制項設置了事件監聽器,則事件將先傳遞給事件監聽器。
·如果界面控制項沒有設置事件監聽器,界面事件則會直接傳遞給界面控制項的其他事件處理方法。
·即使界面控制項設置了事件監聽器,界面事件也可以再次傳遞給其他事件處理方法。
·是否繼續傳遞事件給其他處理方法是由事件監聽器處理方法的返回值決定的。
·如果監聽器處理方法的返回值為true,表示該事件已經完成處理過程,不需要其他處理方法參與處理過程,這樣事件就不會再繼續進行傳遞。
·如果監聽器處理方法的返回值為false,則表示該事件沒有完成處理過程,或需要其他處理方法捕獲到該事件,事件會被傳遞給其他的事件處理方法。
在MVC模型中,控制器根據界面事件(UI Event)類型不同,將事件傳遞給界面控制項不同的事件處理方法。
·按鍵事件(KeyEvent)將傳遞給onKey()方法進行處理。
·觸摸事件(TouchEvent)將傳遞給onTouch()方法進行處理。
下面以EditText控制項中的按鍵事件為例,說明Android系統界面事件傳遞和處理過程。
假設EditText控制項已經設置了按鍵事件監聽器,當用戶按下鍵盤上的某個按鍵時,控制器將產生KeyEvent按鍵事件。Android系統會首先判斷EditText控制項是否設置了按鍵事件監聽器,因為EditText控制項已經設置按鍵事件監聽器OnKeyListener,所以按鍵事件先傳遞到監聽器的事件處理方法onKey()中,事件能夠繼續傳遞給EditText控制項的其他事件處理方法,完全根據onKey()方法的返回值來確定:如果onKey()方法返回false,事件將繼續傳遞,這樣EditText控制項就可以捕獲到該事件,將按鍵的內容顯示在EditText控制項中;如果onKey()方法返回true,將阻止按鍵事件的繼續傳遞,這樣EditText控制項就不能夠捕獲到按鍵事件,也就不能夠將按鍵內容顯示在EditText控制項中。
Android界面框架支持對按鍵事件的監聽,並能夠將按鍵事件的詳細信息傳遞給處理方法。為了處理控制項的按鍵事件,先需要設置按鍵事件的監聽器,並重載onKey()方法,示例代碼如代碼清單1所示。
代碼清單1 設置按鍵事件的監聽器,並重載onKey()方法
entryText.setOnKeyListener(new OnKeyListener(){
@Override
public boolean onKey(View view, int keyCode, KeyEvent keyEvent) {
//過程代碼……
return true/false;
}
第1行代碼是設置控制項的按鍵事件監聽器。
第3行代碼的onKey ()方法中的參數:第1個參數View表示產生按鍵事件的界面控制項;第2個參數keyCode表示按鍵代碼;第3個參數KeyEvent則包含了事件的詳細信息,如按鍵的重復次數、硬體編碼和按鍵標志等。
第5行代碼是onKey()方法的返回值:返回true,阻止事件傳遞;返回false,允許繼續傳遞按鍵事件。
KeyEventDemo是一個說明如何處理按鍵事件的示例。
KeyEventDemo用戶界面如圖1所示。

圖1 KeyEventDemo用戶界面
從圖5-27中可以看出,最上方的EditText控制項是輸入字元的區域,中間的CheckBox控制項用來控制onKey()方法的返回值,最下方的TextView控制項用來顯示按鍵事件的詳細信息,包括按鍵動作、按鍵代碼、按鍵字元、UNICODE編碼、重復次數、功能鍵狀態、硬體編碼和按鍵標志。
界面的XML文件的代碼如代碼清單2所示
代碼清單2 界面XML文件
<EditText android:id="@+id/entry"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</EditText>
<CheckBox android:id="@+id/block"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="返回true,阻止將按鍵事件傳遞給界面元素" >
</CheckBox>
<TextView android:id="@+id/label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按鍵事件信息" >
</TextView>
在EditText中,當任何一個鍵按下或抬起時,都會引發按鍵事件。為了能夠使EditText處理按鍵事件,需要使用setOnKeyListener ()方法在代碼中設置按鍵事件監聽器,並在onKey()方法中添加按鍵事件的處理過程,代碼如代碼清單3所示。
代碼清單3 setOnKeyListener()
entryText.setOnKeyListener(new OnKeyListener(){
@Override
public boolean onKey(View view, int keyCode, KeyEvent keyEvent) {
int metaState = keyEvent.getMetaState();
int unicodeChar = keyEvent.getUnicodeChar();
String msg = "";
msg +="按鍵動作:" + String.valueOf(keyEvent.getAction())+" ";
msg +="按鍵代碼:" + String.valueOf(keyCode)+" ";
msg +="按鍵字元:" + (char)unicodeChar+" ";
msg +="UNICODE:" + String.valueOf(unicodeChar)+" ";
msg +="重復次數:"+ String.valueOf(keyEvent.getRepeatCount())+" ";
msg +="功能鍵狀態:" + String.valueOf(metaState)+" ";
msg +="硬體編碼:" + String.valueOf(keyEvent.getScanCode())+" ";
msg +="按鍵標志:" + String.valueOf(keyEvent.getFlags())+" ";
labelView.setText(msg);
if (checkBox.isChecked())
return true;
else
return false;
}
在上述代碼中,第4行代碼用來獲取功能鍵狀態。功能鍵包括左Alt鍵、右Alt鍵和Shift鍵,當這3個功能鍵被按下時,功能鍵代碼metaState值分別為18、34和65;但沒有功能鍵被按下時,功能鍵代碼metaState值分別為0。
第5行代碼獲取了按鍵的Unicode值,而在第9行中,將Unicode轉換為了字元,顯示在TextView中。
第7行代碼獲取了按鍵動作,0表示按下按鍵,1表示抬起按鍵。第7行代碼獲取按鍵的重復次數,但當按鍵被長時間按下時,則會產生這個屬性值。
第13行代碼獲取了按鍵的硬體編碼,各硬體設備的按鍵硬體編碼都不相同,因此該值一般用於調試。
第14行獲取了按鍵事件的標志符。

Ⅸ 市面上有一款android的按鍵精靈,他是基於什麼原理實現的實現

基於Lua腳本語言。

觸動精靈的腳本編寫基於Lua腳本語言,支持其所有標准函數庫。除了能夠模擬點擊、移動、單擊 Home鍵之外,觸動精靈還提供一系列取色、找色、截圖、找圖等函數,更有豐富的網路插件、文件操作插件可供選擇,腳本作者可以選擇不公開源代碼發布自己的腳本。

通過製作腳本,可以讓觸動精靈代替雙手,自動執行一系列觸摸、按鍵操作。觸動精靈簡單、易用,不需要掌握任何編程知識就可以錄制出功能強大的腳本;還可以使用編程知識,編寫出功能更為復雜,交互更為靈活的腳本。

(9)android按鍵處理擴展閱讀:

觸動精靈簡單、易用,不需要掌握任何編程知識就可以錄制出功能強大的腳本 。

還可以使用編程知識,編寫出功能更為復雜,交互更為靈活的腳本。

只要能夠在手機上完成的人為操作,觸動精靈都可以代替完成,不僅省力,而且高效。

Lua腳本語言的其他應用:

1、很多應用程序、游戲使用LUA作為自己的嵌入式腳本語言,以此來實現可配置性、可擴展性。這其中包括魔獸世界、博德之門、憤怒的小鳥、QQ三國、VOCALOID3、Garry's Mod、太陽神三國殺、游戲王ygocore和飢荒等。

2、同時支持面向過程(procere-oriented)編程和函數式編程(functional programming);自動內存管理;只提供了一種通用類型的表(table),用它可以實現數組,哈希表,集合,對象。

3、使用Lua語言編寫的第三方插件可以通過第三方腳本載入器插件FlyWithLua載入,讓插件開發者可以輕松地編寫功能強大的插件用以增強X-Plane的模擬效果。

Ⅹ Flutter開發之Android物理按鍵返回

在flutter開發過程中,發現Android手機在App首頁點擊物理返回按鈕時,App會退出並且再次點開App時會重新啟動,這代表了上次的退出直接殺死了App,和我們平常的退到手機桌面不同,所以開發了一個單獨插件來處理這種情況。

使用步驟如下:
1、pubspec.yaml文件中引入依賴

2、引用插件

3、使用插件來退出App到桌面,並且保持App後台運行

可根據實際情況在_onWillPop方法中處理相關邏輯,比如連續兩次點擊物理返回按鈕才退出到桌面等。

熱點內容
集成編譯環境是什麼 發布:2025-07-13 19:30:27 瀏覽:688
php判斷字元是否相等 發布:2025-07-13 19:17:21 瀏覽:614
電腦直播唱歌電腦需要什麼配置 發布:2025-07-13 19:03:45 瀏覽:88
config連接資料庫 發布:2025-07-13 19:02:24 瀏覽:953
bt文件解壓 發布:2025-07-13 19:02:16 瀏覽:744
比較便宜的雲伺服器 發布:2025-07-13 18:29:59 瀏覽:406
切換ftp 發布:2025-07-13 18:29:07 瀏覽:738
銳龍哪個配置最高畫質 發布:2025-07-13 18:22:34 瀏覽:196
壓縮機工作原理圖 發布:2025-07-13 18:10:15 瀏覽:39
黑暗追求者安卓怎麼聯機 發布:2025-07-13 18:10:07 瀏覽:617