2017-09-05 77 views
7

我有一個editText,我想自動填充表單中其他控件的信息,同時允許更改其內容,但不鼓勵用戶這樣做。無法聚焦的元素,專注於觸摸

所以我把這個控件設置爲不可聚焦,所以當你按下actionNext時,它將移動到下一個控件。但是,如果您單擊編輯文本,我想允許用戶更改其內容。

這是我做過什麼:

mNameEditText.setFocusable(false); 
     mNameEditText.setFocusableInTouchMode(false); 
     mNameEditText.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       mNameEditText.setFocusableInTouchMode(true); 
       mNameEditText.requestFocusFromTouch(); 
       mNameEditText.setFocusable(true); 
      } 
     }); 

但是這個行爲很古怪,其結果是,當你點擊,您可以編輯,但突然下一個控件(一個AutoCompleteTextView)不可作爲焦點了!事實上,它看起來像的焦點仍保留在編輯文本並轉到autocompletetextview在同一時間,像這樣:

enter image description here

我該如何解決這個問題?

+0

嘗試更改「mNameEditText.requestFocusFromTouch();」到「mNameEditText.requestFocus();」在你的聽衆裏面。 – MTCZiomal

回答

1
  • 做一個子類的文本編輯視圖的
  • 用它在你看來
  • 設置其enabled屬性false
  • 覆蓋子類中的觸摸處理程序:當文本編輯視圖觸摸,現在啓用該視圖並將其聚焦。當焦點丟失時,再次禁用文本編輯視圖。在子類中做所有的事情。
  • 樣式的文本編輯觀點正確,使用戶有這樣的印象,如果你想自動對焦變化跳過一些看法對其進行編輯
0

,您可以使用nextFocus*屬性的組合。

是這樣的:

<EditText 
    android:id="@+id/txt1" 
    android:imeOptions="actionNext" 
    android:nextFocusForward="@+id/txt3" 
    android:nextFocusDown="@+id/txt3" 
    ... /> 

<!-- skipped view --> 
<EditText 
    android:id="@+id/txt2" 
    android:imeOptions="actionNext" 
    ... /> 

<EditText 
    android:id="@+id/txt3" 
    android:imeOptions="actionNext" 
    android:nextFocusUp="@id/txt1" 
    ... /> 

nextFocusForward是用於actionNext的一個。我相信其他屬性在非觸摸模式下非常有用(例如,使用硬件鍵盤)

+0

這個工作,但然後我必須把這個每個控制,我有很多,否則在窗體上的下一個元素,當點擊下一步,它會回到我跳過的一個 – MichelReap

+0

這很奇怪,我測試了5 EditText ,(API 21設備),它的行爲如預期。即從1到3單個'nextFocusForward',焦點週期是1 - > 3 - > 4 - > 5 - > 1.您是否有更復雜的佈局(使用垂直和水平焦點移動) ? – bwt