當前位置:首頁 » 安卓系統 » androidbutton焦點

androidbutton焦點

發布時間: 2023-09-07 21:30:55

⑴ Android中ListView的Item的子控制項獲取焦點問題

ListView默認情況

當item有焦點時,item上的button等子控制項獲取不到焦點;
當子控制項有焦點時,item無焦點無法響應onItemClick事件

ViewGroup.FOCUS_AFTER_DESCENDANTS:表示item的子控制項優先於item獲得焦點;
ViewGroup.FOCUS_BEFORE_DESCENDANTS:表示item優先於其子控制項獲得焦點。

解決辦法:

[java] view plain
listView.setOnItemSelectedListener(onItemSelectedListener);
private AdapterView.OnItemSelectedListener onItemSelectedListener =
new AdapterView.OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
//當此選中的item的子控制項需要獲得焦點時
parent.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
//else parent.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
}

@Override
public void onNothingSelected(AdapterView<?> parent) {
parent.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
}
}

⑵ Android移動應用中的焦點分析

簡單一點理解,在移動應用中,焦點就是當前正在處理事件的位置。在手機應用中,最有可能用到焦點的就是EditText,如果同一個界面中有多個EditText,通常情況下同一時間只有一個能夠輸入內容,此時,這個EditText就獲取了焦點。

在Android中,對焦點的設置分為兩種情況,TouchMode和非TouchMode。現在的手機基本都是觸摸屏,我們用手指觸摸屏幕來操作Android應用時,處於TouchMode。除了TouchMode之外,還有非TouchMode,利用外接設備來操作應用。比如鍵盤。使用Genymotion模擬器的時候,一個界面上有多個控制項時,可以用電腦tab鍵來進行移動,被選中的控制項會高亮顯示,這時候就是非TouchMode,被選中的控制項獲得了焦點。

在手機應用中,用到焦點的時候並不多,但是TV應用中,需要用遙控器來操作選中控制項,這時候就需要對焦點進行處理了。關於焦點,常用方法如下:

在View類中, isFocusable() 和 isFocusableInTouchMode() 獲取到的結果都是false,也就是說,直接繼承自View的控制項是不能獲取焦點的。我們常用控制項中對這兩個方法進行了改寫,比如EditText,這兩個方法都是true,而Button則只有 isFocusable() 返回true。這也就是為什麼我們用tab鍵選取Button的時候能夠高亮顯示,而滑鼠點擊(模擬觸控)的時候不能高亮顯示的原因了。如果想在點擊的時候也能高亮顯示Button,需要手動設置 setFocusableInTouchMode(true) ,就可以了。

如果想對控制項的焦點狀態進行監聽,需要設置 setOnFocusChangeListener() ,只要控制項的焦點狀態發生變化(獲得或者失去焦點),都會調用 onFocusChange 方法

關於焦點的移動,默認的演算法會尋找指定方向上最近的可以獲取焦點的元素(非TouchMode)。另外在創建控制項的時候,也可以指定尋找焦點的方向,設置nextFocusDown、nextFocusLeft、nextFocusRight 和 nextFocusUp的值為指定元素就可以了。看以下例子:

這里指定了上面的button向上尋找焦點時,下一個元素是id為bottom的元素,也就是說,上面的Button在獲取了焦點之後,繼續按向上鍵,系統會將焦點移動到id為bottom的元素上,而不是繼續向上。

在開發手機應用的過程中,對焦點的處理並不多,它與事件是兩個不同的體系,通常情況下焦點和事件是相互獨立並不沖突。但是在Button的點擊事件中會有一點問題。如果我們隊一個button設置了 setFocusableInTouchMode(true) ,使他可以獲取焦點,那麼我們點擊這個button的時候,第一次點擊並不會執行 onClick() 方法,而是執行 onFocusChange() 。第二次點擊的時候才會執行 onClick() 方法。看起來好像 onFocusChange() 消耗了點擊事件,實際上並不是的。

這個問題我們看一下源碼就清楚了:

onClick() 方法是在onTouchEvent的ACTION_UP里調用的,看一下View的onTouchEvent方法:

可以看到,只有當focusTaken為false的時候才會執行onClick,focusTaken的值默認是false的,但是在 isFocusable() && isFocusableInTouchMode() && !isFocused() 為true的時候,會去 requestFocus 獲取焦點,並將值賦給focusTaken。

關鍵在於 isFocused() ,如果當前Button沒有獲取焦點, isFocused() 返回false, !isFocused() 值為ture,Button就會去獲取焦點,從而導致 focusTaken 為true, onClick 方法就不會執行了,只有Button已經獲取了焦點的時候才會執行onClick方法。

⑶ android 開發 ,控制整個屏幕的點擊功能屏幕失去焦點功能問題: 求思路啊~~

button.setEnabled(false),單獨的控制項可以這樣設置變成灰色和不可點擊狀態,你可以用ImageButton放圖標,通過它的監聽事件去修改其他控制項的setEnabled值。

⑷ 我想在android 平台上實現多個button,當點擊到某個button時,button顯示一種圖片,並將焦點設置在上面。

RadioGroup里套RadioButton.

<RadioGroup android:orientation="horizontal" android:id="@+id/main_group" android:layout_width="fill_parent" android:layout_height="wrap_content">
<RadioButton android:id="@+id/main_group_radio1"
android:layout_weight="10" android:layout_height="wrap_content"
android:button="@drawable/main_group_radio1s" />
<RadioButton android:id="@+id/main_group_radio2"
android:layout_weight="10" android:layout_height="wrap_content"
android:button="@drawable/main_group_radio2s" />
</RadioGroup>

android:button="@drawable/main_group_radio2s" 這個是一個配置文件,裡面設定按鈕選中和沒選中的狀態,放到圖片那個文件夾里.
文件名設置成main_group_radio2s就行了
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="false"
android:drawable="@drawable/sam" />沒選中的圖片
<item android:state_checked="true"
android:drawable="@drawable/over_01" />選中的圖片
</selector>

⑸ android button什麼情況下會獲得焦點

android中,要使控旁租件獲得焦點,需要伍返先setFocus,再requestFocus。
以Button為例:
btn.setFocusable(true);
btn.setFocusableInTouchMode(true);
btn.requestFocus();
btn.requestFocusFromTouch();

//獲得失去焦腔啟飢點的監聽器
btn.setOnFocusChangeListener(new OnFocusChangeListener() {

@Override
public void onFocusChange(View v, boolean hasFocus) {
// TODO Auto-generated method stub
if (hasFocus) {
btn_box.setBackgroundResource(R.drawable.book_green);
}else {
btn_box.setBackgroundResource(R.drawable.book);
}
}
});

⑹ android中button有幾種狀態

Android中,button按鈕通常有三個狀態:

1. normal(正常狀態);
2. focus(焦點狀態);
3. pressed(按下狀態)
4. selected(選中狀態)

注意:按下後未松開前是pressed,表示按下。
松開後當前項目獲得焦點,是focused。
focused的項只有一個,selected是當選中該按鈕時顯示的狀態。

⑺ android 怎樣讓button失去焦點

三種方法可以試試。
1、button.setFocusable(false);
2、如果只是為了進入的時候不要讓某個控制項得到焦點,可以設置焦點到整個Layout。
3、也可以在屏幕的空白處 就是你的deittext的父容器(例如你把文本框放在了LinearLayout布局中)可以給父容器添加事件使其失去焦點。

熱點內容
青驕如何重置賬號密碼 發布:2025-02-01 09:57:51 瀏覽:520
阿里雲伺服器鏡像市場 發布:2025-02-01 09:46:04 瀏覽:525
任子行伺服器管理口默認地址 發布:2025-02-01 09:42:58 瀏覽:996
設備作為FTP客戶端時 發布:2025-02-01 09:35:07 瀏覽:936
安卓如何登錄ios明日之後 發布:2025-02-01 09:31:59 瀏覽:306
怎麼查看手機存儲卡 發布:2025-02-01 09:31:51 瀏覽:341
java知識點總結 發布:2025-02-01 09:08:32 瀏覽:685
如何在手機版給伺服器加光影 發布:2025-02-01 09:02:14 瀏覽:728
簡單神器安卓系統的哪個好 發布:2025-02-01 09:00:48 瀏覽:355
社保卡密碼如何異地改密碼 發布:2025-02-01 08:57:22 瀏覽:34