2013-10-30 5 views
15

arbeiten ich habe folgendes Suche in einer Layout-DateiAndroid Support-Bibliothek Suche XML-Attribute queryHint und iconifiedByDefault nicht

<android.support.v7.widget.SearchView 
    android:id="@+id/search_view" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent" 
    android:queryHint="@string/search" 
    android:iconifiedByDefault="false" 

    /> 

jedoch, wenn ich meine Anwendung ausführen keinen Hinweis angezeigt wird und die Suche iconified wird, in Code funktioniert es meine Frage ist das ein Fehler in der Support-Bibliothek?

Antwort

38

Sie fehlen erforderlich Namensraum. Ersetzen Sie [yourapp] durch Ihren App-Namen im XML-Layout. Verwenden Sie diesen Namespace für SearchView-Eigenschaften. Dieser Ansatz ist erforderlich, wenn Sie Ansichten aus der Supportbibliothek verwenden. Übrigens. Sie müssen das gleiche mit menu for AppCompat action bar tun.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:[yourapp]="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.v7.widget.SearchView 
     android:id="@+id/fragment_address_search" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@color/global_bg_front" 
     android:textSize="@dimen/global_text_medium" 
     android:textColor="@color/global_text_primary" 
     [yourapp]:queryHint="@string/fragment_address_search_hint" 
     [yourapp]:iconifiedByDefault="false" /> 

</LinearLayout> 

Sie können Ihre SearchView auch programmgesteuert einrichten. Siehe meine template on GitHub.

private void setupSearchView(SearchView searchView) 
{ 
    // search hint 
    searchView.setQueryHint(getString(R.string.fragment_address_search_hint)); 

    // background 
    View searchPlate = searchView.findViewById(android.support.v7.appcompat.R.id.search_plate); 
    searchPlate.setBackgroundResource(R.drawable.searchview_bg); 

    // icon 
    ImageView searchIcon = (ImageView) searchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon); 
    searchIcon.setImageResource(R.drawable.searchview_icon); 

    // clear button 
    ImageView searchClose = (ImageView) searchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn); 
    searchClose.setImageResource(R.drawable.searchview_clear); 

    // text color 
    AutoCompleteTextView searchText = (AutoCompleteTextView) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text); 
    searchText.setTextColor(getResources().getColor(R.color.global_text_primary)); 
    searchText.setHintTextColor(getResources().getColor(R.color.global_text_secondary)); 
} 
+0

Dank Ich war mir bewusst, wie das für AppCompact gearbeitet, aber war nicht bewusst, dass es das gleiche für die Support-Bibliothek war – forcewill

+1

können Sie mir helfen, wie searchIcon GONE zu machen und Raum nicht vor Hinweis verwenden? – AndrewS

+0

AndrewS: Versuchen Sie, AutoCompleteTextView anstelle von SearchView zu verwenden. – petrnohejl