5

Podążyłem za wspaniałą odpowiedzią dla tego question, aby widget SearchView w moim ActionBar pasował do niestandardowego motywu. Działa to dobrze w trybie portretowym, ale w krajobrazie system operacyjny zmniejsza wysokość paska akcji, aby zmaksymalizować ekran zawartości. Zamiast montażu widget SearchView bez marginesów karne ActionBar podobnie jak inne przedmioty, jest odcięty na górze:Jak naprawić wyłączenie niestandardowego tła wyszukiwania w krajobrazie?

SearchView widget with chopped off top

mam wykopane przez RES-folderze źródła Androida, ale może nie znajdziemy żadnych specjalistycznych układów ani zasobów, które mogłyby wyjaśnić, jak to naprawić, a nawet jak sam system Android udaje się dopasować domyślny widżet Holo SearchView do zmniejszonego paska akcji.

Wszelkie spostrzeżenia są mile widziane. DZIĘKI.

Odpowiedz

3

miałem podobny problem, i był w stanie go naprawić poprzez zmianę wagi EditText:

try { 
    int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null); 
    AutoCompleteTextView searchPlate = (AutoCompleteTextView) searchView.findViewById(searchPlateId); 

    //fixes the gravity (fixes text cutoff for landscape mode) 
    searchPlate.setGravity(Gravity.LEFT|Gravity.BOTTOM); 
} 
catch (Throwable t) 
{ 
    //not sure if the above code will always work (layouts change), but works well for the current API. 
    t.printStackTrace(); 
} 
+0

To także wydaje się być możliwym do obejścia, jednak odpowiedź Jonathana jest drogą, jeśli możesz pozwolić sobie na czas, aby ręcznie przerysować zasoby. – Chris

0

searchView jest niełatwo było dostosować, ale znalazłem pracę. Moje badania i kod są w większości zaczerpnięte z pierwszej odpowiedzi znalezionej tutaj: Changing the background drawable of the searchview widget. Po ustawieniu tło w moim pliku XML jak poniżej:

 `<SearchView 
     android:layout_width="match_parent" 
     android:layout_height="30dp" 
     android:background="@drawable/rounded_grey_search_bar" 
     android:clickable="true" 
     android:iconifiedByDefault="false"/>` 

I dodaje następujący kod do mojego pliku Java, aby zmienić wyściółkę z SearchView:

SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 


    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 

    int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_plate", null, null); 
    searchView.findViewById(searchPlateId).setBackgroundResource(R.drawable.rounded_grey_search_bar); 

    int voiceSearchPlateId = searchView.getContext().getResources().getIdentifier("android:id/submit_area", null, null); 
    searchView.findViewById(voiceSearchPlateId).setBackgroundResource(R.drawable.rounded_grey_search_bar); 

    int searchTextViewId = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null); 
    TextView searchTextView = (TextView) searchView.findViewById(searchTextViewId); 
    searchTextView.setPadding(20, 20, 20, 20); 

Ustawianie wyściółki pozwoliło mi uzyskać tekst, w którym chciałem.

Powiązane problemy