2017-04-26 44 views
1

我搜索,找到方法,使一個單一的EditText不可編輯,如使所有的EditText不可編輯一起

  1. edittext.setKeyListener(null);
  2. 設置EditTextandroid:focusable="false"

然而,問題與這些方法是我需要在我的佈局中獲得對每個EditText視圖的引用,並單獨實現上述語句。有沒有辦法讓佈局中的所有EditText視圖不可編輯?

應用程序是這樣的:我有一個「顯示和編輯」活動,其中用戶顯示數據庫中的當前記錄。此時顯示的文本應該是隻讀的。如果需要,他點擊一個編輯按鈕,然後EditText視圖變爲可編輯。

我嘗試在根ViewGroup中設置android:inputType="none"android:focusable="false",但那不起作用。有出路嗎?

回答

4

如果你想以編程方式實現這一目標,

public void setupUI(View view, boolean editable) { 
    if (view instanceof EditText) { 
     ((EditText)view).setFocusable(editable); 
     //Here you can add any other code that needed to be done while changing focus of a particular edit text 
     return; 
    } 
    //If a layout container, iterate over children and seed recursion. 
    if (view instanceof ViewGroup) { 
     for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) { 
      View innerView = ((ViewGroup) view).getChildAt(i); 
      setupUI(innerView, editable); 
     } 
    } 
} 

提供此方法,您的片段或活動的父視圖。

當您單擊編輯按鈕時,將父視圖和true(即可編輯)傳遞給方法,並在編輯後傳遞父視圖和false(即不可編輯)。

+0

Thanx的小問題,但最後一次調用setupUI還將包括布爾參數可編輯的權利? –

+0

我刪除了函數聲明中的布爾可編輯參數,它工作正常。感謝名單。點擊時,視圖點亮。我想我可以包含一個命令來使視圖不可點擊。 –

+0

對,對不起。我已經更新了我的答案。 –

1

android:descendantFocusability docs

看時的視圖採取集中定義的ViewGroup及其後代之間的關係。

應用此那些EditText S的父:

android:descendantFocusability="blocksDescendants" 

這將導致所述ViewGroup從接收焦點阻止其後代。

+0

This Works,thanx!儘管點擊時,EditText視圖仍然亮起。如果有某種方式禁用可點擊的話,會很好。找不到類似的屬性。 –

+0

將'android:focusable =「false」'應用於'EditText'。 – azizbekian

+0

但我必須分別對每個EditText做這件事,這是整個問題。 –