2012-12-07 2 views
14

Come si può centrare un ActionView (un SearchView in particolare) all'interno di una barra delle azioni?Center SearchView nella barra delle azioni

Come visto in app Google Libri:

    Google Books app SearchView http://i46.tinypic.com/2z909is.png

Il mio attuale impostazione di layout (search_layout.xml):

<?xml version="1.0" encoding="utf-8"?> 
<SearchView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:queryHint="@string/search_hint" /> 

mia azione Bar file XML (menu.xml) :

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:icon="@+android:drawable/ic_menu_search" 
     android:title="@string/search" 
     android:showAsAction="always|collapseActionView" 
     android:id="@+id/searchMenuItem" 
     android:actionLayout="@layout/search_layout" /> 
</menu> 

C'è un modo per simulare il comportamento del SearchView dei libri?

+0

Hai provato Android: layout_gravity = "center_horizontal"? – MillyMonster

+0

Sì, ma senza successo. – Whymarrh

+0

Hmm dispari. Che tipo di layout stai usando? – MillyMonster

risposta

17

Un View centrato nel ActionBar non possono essere raggiunti con Action Items in un xml menu, per quanto posso dire. Tuttavia, può essere implementato impostando un layout personalizzato su ActionBar. Un esempio di base:

Un Activity:

public class MainActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     ActionBar actionBar = getActionBar(); 
     actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 
     actionBar.setDisplayShowHomeEnabled(true); 
     actionBar.setCustomView(R.layout.actionbar_layout); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

} 

dove actionbar_layout è:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <SearchView 
     android:id="@+id/mySearchView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:iconifiedByDefault="false" /> 
</RelativeLayout> 

crea questo su un 7 '' compressa:

enter image description here

Annotare il iconifiedByDefault attributo impostato su false su SearchView che lo costringe ad apparire espanso e non solo come un'icona. Questo potrebbe richiedere che tu sia hide the softkeyboard programmatically o che venga lanciato aperto all'avvio dell'attività.

+0

So che non è visibile dall'immagine che ho nella domanda, ma il 'SearchView' nell'app Books è iconizzato per impostazione predefinita e quindi si centra nella barra delle azioni durante l'espansione. È fattibile con una vista personalizzata? – Whymarrh

+2

Con il layout nella mia risposta, se si inizia con iconifiedByDefault = true e poi si tocca l'icona, si centrerà su ActionBar. Ma non so dove desideri che la posizione iniziale dell'icona non espansa sia. Prova questo esempio, imposta iconifiedByDefault su true e verifica se è quello che desideri. In caso contrario, e se ad esempio si desidera che l'icona all'estrema destra per iniziare e quindi spostare il centro su clic come è espansa, è necessario ascoltare l'evento clic e impostare i parametri di layout del layout personalizzato in modo dinamico da alignParentRight per centreInParent. –

-1

Dai uno sguardo allo here. Puoi semplicemente usare l'attributo android: actionViewClass = "android.widget.SearchView", e dovrebbe funzionare bene (tieni presente che puoi ottenere un riferimento a searchView in Java e cambiare il suggerimento lì se è quello che vuoi).