2010-02-26 125 views
54

Tôi có một nút EditText và được căn chỉnh về phía dưới cùng của cha mẹ.cách ẩn bàn phím sau khi nhập EditText trong Android?

Khi tôi nhập văn bản vào đó và nhấn nút để lưu dữ liệu, bàn phím ảo sẽ không biến mất.

Mọi người có thể hướng dẫn tôi cách ẩn bàn phím không?

+0

Đừng bạn có nghĩa là một EditText (không phải là một TextView)? –

Trả lời

103

Điều này sẽ hiệu quả.

InputMethodManager inputManager = 
     (InputMethodManager) context. 
      getSystemService(Context.INPUT_METHOD_SERVICE); 
inputManager.hideSoftInputFromWindow(
     this.getCurrentFocus().getWindowToken(), 
     InputMethodManager.HIDE_NOT_ALWAYS); 

Chỉ cần đảm bảo rằng this.getCurrentFocus() không trả lại giá trị null, nếu không có gì sẽ tập trung.

+0

nhận được lỗi sau oncreate Không thể thực hiện tham chiếu tĩnh đến phương thức không tĩnh getSystemService (String) từ loại – UMAR

+29

InputMethodManager imm = (InputMethodManager) getSystemService (Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow (myEditText.getWindowToken(), 0); hiện đang hoạt động ... – UMAR

+2

Bạn không cần phải ẩn bàn phím mềm bằng phương pháp này. Xem câu trả lời @angelrh bên dưới cùng với các nhận xét cho biết trả về false trong OnEditorActionListener và cũng để đánh dấu văn bản chỉnh sửa của bạn là singleLine = true từ xml. – Nilesh

1

Đã đấu tranh với điều này trong những ngày qua và đã tìm thấy giải pháp hoạt động thực sự tốt. Bàn phím mềm bị ẩn khi chạm được thực hiện ở bất kỳ đâu bên ngoài EditText.

Mã đăng ở đây: hide default keyboard on click in android

10
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
98

Bạn cũng có thể muốn xác định imeOptions trong EditText. Bằng cách này, bàn phím sẽ biến mất khi bạn nhấn Done:

<EditText 
    android:id="@+id/editText1" 
    android:inputType="text" 
    android:imeOptions="actionDone"/> 
+24

Điều này sẽ chỉ đúng nếu bạn không tiêu thụ sự kiện khi triển khai 'onEditorAction ([...])'. Trả về 'true' sẽ ngăn bàn phím ẩn một cách chính xác. – Eric

+4

Bàn phím mềm sẽ loại bỏ sau khi bấm 'Xong' hoặc 'Tìm kiếm' hoặc cho hành độngMột hành động hoặc tìm kiếm, nhưng bạn phải trả về false trong onEditorActionListener. – alexhilton

+5

Điều này và 'android: singleLine =" true "'. – Simas

4

Giải pháp bao gồm trong listenner hành động EditText:

public void onCreate(Bundle savedInstanceState) { 
    ... 
    ... 
    edittext = (EditText) findViewById(R.id.EditText01); 
    edittext.setOnEditorActionListener(new OnEditorActionListener() { 
     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
      if (event != null&& (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) { 
       InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
       in.hideSoftInputFromWindow(edittext.getApplicationWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS); 
      } 
      return false; 
     } 
    }); 
    ... 
    ... 
} 
0

tôi sử dụng phương pháp này để loại bỏ bàn phím từ chỉnh sửa văn bản:

public static void hideKeyboard(Activity activity, IBinder binder) { 
    if (activity != null) { 
     InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); 
     if (binder != null && inputManager != null) { 
      inputManager.hideSoftInputFromWindow(binder, 0);//HIDE_NOT_ALWAYS 
      inputManager.showSoftInputFromInputMethod(binder, 0); 
     } 
    } 
} 

Và phương pháp này để loại bỏ bàn phím khỏi hoạt động (không hoạt động trong một số trường hợp - ví dụ, khi edittext, được gắn với bàn phím, mất tiêu điểm, nó sẽ không hoạt động. tại, và bạn không cần phải quan tâm đến yếu tố đó giữ bàn phím)

public static void hideKeyboard(Activity activity) { 
    if (activity != null) { 
     InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); 
     if (activity.getCurrentFocus() != null && inputManager != null) { 
      inputManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0); 
      inputManager.showSoftInputFromInputMethod(activity.getCurrentFocus().getWindowToken(), 0); 
     } 
    } 
} 
0
editText.setInputType(InputType.TYPE_NULL); 
+0

Vui lòng thêm giải thích. Câu trả lời của bạn hiện đang được bỏ phiếu để xóa.Hãy làm như vậy để tránh những hiểu lầm trong tương lai. –

11
mEtNumber.setOnEditorActionListener(new TextView.OnEditorActionListener() { 

      @Override 
      public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
       if (actionId == EditorInfo.IME_ACTION_DONE) { 
        // do something, e.g. set your TextView here via .setText() 
        InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
        imm.hideSoftInputFromWindow(v.getWindowToken(), 0); 
        return true; 
       } 
       return false; 
      } 
     }); 

và trong xml

android:imeOptions="actionDone" 
0

Bạn có thể xem câu trả lời được đánh dấu trên đầu trang. Nhưng tôi đã sử dụng getDialog().getCurrentFocus() và hoạt động tốt. Tôi đăng câu trả lời này vì tôi không thể gõ "this" trong oncreatedialog của tôi.

Vì vậy, đây là câu trả lời của tôi.Nếu bạn đã cố gắng trả lời rõ rệt và không có tác dụng, bạn chỉ có thể thử điều này:

InputMethodManager inputManager = (InputMethodManager) getActivity().getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
       inputManager.hideSoftInputFromWindow(getDialog().getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 
1

Tôi không nhìn thấy bất cứ ai sử dụng phương pháp này:

editText.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
    @Override 
    public void onFocusChange(View view, boolean focused) { 
     InputMethodManager keyboard = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
     if (focused) 
      keyboard.showSoftInput(editText, 0); 
     else 
      keyboard.hideSoftInputFromWindow(editText.getWindowToken(), 0); 
    } 
}); 

Và sau đó chỉ cần yêu cầu tập trung vào EditText:

editText.requestFocus(); 
0
int klavStat = 1; // for keyboard soft/hide button 
int inType; // to remeber your default keybort Type 

editor - là lĩnh vực EditText

/// metod for onclick button /// 
public void keyboard(View view) { 
     if (klavStat == 1) { 
      klavStat = 0; 

      inType = editor.getInputType(); 

      InputMethodManager imm = (InputMethodManager) 
        getSystemService(Context.INPUT_METHOD_SERVICE); 
      imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); 


      editor.setInputType(InputType.TYPE_NULL); 

      editor.setTextIsSelectable(true); 



     } else { 
      klavStat = 1; 


      InputMethodManager imm = (InputMethodManager) 
        getSystemService(Context.INPUT_METHOD_SERVICE); 

       imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0); 

      editor.setInputType(inType); 

     } 
    } 

Nếu u có anather EditText Field, u cần phải xem cho sự thay đổi trọng tâm

+0

Đối với Kit-kat để ẩn tôi sử dụng: ' editor.setInputType (InputType.TYPE_NULL); editor.setSingleLine (sai); editor.setTextIsSelectable (true); ' –

2

Tôi thấy điều này vì EditText tôi đã không tự động bị sa thải vào nhập.

Đây là mã ban đầu của tôi.

editText.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
    @Override 
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
     if ((actionId == EditorInfo.IME_ACTION_DONE) || ((event.getKeyCode() == KeyEvent.KEYCODE_ENTER) && (event.getAction() == KeyEvent.ACTION_DOWN))) { 

      // Do stuff when user presses enter 

      return true; 

     } 

     return false; 
    } 
}); 

Tôi giải quyết nó bằng cách loại bỏ các dòng

return true; 

sau khi làm công cụ khi người dùng nhấn Enter.

Hy vọng điều này sẽ giúp ai đó.

0

bạn có thể tạo ra một lớp singleton cho cuộc gọi một cách dễ dàng như thế này:

public class KeyboardUtils { 

    private static KeyboardUtils instance; 
    private InputMethodManager inputMethodManager; 

    private KeyboardUtils() { 
    } 

    public static KeyboardUtils getInstance() { 
     if (instance == null) 
      instance = new KeyboardUtils(); 
     return instance; 
    } 

    private InputMethodManager getInputMethodManager() { 
     if (inputMethodManager == null) 
      inputMethodManager = (InputMethodManager) Application.getInstance().getSystemService(Activity.INPUT_METHOD_SERVICE); 
     return inputMethodManager; 
    } 

    @SuppressWarnings("ConstantConditions") 
    public void hide(final Activity activity) { 
     new Handler().post(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        getInputMethodManager().hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0); 
       } catch (NullPointerException e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 
} 

như vậy, sau khi có thể gọi vào các hoạt động như thế nào dưới hình thức tiếp theo:

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity); 
     KeyboardUtils.getInstance().hide(this); 
    } 

} 
Các vấn đề liên quan