5

Ho seguito l'ottima risposta per questo question per rendere il widget SearchView nel mio ActionBar adatto a un tema personalizzato. Funziona perfettamente per la modalità verticale, ma in orizzontale il sistema operativo ridurrà l'altezza di ActionBar per massimizzare la proprietà dello schermo del contenuto. Invece di montare il widget di SearchView senza margini nel ActionBar proprio come gli altri oggetti, è tagliato fuori in alto:Come risolvere lo sfondo personalizzato di SearchView cut-off in orizzontale?

SearchView widget with chopped off top

ho scavato attraverso la res-cartella della sorgente di Android, ma potrebbe non trovare layout o risorse specializzati che rendano ovvio come risolvere questo problema o persino come Android stesso possa adattare il widget Holo SearchView predefinito alla barra delle azioni ridotta.

Qualsiasi approfondimento è gradito. GRAZIE.

risposta

3

È necessario utilizzare una versione ridotta del testo di modifica. Le dimensioni instrinsic dei drawable sono inferiori ai drawable del testo di modifica predefinito.

Scopri i drawable usati qui

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.3_r2.1/frameworks/support/v7/appcompat/res/drawable/abc_textfield_searchview_holo_dark.xml?av=f

+0

Finalmente risolto risolvere il problema dal nostro registro posteriore. Grazie mille per il suggerimento! – Chris

3

ho avuto un problema simile, ed era in grado di risolvere il problema semplicemente cambiando la gravità della 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

Anche questo sembra un possibile work-around, tuttavia la risposta di Jonathan è la strada da percorrere se puoi permetterti il ​​tempo di ridisegnare manualmente le risorse. – Chris

0

Il SearchView è non facilmente personalizzabile ma ho trovato un lavoro in giro. La mia ricerca e il mio codice sono per lo più presi dalla prima risposta trovata qui: Changing the background drawable of the searchview widget. Dopo aver impostato lo sfondo nel mio file XML in questo modo:

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

ho aggiunto il seguente codice al mio file Java per alterare l'imbottitura del 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); 

Impostazione l'imbottitura mi ha permesso di ottenere il testo dove volevo.

Problemi correlati