2012-12-07 11 views
14

Wie kann ich ein ActionView (insbesondere ein SearchView) in einer Aktionsleiste zentrieren?Center SearchView in Action Bar

Wie in der Google Books App gesehen:

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

Setup (search_layout.xml) Meine aktuelle Layout:

<?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" /> 

Meine Aktionsleiste XML-Datei (menu.xml) :

Gibt es eine Möglichkeit, das Verhalten des SearchView der Bücher nachzuahmen?

+0

Haben Sie versucht, Android: layout_gravity = "center_horizontal"? – MillyMonster

+0

Ja, aber ohne Erfolg. – Whymarrh

+0

Hmm seltsam. Welche Art von Layout verwenden Sie? – MillyMonster

Antwort

17

A View im ActionBar zentriert nicht mit Action Items in einem xml menu, so weit erreicht werden, wie ich sagen kann. Es kann jedoch implementiert werden, indem ein benutzerdefiniertes Layout für die ActionBar festgelegt wird. Ein einfaches Beispiel:

Ein 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; 
    } 

} 

wo actionbar_layout ist:

<?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> 

Dies schafft auf einer 7 '' Tablette:

enter image description here

Notiere die iconifiedByDefault Attribut auffestgelegtauf der SearchView, die es erzwingt, erweitert und nicht nur als ein Symbol angezeigt. Dies kann erfordern, dass Sie hide the softkeyboard programmatically oder es wird geöffnet gestartet werden, wenn die Aktivität gestartet wird.

+0

Ich weiß, dass es nicht aus dem Bild, das ich in der Frage habe, sichtbar ist, aber der 'SearchView' in der Books App ist standardmäßig symbolisiert und zentriert sich dann in der Aktionsleiste bei der Erweiterung. Ist dies mit einer benutzerdefinierten Ansicht möglich? – Whymarrh

+2

Mit dem Layout in meiner Antwort, wenn Sie mit iconicifiedByDefault = true beginnen und dann auf das Symbol tippen, wird es sich in der ActionBar zentrieren. Aber ich weiß nicht, wo du die Startposition des nicht-expandierten Icons haben möchtest. Probieren Sie dieses Beispiel aus, setzen Sie iconifiedByDefault auf "true" und sehen Sie, ob Sie das möchten. Wenn nicht, und wenn Sie zum Beispiel möchten, dass das Symbol ganz rechts beginnt und dann zentriert auf Klick, wenn es erweitert wird, müssen Sie auf das Klickereignis warten und die Layoutparameter des benutzerdefinierten Layouts dynamisch von alignParentRight festlegen zu centerInParent. –

-1

Schauen Sie sich here an. Sie können einfach das Attribut android: actionViewClass = "android.widget.SearchView" verwenden, und das sollte gut funktionieren (denken Sie daran, dass Sie einen Verweis auf die searchView in Java erhalten und den Hinweis dort ändern können, wenn Sie das möchten).

Verwandte Themen