2016-07-16 20 views
13

Tôi muốn xóa tiêu điểm và văn bản khỏi SearchView trong onResume().Làm cách nào để xóa tiêu điểm khỏi SearchView?

Tôi đã thử searchView.clearFocus() nhưng không hoạt động.

Đây là mã xml của tôi:

<SearchView 
    android:id="@+id/searchView" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignBottom="@+id/toolbar" 
    android:layout_alignTop="@+id/toolbar" 
    android:layout_centerVertical="true" 
    android:layout_marginBottom="4dp" 
    android:layout_marginTop="4dp" 
    android:iconifiedByDefault="false" 
    android:paddingLeft="16dp" 
    android:paddingRight="16dp" /> 
+0

Làm thế nào là nó không làm việc? Gây ra lỗi của một số loại hoặc chỉ là không có gì xảy ra? Vui lòng mô tả chi tiết hơn ... – Vucko

+0

hiển thị mã bạn thân của bạn :) – tinku

+0

@Vucko thực sự nó không hiển thị bất kỳ lỗi nào và con trỏ không xóa. –

Trả lời

20

Bạn có thể thiết lập layout gốc của bạn có thể đặt tiêu với android:focusableInTouchMode thuộc tính và yêu cầu tập trung vào View rằng trong onResume().

Ví dụ:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/root_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:focusableInTouchMode="true"> 

    <SearchView 
     android:id="@+id/search_view" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:iconifiedByDefault="false"/> 

</LinearLayout> 

Và sau đó trong Activity của bạn:

private View rootView; 
private SearchView searchView; 

// ... 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    // ... 

    rootView = findViewById(R.id.root_layout); 
    searchView = (SearchView) findViewById(R.id.search_view); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 

    searchView.setQuery("", false); 
    rootView.requestFocus(); 
} 
2

Sử dụng dòng mã này trong phương pháp onResume bạn

if (searchView != null) { 
    searchView.setQuery("", false); 
    searchView.clearFocus(); 
    searchView.onActionViewCollapsed(); 
} 
+0

nó vô hiệu hóa focusListner của tôi mà tôi không muốn, tôi chỉ muốn bất cứ khi nào chạm vào nó sẽ trở lại. và khi mảnh vỡ được tải lại, nó sẽ loại bỏ. –

+0

Câu hỏi của bạn không giống như những gì bạn đã giải thích bây giờ. (Tôi muốn loại bỏ tiêu điểm và văn bản từ SearchView trong onResume() Tôi đã thử searchView.clearFocus(); nhưng nó không hoạt động.) – Masum

+0

xin lỗi:/nhưng cảm ơn! để được giúp đỡ. –

0

Cách đơn giản nhất (và tôi nghĩ rằng, 100% lao động chỉ) Giải pháp là, để tạo ra một vô hình LinearLayout. Điều này LinearLayout sẽ lấy trọng tâm từ EditText.

0

Viết mã này trong onResume()

searchView.setText("");  
    this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);  
6

khi hoạt động đến bố trí phụ huynh, và trong fragment quá cũng làm điều tương tự trong framelayout. Chỉ cần thêm thuộc tính này:

android:focusableInTouchMode="true" 
0

Tôi vừa yêu cầu tập trung vào một số nhóm xem khác và xóa tiêu điểm khỏi chế độ xem tìm kiếm.

0

tôi chỉ sử dụng android:focusable="false"

<SearchView 
     android:layout_width="match_parent" 
     android:id="@+id/search" 
     android:paddingLeft="8dp" 
     android:paddingRight="8dp" 
     android:focusable="false" 
     android:iconifiedByDefault="false" 
     android:layout_height="wrap_content"> 
</SearchView> 
Các vấn đề liên quan