當前位置:首頁 » 安卓系統 » android控制項焦點

android控制項焦點

發布時間: 2023-06-28 09:48:57

Ⅰ Android下如何取當前獲得焦點的控制項的ID

Android如何獲取動態添加控制項的id:RelativeLayout mainLayout = (RelativeLayout)findViewById(R.id.relaGameZhaiGuoZi);imgApple2 = new ImageView(this);imgApple2.setImageResource(R.drawable.app);imgApple2.setId(110);imgApple2.setOnClickListener(this);RelativeLayout.LayoutParams lp1 = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);lp1.leftMargin=30;lp1.topMargin = 100;mainLayout.addView(imgApple2,lp1);View類裡面有一個findFocus的成員函數,作用相當於找到以當前View為根的view層次結構中,獲得當前輸入焦點的view 。Android下如何取當前獲得焦點的控制項的ID

Ⅱ 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下如何取當前獲得焦點的控制項的ID

Android如何獲取動態添加控制項的id:RelativeLayout
mainLayout
=
(RelativeLayout)findViewById(R.id.relaGameZhaiGuoZi);imgApple2
=
new
ImageView(this);imgApple2.setImageResource(R.drawable.app);imgApple2.setId(110);imgApple2.setOnClickListener(this);RelativeLayout.LayoutParams
lp1
=
new
RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);lp1.leftMargin=30;lp1.topMargin
=
100;mainLayout.addView(imgApple2,lp1);View類裡面有一個findFocus的成員函數,作用相當於找到以當前View為根的view層次結構中,獲得當前輸入焦點的view
。Android下如何取當前獲得焦點的控制項的ID

Ⅳ android 中如何設置焦點的位置。

設置焦點需要以下幾步:
1,打開手機相機,進入設置,打開焦點功能。
2,進入拍照頁面,雙擊屏幕的一個地方,相機就會自動鎖定焦點。
3,焦點會帶有兩個鎖定框,一個鎖定,一個可以拖動。
4,鎖定在屏幕上的鎖定框就是焦點,可移動的是進行焦距調節。

多數相機的焦距處理並不明顯,直接移動焦點效果會好些。

Ⅳ 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某一app設為焦點app

在做電視機頂盒應用的時候,每個控制項都是有焦點變化的顯示的冊啟,如果當前焦點被一個自己不知道的控制項獲取到,則其他控制項就不會獲取到焦點,我們必須要找到當前獲取焦點的控制項,將其 android:focusable="false" ,不讓它獲取到焦點。

通過findFocus()方法來獲取到當前的控制項。

在Activity的onCreate方法中,啟動線毀困程。

new Thread(run2).start();

run2的代碼如下所示:

Runnable run2 = new Runnable() {
@Override

public void run() {
while (true) {
try {
Thread.sleep(5000);

} catch (InterruptedException e) {
e.printStackTrace();

}

View rootview = DetailActivity.this.getWindow().getDecorView();

View aaa = rootview.findFocus();

Log.i("tag", aaa.toString());

}

}

};

這樣每隔5秒會獲取一纖姿念次當前有焦點的控制項,列印出log就可以了。

列印出的log如下所示:

最後就是控制項的id了,這樣你就找到了當前獲取焦點的控制項了。

結束。

鏈接:https://www.waimaiguai.com/technology/article/1327504
來源:外賣怪

Ⅶ android listview button 焦點問題

istview button 搶占焦點的解決辦法:
Item xml 根節點添加 android:descendantFocusability="blocksDescendants"
Button 設置
android:focusable="false"
這樣點擊Button 和ListView Item 可以分別響應自己的點擊事件
開發中很常見的一個問題,項目中的listview不僅僅是簡單的文字,常常需要自己定義listview,自己的Adapter去繼承BaseAdapter,在adapter中按照需求進行編寫,問題就出現了,可能會發生點擊每一個item的時候沒有反應,無法獲取的焦點。
原因多半是由於在你自己定義的Item中存在諸如ImageButton,Button,CheckBox等子控制項(也可以說是Button或者Checkable的子類控制項),此時這些子控制項會將焦點獲取到,所以常常當點擊item時變化的是子控制項,item本身的點擊沒有響應。
這時候就可以使用descendantFocusability來解決啦
該屬性是當一個為view獲取焦點時,定義viewGroup和其子控制項兩者之間的關系。
屬性的值有三種:
beforeDescendants:viewgroup會優先其子類控制項而獲取到焦點
afterDescendants:viewgroup只有當其子類控制項不需要獲取焦點時才獲取焦點
blocksDescendants:viewgroup會覆蓋子類控制項而直接獲得焦點
通常我們用到的是第三種,即在Item布局的根布局加上**android:descendantFocusability=」blocksDescendants」**的屬性就好了,至此listview點擊的靈異事件告一段落。

Ⅷ Android View如何獲取焦點

Android新啟動Activity,dialog或者其他窗體中包含EditText, 新啟動的activity的焦點默認在EditText上,這時android系統會彈出軟鍵盤,擠壓activity本來的界面,影響美觀。
因此最好在新窗體創建時,在onCreate()方法中將焦點放在另一個view上。
view使用requestFocus()焦點,但是如果讓button或者textView之類控制項直接使用requestFocus()方法,則無法獲取焦點,焦點會依然在editText上。
只能在使用View的requestFocus()方法之前調用下面2個方法,view才可獲取焦點:

view.setFocusable(true);

view.setFocusableInTouchMode(true);

然後調用 view.requestFocus()即可獲取焦點。

熱點內容
飢荒如何轉移伺服器 發布:2025-02-07 03:14:42 瀏覽:4
怎麼才能知道電視是不是安卓系統 發布:2025-02-07 03:04:23 瀏覽:816
銀行更改密碼紅色預警是什麼意思 發布:2025-02-07 02:54:22 瀏覽:551
androiddomain 發布:2025-02-07 02:46:04 瀏覽:843
埠掃描源碼 發布:2025-02-07 02:31:01 瀏覽:470
androidurl獲取圖片 發布:2025-02-07 02:22:11 瀏覽:482
調用上傳 發布:2025-02-07 02:19:53 瀏覽:84
aix編譯安裝 發布:2025-02-07 02:19:52 瀏覽:907
android界面設計尺寸 發布:2025-02-07 02:16:25 瀏覽:898
zenly安卓為什麼會一直閃 發布:2025-02-07 02:12:02 瀏覽:358