Android UI開(kāi)發(fā)中所遇到的各種坑
1.軟鍵盤隱藏問(wèn)題
- 問(wèn)題描述:Activity按下返回調(diào)用finish()方法后,界面已經(jīng)銷毀,但是軟鍵盤依然還留在屏幕上,這讓當(dāng)前正在顯示的Activity沒(méi)有輸入框的完全沒(méi)法看,非常嚴(yán)重的視覺(jué)影響。
- 嘗試方案:尋找各種方法去隱藏軟鍵盤,網(wǎng)上各種找。思路是在活動(dòng)退出時(shí),會(huì)調(diào)用onDestroy方法銷毀界面,在這個(gè)方法里面想辦法隱藏界面即可。找到下面這種方法,但還是不行。還嘗試過(guò)用基類找到所有edittext然后讓它們失去焦點(diǎn),隱藏軟鍵盤。
InputMethodManager im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); im.hideSoftInputFromWindow(getCurrentFocus().getApplicationWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
- 解決方案:一開(kāi)始在onDestroy()里調(diào)隱藏軟鍵盤的思路就是錯(cuò)的,因?yàn)閛nDestroy()之前還有兩個(gè)生命周期方法,像上述隱藏軟鍵盤的方法有個(gè)getCurrentFocus(),在onDestroy()之前肯定得不到正確的獲取當(dāng)前焦點(diǎn)的那個(gè)控件了。所以在onPasue()方法里隱藏軟鍵盤就有效,在onDestroy()方法里不管用任何方法都是無(wú)效的。
- 注意點(diǎn):用這個(gè)隱藏軟鍵盤的方法,最好做為空判斷,否則有可能會(huì)出現(xiàn)空指針的異常,如當(dāng)前界面沒(méi)有控件獲取焦點(diǎn)時(shí),則getCurrentFocus()這個(gè)方法得到的是一個(gè)null.
InputMethodManager im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); if(getCurrentFocus!=null) im.hideSoftInputFromWindow(getCurrentFocus().getApplicationWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
- 軟鍵盤占用布局問(wèn)題,軟鍵盤有時(shí)會(huì)把一些控件覆蓋掉,這時(shí)如何把整個(gè)界面向上頂起,讓任何控件都不會(huì)被覆蓋呢?有兩步,第一在activity里設(shè)置一個(gè)屬性,如下。第二步,布局里加一個(gè)scrollview將你要被頂起的視圖放進(jìn)這里,然后當(dāng)軟鍵盤顯示的時(shí)候,就會(huì)在scrollview里滾動(dòng)以獲得空間進(jìn)行顯示軟鍵盤。
<activity Android:windowSoftInputMode="adjustResize">
2.merge標(biāo)簽注意點(diǎn)
- merge標(biāo)簽只有在根布局是FrameLayout時(shí)才有用,因?yàn)榘沧克薪缑娴母季侄际荈rameLayout,所以可以用merge標(biāo)簽進(jìn)行融合。
- merge標(biāo)簽使用后,布局里即使有EditText也無(wú)法自動(dòng)獲得焦點(diǎn),只能手動(dòng)設(shè)置焦點(diǎn), 調(diào)用requestFocus()方法?;蛘呤怯胷equestFocus》在XML布局文件里。
- 使用后要注意如果在根布局中,則不能用LayoutInflater來(lái)生成一個(gè)view,否則會(huì)報(bào)如下錯(cuò)誤,由于我在listview的getview()里用了這個(gè)帶有merge的布局,所以崩潰了。補(bǔ)充一點(diǎn),inflater()方法里可以設(shè)置attach root為true則可以解析出來(lái),不會(huì)出現(xiàn)崩潰。
android.view.InflateException: Binary XML file line #2: <merge /> can be used only with a valid ViewGroup root and attachToRoot=true Caused by: android.view.InflateException: <merge /> can be used only with a valid ViewGroup root and attachToRoot=true
3.LinearLayout注意點(diǎn)
- 線性布局默認(rèn)是水平的,要善用weight權(quán)重這個(gè)屬性。
- 非常重要的點(diǎn),如果方向設(shè)為水平,則layout_gravity的top與bottom標(biāo)簽是沒(méi)有效果的。如果方向設(shè)為垂直,則left與right是沒(méi)有效果的,這時(shí)如果想放在靠右的地方,則可以使用space標(biāo)簽,將寬度設(shè)為0dp,將layoutweight設(shè)為1放在控件前邊即可。
4. 布局選擇
FrameLayout是最簡(jiǎn)單的一種布局,所有安卓界面的根布局都是FrameLayout,加載速度最快。
LinearLayou布局與RelativeLayout布局的加載速度需要進(jìn)一步深入的研究才能得出具體結(jié)論。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
- Android開(kāi)發(fā)騰訊驗(yàn)證碼遇到的坑
- Android—基于微信開(kāi)放平臺(tái)v3SDK開(kāi)發(fā)(微信支付填坑)
- Android開(kāi)發(fā)中那些需要注意的坑
- Android開(kāi)發(fā)手機(jī)無(wú)線調(diào)試的方法
- Android開(kāi)發(fā)教程之獲取系統(tǒng)輸入法高度的正確姿勢(shì)
- Android開(kāi)發(fā)解決popupWindow重疊報(bào)錯(cuò)問(wèn)題
- 使用Win10+Android+夜神安卓模擬器,搭建ReactNative開(kāi)發(fā)環(huán)境
- Android快速開(kāi)發(fā)系列 10個(gè)常用工具類實(shí)例代碼詳解
- Android開(kāi)發(fā)筆記之如何正確獲取WebView的網(wǎng)頁(yè)Title
- Android開(kāi)發(fā)圖片水平旋轉(zhuǎn)180度方法
- Android Studio中使用jni進(jìn)行opencv開(kāi)發(fā)的環(huán)境配置方法
相關(guān)文章
Android中系統(tǒng)默認(rèn)輸入法設(shè)置的方法(輸入法的顯示和隱藏)
這篇文章主要介紹了Android中系統(tǒng)默認(rèn)輸入法設(shè)置的方法(輸入法的顯示和隱藏)的相關(guān)資料,需要的朋友可以參考下2016-01-01
Android倒計(jì)時(shí)控件 Splash界面5秒自動(dòng)跳轉(zhuǎn)
這篇文章主要為大家詳細(xì)介紹了Android倒計(jì)時(shí)控件,Splash界面5秒自動(dòng)跳轉(zhuǎn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09
Android開(kāi)發(fā)服務(wù)Service全面講解
Android的服務(wù)是開(kāi)發(fā)Android應(yīng)用程序的重要組成部分。不同于活動(dòng)Activity,服務(wù)是在后臺(tái)運(yùn)行,服務(wù)沒(méi)有接口,生命周期也與活動(dòng)Activity非常不同。通過(guò)使用服務(wù)我們可以實(shí)現(xiàn)一些后臺(tái)操作,比如想從遠(yuǎn)程服務(wù)器加載一個(gè)網(wǎng)頁(yè)等,下面來(lái)看看詳細(xì)內(nèi)容,需要的朋友可以參考下2023-02-02
Android中導(dǎo)航組件Navigation的實(shí)現(xiàn)原理
大家好,本篇文章主要講的是Android中導(dǎo)航組件Navigation的實(shí)現(xiàn)原理,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2022-02-02
Android實(shí)現(xiàn)獲取SERIAL信息的方法
這篇文章主要介紹了Android實(shí)現(xiàn)獲取SERIAL信息的方法,涉及Android操作SERIAL的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10
Android:如何編寫“萬(wàn)能”的Activity
本文主要介紹了編寫“萬(wàn)能”的Activity的方法與步驟,具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-01-01
kotlin項(xiàng)目加入Glide圖片加載庫(kù)并使用GlideApp的方法
這篇文章主要給大家介紹了關(guān)于kotlin項(xiàng)目加入Glide圖片加載庫(kù)并使用GlideApp的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧2019-01-01
Android開(kāi)發(fā)仿bilibili刷新按鈕的實(shí)現(xiàn)代碼
這篇文章主要介紹了Android 仿bilibili刷新按鈕的實(shí)現(xiàn)代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-10-10

