Android SearchView不顯示搜索icon


版權聲明:本文為xing_star原創文章,轉載請注明出處!

本文同步自http://javaexception.com/archives/80

背景:

之前碰到了一個頁面展示問題,SearchView放在Toolbar里面,展示在頁面頂部,發現進入這個頁面后,左上角是箭頭圖標(表示點擊返回),中間區域就是搜索欄,不過看到會顯示搜索icon🔍感覺額外丑陋,就想要把它隱藏掉,找了一圈沒有找到如何隱藏Android中android.support.v7.widget.SearchView的icon,只好自己慢慢研究,手動調試觀察效果了。

解決辦法:

經過一段時間的調試,得出了結論,先給出方案。

final ImageView searchIcon = (ImageView) mSearchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon);
mSearchView.post(new Runnable() {
    @Override
    public void run() {
        searchIcon.setImageDrawable(null);
        searchIcon.setVisibility(View.GONE);
    }
});

接着從android.support.v7.widget.SearchView的源碼中,找找原因。

private void updateViewsVisibility(final boolean collapsed) {
    mIconified = collapsed;
    // Visibility of views that are visible when collapsed
    final int visCollapsed = collapsed ? VISIBLE : GONE;
    // Is there text in the query
    final boolean hasText = !TextUtils.isEmpty(mSearchSrcTextView.getText());
 
    mSearchButton.setVisibility(visCollapsed);
    updateSubmitButton(hasText);
    mSearchEditFrame.setVisibility(collapsed ? GONE : VISIBLE);
 
    final int iconVisibility;
    if (mCollapsedIcon.getDrawable() == null || mIconifiedByDefault) {
        iconVisibility = GONE;
    } else {
        iconVisibility = VISIBLE;
    }
    mCollapsedIcon.setVisibility(iconVisibility);
 
    updateCloseButton();
    updateVoiceButton(!hasText);
    updateSubmitArea();
}

updateViewsVisibility()方法很關鍵,會被執行多次,這個方法就決定了mCollapsedIcon是否顯示隱藏,通過分析,得出需要將mCollapsedIcon對應的Drawable設置為null,mCollapsedIcon.setVisibility(iconVisibility)才會隱藏搜索圖標。代碼比較簡單,主要是要有意識的去翻看源碼,看看內部實現。

mCollapsedIcon = findViewById(R.id.search_mag_icon);

還可以找到SearchView對應的xml布局文件,路徑是appcompat-v7/res/layout/abc_search_view.xml

到此問題完美解決。

遺留一個小問題,如果要更換SearchView的closebtn(類似ClearEditText的清空內容的圖標)對應的圖片資源呢?咱們留到下一篇講解。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM