1. 程式人生 > >關於ListView、EditText、游標、和軟鍵盤

關於ListView、EditText、游標、和軟鍵盤

需求:顯示若干行資訊,每行都包含 EditText,每個 EditText 都可以輸入。

當時的解決辦法:ListView + LinearLayout
佈局大致情況:ListView 巢狀 LinearLayout, 30個item,每個 Item 包含一個 EditText,也還有其他控制元件(button, checkbox 等)

遇到的問題:

  1.  當時清單檔案使用的預設配置 (即 android: windowSoftInputMode 沒有做任何配置)
           點選任意一個 Item 中的 Edittext 之後,軟體盤正常彈出,但是很快發現點中的Edittext 並沒有獲取焦點(即沒有游標在閃爍)。根據查閱資料的說法是彈出輸入法之後 ListView 進行了重繪導致失去了焦點。

           此時我沒有沿著這條線路繼續,而是想到了之前的解決辦法,看2。

  2.  根據查閱的資料,在清單檔案中該Activity做如下配置
<span style="font-size:12px;">      android:windowSoftInputMode = adjustPan
</span>

經過測試發現,焦點和游標問題確實解決了,點選 EditText 彈出軟體盤後並不會失去焦點,但是如果想連續輸入(輸入法不收回,直接下滑),發現最下端的幾個Item不能完全顯示(滑不上去)。(其實收回軟鍵盤再下滑完全沒有問題,但是測試人員就說這是 bug ,沒辦法還是繼續解決唄!)


我試著在 LIstView 下方添加了一個佔位 View ,想讓 ListView 重繪時留夠空間,結果發現無論新增多高的佔位 View ,都沒有作用。作罷,還是回到方法1。


繼續方法1:

    首先:

      android:windowSoftInputMode = adjustResize 

    然後在 ListView 介面卡的 getView() 方法中,EditText 新增事件

    int index = -1;
        edittext.setOnTouchListener(new OnTouchListener() {
            public boolean onTouch(View view, MotionEvent event) {
    //在TOUCH的UP事件中,要儲存當前的行下標,因為彈出軟鍵盤後,整個畫面會被重畫
    //在getView方法的最後,要根據index和當前的行下標手動為EditText設定焦點
                if (event.getAction() == MotionEvent.ACTION_UP) {
                    index = position;
                }
                return false;
            }
        });
     
  if (index != -1 && index == position) {
            // 如果當前的行下標和點選事件中儲存的index一致,手動為EditText設定焦點。 <pre name="code" class="java">            edittext.requestFocus(); 
            //強制將游標移動到最後
<pre name="code" class="java"><pre name="code" class="java">            edittext.setSelection(radio.note.getText().length());
        }


以上,即可解決問題。(並非完全原創,結合以下兩篇文章,總結了解決問題的過程,防止自己再犯同樣的錯誤)

相關推薦

關於ListViewEditText游標鍵盤

需求:顯示若干行資訊,每行都包含 EditText,每個 EditText 都可以輸入。 當時的解決辦法:ListView + LinearLayout 佈局大致情況:ListView 巢狀 LinearLayout, 30個item,每個 Item 包含一個 EditTe

android仿微信QQ等聊天介面,實現點選輸入框彈出鍵盤點選其他區域收起鍵盤,預設滑動至最低端

如圖所示,點選輸入框及選擇圖片和傳送按鈕時軟鍵盤顯示且不消失,點選其他區域,則隱藏軟鍵盤。 主要程式碼如下: override fun dispatchTouchEvent(ev: MotionEvent?): Boolean { if (ev!!.getAction() ==

Android 修改EditText游標顏色背景色

Edittext 的游標顏色: 在xml佈局檔案中 android:textCursorDrawable=”@null” 表示游標的顏色和字型的顏色一樣 當然,我們也可以自定義游標的顏色,在drawable資料夾下寫個edit_cursor_color.

EditText初始不彈出鍵盤,只有游標顯示,點選再彈出

剛進來的時候,不彈出鍵盤,EditText 有個游標上面閃,證明是可編輯的,這個還是符合使用者習慣的,從使用者體驗的角度上講,還保留游標的閃動是好的。 解決方法1:(已經試過,證明可以) 在activity屬性中設定android:windowSoftInputMode="

開啟新介面時,EditText焦點自動彈出鍵盤

對於一點點空閒時間,看看文章,竟然想起以前的一個問題,趕緊修改起來。 Android新啟動Activity時,dialog或者其他窗體中包含EditText,新啟動的activity的焦點預設在EditText上,這時候安卓系統會自動彈出軟鍵盤。這會導致擠壓activity介

安卓中EditText點選空白處隱藏鍵盤

Android開發過程中,點選EditText會出現鍵盤,當我們輸入完畢時,還要點一下返回鍵才能隱藏軟鍵盤,重寫下面這個方法,只要點選空白處就可以隱藏軟鍵盤,很方便,很實用。 /**

Android點選EditText之外的地方隱藏鍵盤同時使EditText失去焦點

1.只是隱藏軟鍵盤: @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_

如何獲取Android鍵盤狀態鍵盤高度

應用場景 在Android應用中有時會需要獲取軟鍵盤的狀態(即軟鍵盤是顯示還是隱藏)和軟鍵盤的高度。這裡列舉了一些可能的應用場景。 場景一 當軟鍵盤顯示時,按下返回鍵應當是收起軟鍵盤,而不是回退到上一個介面,但部分機型在返回鍵處理上有bug,按下返

點選返回鍵,同時隱藏輸入區域鍵盤

我當時要做的需求是,底部評論區,和評論編輯區域,首先評論區域是顯示的,編輯區域是隱藏的,當點選評論區時,隱藏評論區,顯示編輯評論的區域(見圖)和edittext獲取焦點,彈出軟鍵盤, 在剛開始做的時候嘗試了很多種方法(成功的方法在最後一條,中間是我做的一些實驗的方法和一開始

Android開發之將Edittext輸入彈出的鍵盤設定搜尋確定鍵。詳細程式碼,已驗證可用。

1,首先在佈局中新增 android:imeOptions="actionSearch 2,然後java程式碼中設定程式碼:et_input_password.setOnEditorActionLi

Android中獲取鍵盤狀態鍵盤高度

應用場景 在Android應用中有時會需要獲取軟鍵盤的狀態(即軟鍵盤是顯示還是隱藏)和軟鍵盤的高度。這裡列舉了一些可能的應用場景。 場景一 當軟鍵盤顯示時,按下返回鍵應當是收起軟鍵盤,而不是回退到上一個介面,但部分機型在返回鍵處理上有bug,按下返回鍵後

activity鍵盤遮擋問題

今天解決了一個bug,就是魅藍3手機的軟鍵盤不能把dialog樣式的activity頂起來,導致佈局裡的一部分看不到,我在網上查詢解決方案,發現瞭如下幾個方法,一一嘗試了但是都沒用。但是這幾種方案對於解決其它款式的手機應該是有用的。 魅藍3上的效果: 其

Linux特殊權限set_uidset_gidstick_bit命令鏈接文件硬連接文件

set uid 特殊權限set_uid:用ls -l查看 passwd命令文件的路徑可以看到這個文件和之前所看到的文件有些不同,有紅色的標記,而且有個s權限:這個s就是set_uid的權限,這個權限可以讓普通用戶修改自己的密碼,這個權限的原理是:當普通用戶執行passwd命令的一瞬間給它賦予root的

Linux系統硬鏈接鏈接詳細介紹與實踐

導致 9.png 創建 訪問 tap 除了 all window tor 鏈接的概念 在linux系統中,鏈接可分為兩種:一種被稱為硬鏈接(Hard LinK),另一種被稱為軟鏈接或符號鏈接(Symbolic Link)。在默認不帶參數的情況下,執行ln命令創建的鏈

特殊權限set_uid,set_gid,stick_bit硬鏈接

linux● suid前面講的文件權限都是3位數,其實在前面還有一位,就是特殊權限,set uid,set gid,stick bit。該權限針對二進制可執行文件,使文件在執行階段具有文件所有者的權限。例如passwd命令,當普通用戶執行passwd命令時,可以臨時獲得root權限,從而可以更改密碼。 [ro

件包管理配置網絡文本/文件查找總結答疑

成功 配置ip地址 code ifconfig etc lease cli 取反 mariadb #################################################################軟件包管理 1.關閉虛擬機,圖形添加光驅設備

【LC3開源峰會網絡技術系列之二】阿裏雲開發智能網卡的動機功能框架轉發程序

copy 特點 fda 優化 ext shadow 所有 type 解密 摘要: 摘要 這篇文章介紹了阿裏雲開發智能網卡的動機、功能框架和軟轉發程序以及在軟轉發過程中發現的問題和優化方法。 主講人陳靜 阿裏雲高級技術專家 主題Zero-copy Optimization f

17個最好的桌面RPG夥伴應用程序工具

谷歌 fig 痛苦 發生器 好遊戲 超級 -a 調整 一位 不管你是剛剛開始探索世界的桌面rpg和桌面遊戲,甚至如果你一直在做它多年來,應用程序和其他軟件可以提高你的經驗,讓它更有趣。 這些應用程序可以幫助你幾乎每一個階段的活動,從設計角色設置場景,甚至跟蹤誰是誰和你。 在

Oracle中PL/SQL之常量變數的定義遊標(游標)的使用

PL/SQL常量和變數的定義 變數的資料型別:char、varchar2、date、number、boolean、long 常量定義:isshow boolean :=true; 說明變數:說明變數名、資料型別和長度後用分號結束說明語句。例:e_name varchar2(20);

強引用弱引用引用

  轉載請註明地址:http://blog.csdn.net/yincheng886337/article/details/50479459 談到這四種引用,先讓我做個這樣的比喻,JVM好比你,記憶體