2013-08-24 45 views
15

Tôi có Hoạt động với EditText và Nút. Khi người dùng nhấp vào EditText, bàn phím được hiển thị và anh ấy có thể nhập một số văn bản - tiền phạt. Nhưng khi người dùng nhấp vào nút Tôi muốn EditText không tập trung nhiều hơn, tức là bàn phím ẩn cho đến khi người dùng nhấp lại vào EditText.android edittext xóa tiêu điểm sau khi nhấp vào nút

Tôi có thể làm gì để 'ẩn tiêu điểm' của EditText, sau khi Nút được nhấp. Một số Mã tôi có thể thêm vào trong Phương pháp OnClick của Nút để làm điều đó?

EDIT:

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" > 

    <EditText 
     android:id="@+id/edt_SearchDest" 
     android:layout_width="0dip" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.8" 
     android:textSize="18sp" 
     android:hint="Enter your look-up here.." /> 

    <Button 
     android:id="@+id/btn_SearchDest" 
     android:layout_width="0dip" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.2" 
     android:text="Search" /> 

</LinearLayout> 

Trân trọng

+0

xóa trọng tâm của Edittext khi nhấp vào nút bằng cách sử dụng 'm_editText.clearFocus(); ' – GrIsHu

+1

không giải quyết được sự cố. – MojioMS

Trả lời

34

Đặt này trong nút nghe của bạn:

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

inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS); 

EDIT

Các giải pháp trên sẽ phá vỡ ứng dụng của bạn nếu không EditText là tập trung vào. Sửa đổi mã của bạn như thế này:

thêm phương pháp này để bạn lớp:

public static void hideSoftKeyboard (Activity activity, View view) 
{ 
    InputMethodManager imm = (InputMethodManager)activity.getSystemService(Context.INPUT_METHOD_SERVICE); 
    imm.hideSoftInputFromWindow(view.getApplicationWindowToken(), 0); 
} 

Sau đó, trong nút nghe của bạn, gọi phương thức như thế này:

hideSoftKeyboard(MainActivity.this, v); // MainActivity is the name of the class and v is the View parameter used in the button listener method onClick. 
+0

thực hiện chính xác những gì tôi muốn, cảm ơn! – MojioMS

+0

không hoạt động đối với tôi. – user1561108

+0

không hoạt động cho tôi hoặc – TeodorKolev

0
private void hideDefaultKeyboard() { 
    activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);//u have got lot of methods here 
} 

EDIT:

LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN 
+0

dường như không hoạt động –

+0

Tôi không thể nhập WindowManager ..? – MojioMS

+0

y câu hỏi là gì? – Exceptional

-1

Tại sao không chỉ vô hiệu hóa các EditText trong mã nút? Điều đó sẽ loại bỏ bàn phím và tiêu điểm.

edt_SearchDest.setEnabled (sai);

+0

thì bạn không thể tập trung vào nó * bao giờ *; ngay cả khi bạn chạm vào nó. –

8

Tôi đã sử dụng thành công sau trong mã nút onClick:

editText.setEnabled(false); 
editText.setEnabled(true); 

Hơi ít phức tạp hơn so với các phương pháp khác ...

+0

Trong trường hợp này, bạn chỉ cần ẩn bàn phím, nhưng con trỏ vẫn sẽ ở EditText. Hơn nữa onFocusChangedListener sẽ không được gọi. –

0
mTextView.setEnabled(!mTextView.isEnabled()); 
mTextView.setEnabled(!mTextView.isEnabled()); 
7

Tạo một cái nhìn giả để có được tập trung khi bạn cố gắng clearFocus trong số edittext:

<EditText 
     android:id="@+id/edt_thief" 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     android:focusable="true" 
     android:focusableInTouchMode="true" 

Lưu ý chế độ xem này không yêu cầu bất kỳ không gian nào trong bố cục sao cho nó không quan trọng với bố cục của bạn.

Trong lớp điều khiển, gọi đây là:

public void clearFocus(){ 
     yourEdittext.clearFocus(); 
     edtThief.requestFocus(); 
    } 

Về bàn phím, làm ẩn bàn phím sau khi edtThief có trọng tâm.

public static void hideKeyboard(final View view) { 
    InputMethodManager imm = (InputMethodManager) view.getContext() 
      .getSystemService(Context.INPUT_METHOD_SERVICE); 
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0); 
} 
+0

Tôi gặp vấn đề tương tự và tôi đã kết thúc với một giải pháp tương tự như vậy, trong trường hợp của tôi, tôi phải tập trung vào chế độ xem ẩn trước và sau đó lấy nét rõ ràng, –

+0

Một điều khác rất quan trọng trên bố cục EditText. 'android: imeOptions = "flagNoExtractUi" 'do đó khi bạn xoay điện thoại, bạn không nhận được màn hình chỉnh sửa chỉnh sửa văn bản được trích xuất. –

0

Xin lỗi muộn để câu trả lời, nhưng tôi hy vọng đây sẽ là câu trả lời đúng, như tôi đã cố định nó bằng cách sử

try { 
InputMethodManager imm = (InputMethodManager) context 
        .getSystemService(Context.INPUT_METHOD_SERVICE); 
if (v != null) { 
imm.hideSoftInputFromWindow(v.getWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS); 
} 
} catch (Exception ignored) { 
} 
mEditText.setSelected(false); 
mEditText.setFocusable(false); 
mEditText.setFocusableInTouchMode(true); 

Viết đoạn sau đây vào nút bấm của bạn.

4

Giải pháp thanh lịch nhất mà tôi có thể tìm thấy là thế này:

Bạn có thể lưu phương pháp này trong lớp tiện ích của bạn:

public static void hideSoftKeyboard(Activity activity) { 
    if (activity == null) return; 
    if (activity.getCurrentFocus() == null) return; 

    InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE); 
    inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0); 
} 

Bởi chỉ cần gọi phương thức hideSoftKeyboad() nó sẽ ẩn bàn phím nhưng như bạn có thể thấy, tiêu điểm sẽ vẫn có mặt.

Để loại bỏ tiêu điểm, chúng tôi sẽ sử dụng một mẹo đơn giản. Ngay trên điều khiển đầu vào của bạn, thêm một cái nhìn giả như thế này:

<View 
    android:id="@+id/dummy" 
    android:layout_width="1dp" 
    android:layout_height="1dp" 
    android:focusable="true" 
    android:focusableInTouchMode="true" /> 

Sau đó, viết dòng mã này tại nơi bạn gọi phương thức tập trung-ẩn:

theTextView.clearFocus(); 

Kể từ khi nhu cầu ứng dụng để chuyển tiêu điểm đến điều khiển tiếp theo, nó sẽ được chuyển đến chế độ xem vô hình của chúng tôi.

+1

Sau khi thử nhiều phương pháp Phần dưới cùng của câu trả lời của bạn đã giải quyết được vấn đề tôi đang gặp phải. Cảm ơn :) "Dummy View ... Ngay phía trên điều khiển đầu vào của bạn" cụ thể. –