2014-09-19 75 views

回答

9

我面臨與android.support.v7.widget.SearchView相同的問題,並找到了解決方案。首先,在onCreateOptionsMenu,您可以獲取對搜索查看參考以及其關閉按鈕:

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    super.onCreateOptionsMenu(menu, inflater); 
    inflater.inflate(R.menu.search, menu); 

    MenuItem searchItem = menu.findItem(R.id.action_search); 
    mSearchView = (SearchView) MenuItemCompat.getActionView(searchItem); 

    try { 
     Field searchField = SearchView.class.getDeclaredField("mCloseButton"); 
     searchField.setAccessible(true); 
     mSearchCloseButton = (ImageView) searchField.get(mSearchView); 
    } catch (Exception e) { 
     Log.e(TAG, "Error finding close button", e); 
    } 
} 

現在,你可以嘗試修改按鈕。首先,我嘗試使用setVisibility(View.GONE)隱藏關閉按鈕,但這不起作用,因爲當用戶與SearchView交互時,SearchView會重置其關閉按鈕的可見性。所以我的解決方案是使用一個透明的繪製和禁用關閉按鈕的點擊:

if (mSearchCloseButton != null) { 
    mSearchCloseButton.setEnabled(false); 
    mSearchCloseButton.setImageDrawable(getResources().getDrawable(R.drawable.transparent)); 
} 

這篇文章幫助我還有:
http://novoda.com/blog/styling-actionbar-searchview

然而,這是相當哈克說實話。從https://android.googlesource.com/platform/frameworks/support.git/+/master/v7/appcompat/src/android/support/v7/widget/SearchView.java獲取SearchView源並創建您自己的SearchView版本可以隱藏/顯示關閉按鈕,這樣做會更清晰。

更新:
谷歌剛剛宣佈程序兼容性V21,其對於搜索查看小部件的造型改進:
http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html

+1

感謝。我不得不從searchview中刪除關閉按鈕。首先,我嘗試使用'mSearchCloseButton.setVisibility(View.GONE)',但它不起作用。然後我試着設置一個像你一樣透明的drawable,並讓我的目的得到滿足。 – 2015-09-20 11:54:56

3

你可以從搜索查看對象按鈕鏈接(程序兼容性v23.2.1):

searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.action_search)); 
ImageView mCloseButton = (ImageView) searchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn); 

然後你就可以監聽器分配給搜索查看文本更改(搜索查看也改變了按鈕的知名度,但聽者將在後面執行,將覆蓋這些變化):

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
    @Override 
    public boolean onQueryTextSubmit(String query) { 
     return false; 
    } 

    @Override 
    public boolean onQueryTextChange(String newText) { 
     mCloseButton.setVisibility(newText.isEmpty() ? View.GONE : View.VISIBLE); 
     return false; 
    } 
}); 

最後,監聽器隱藏圖標時,搜索查看從圖標化狀態展開:

searchView.setOnSearchClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     // hide "x" button if there is no text 
     String query = searchView.getQuery().toString(); 
     mCloseButton.setVisibility(query.isEmpty() ? View.GONE : View.VISIBLE); 
    } 
}); 
+0

的作品真的很不錯! – 2016-09-10 14:22:58

8

設置searchView.setIconifiedByDefault(false)將禁用崩潰搜索視圖,並刪除關閉按鈕。

0

您也可以使用這個隱藏關閉按鈕

ImageView closeBtn = (ImageView) searchView.findViewById(R.id.search_close_btn); 
closeBtn.setEnabled(false); 
closeBtn.setImageDrawable(null); 
相關問題