2016-05-29 23 views
8

Sto cercando di aggiungere un semplice SearchView alla barra degli strumenti nella mia app. Tutto ciò che funziona bene si aspetta per il layout.Spazio a sinistra nella barra degli strumenti con SearchView android studio

C'è questo "spazio" tra l'icona NavigationDrawer e lo SearchView. Se imposto un titolo, lo spazio è riempito con quella stringa, altrimenti è vuoto.

Stringa vuota:

enter image description here

Con una stringa nel titolo:

enter image description here

Come faccio a rimuovere quello spazio vuoto fastidioso?

Edit:

sto usando come base di codice dell'esempio NavigationDrawer da Android Studio

main.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    tools:context=".MainActivity" 
    > 

    <item 
     android:id="@+id/action_search" 
     android:icon="@android:drawable/ic_menu_search" 
     android:title="Search" 
     app:actionViewClass="android.support.v7.widget.SearchView" 
     app:showAsAction="always" /> 

    </menu> 

app_bar_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:context="ga.musicforyou.musicforyou.MainActivity"> 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     > 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      app:contentInsetEnd="0dp" 
      app:contentInsetStart="0dp" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      /> 

    </android.support.design.widget.AppBarLayout> 


</android.support.design.widget.CoordinatorLayout> 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:openDrawer="start"> 

    <include 
     layout="@layout/app_bar_main" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <android.support.design.widget.NavigationView 
     android:id="@+id/nav_view" 
     app:theme="@style/ThemeOverlay.AppCompat.Dark" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:fitsSystemWindows="true" 
     app:itemTextColor="#FFF" 
     app:itemIconTint="#FFF" 

     app:menu="@menu/activity_main_drawer" /> 

</android.support.v4.widget.DrawerLayout> 
+0

si può mostrare il codice del layout? – slanecek

+0

Sì, ho modificato la mia domanda –

risposta

6

Toolbar si estende da FrameLayout e si può mettere una vista al suo interno. In questo modo:

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/toolbar" 
android:orientation="horizontal" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:background="@color/primary_color"> 

<SearchView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

</android.support.v7.widget.Toolbar> 

Modifica: lo si inserisce all'interno del layout come menu. Sarà sempre sul lato destro della barra degli strumenti, perché è un menu. Se vuoi avere un controllo più diretto sulle viste in una barra degli strumenti, mettilo lì come ti ho mostrato.

+0

Definetamente la risposta giusta! Puoi aiutarmi con il prossimo passo? Come posso impostare OnQueryTextListener su SearchView adesso? Prima che funzionasse con: SearchView.OnQueryTextListener queryTextListener; MenuItem searchItem = menu.findItem (R.id.action_search); SearchView searchView = (SearchView) searchItem.getActionView(); –

+0

@GregoryWullimann Ora dovrebbe comportarsi come una normale vista all'interno di un'attività, quindi basta "findViewById" nell'attività. – slanecek

+0

Grazie, ho avuto un piccolo problema tra android.widget.SearchView e android.support.v7.widget.SearchView, sembra che funzioni adesso. Grazie per il vostro aiuto! :) –

1

Ho impostato actionBar.setDisplayHomeAsUpEnabled(true) nel codice. Quindi solo aggiungere SearchView nella barra degli strumenti non ha funzionato per me e c'è uno spazio in più tra Navigazione Indietro e SearchView. Non ho titolo in Toolbar. Così ho personalizzato tutta la barra degli strumenti in questo modo:

<android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:layout_alignParentTop="true" // If parent layout is RelativeLayout 
     android:background="?attr/colorPrimary" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
     app:contentInsetLeft="0dp" // This is important, 
     app:contentInsetStart="0dp" // Otherwise there will be extra space on Left Side 
     app:popupTheme="@style/ThemeOverlay.AppCompat.Light"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:gravity="center_vertical" 
      android:orientation="horizontal"> 

      <ImageView 
       android:id="@+id/ivNavBack" 
       android:layout_width="56dp" 
       android:layout_height="56dp" 
       android:background="@drawable/your_drawable" // Custom background (optional), if you want to have a press effect 
       android:padding="16dp" 
       android:src="@drawable/ic_nav_back" /> // You can set icon of your choice here 

      <android.support.v7.widget.SearchView 
       android:id="@+id/searchView" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:queryHint="@string/search_view_hint" 
       app:queryHint="@string/search_view_hint" /> 

     </LinearLayout> 

    </android.support.v7.widget.Toolbar> 

... & nella vostra attività:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
SearchView searchView = (SearchView) toolbar.findViewById(R.id.searchView); 
searchView.onActionViewExpanded(); // Expands searchView by default 
// If this is not set, then you will see default search icon and you have to click it to expand SearchView. 

Ora non c'è bisogno di impostare actionBar.setDisplayHomeAsUpEnabled(true) nel codice. Basta gestire l'evento click di ivNavBack per questo.

enter image description here

Problemi correlati