2016-01-04 9 views
6

Eylem Çubuğunda bir arama düğmesiyle bir Android uygulaması oluşturmaya çalışıyorum ve kullanıcı arama düğmesine bastığında, işlem çubuğunda olduğu gibi bir arama metin kutusu görünür. Google'ın Messenger uygulaması (aşağıya bakın). aşağıda gösterildiği gibi Google's Messenger with collapsed search action. Google's Messenger with expanded search action.UI glitches içinde AppCompatActivity sonuçları ile SearchView'u kullanma

bunu uygulamaya çalışsa da benim app şöyle görünür: bu ile birkaç sorun vardır My app with collapsed search action My app with expanded search action

. Örneğin, elipsis ile basit bir "Arama" dan farklı olarak, "el ..." ile metin "Arama ..." okur, ama en ilgili şey, araç çubuğunda hiçbir geri düğmesi yok, arama düğmesine itilir solda çok uzak ve sağdaki taşma düğmesi yana itildi. Ayrıca, cihazımdaki fiziksel geri düğmesine basıldığında arama görünümü çökmez, sadece uygulama için mevcut.

Arama çubuğunu uygulamaya çalıştığım kodlardan bazıları aşağıdadır. Aşağıda görüldüğü gibi bir SearchViewExpandListener ayarlamaya çalıştım, böylece arama görünümü genişletildiğinde geri düğmesi görünecektir, ancak çalışmaz.

DÜZENLEME: Uygulamayı da onMenuItemActionExpand ve onMenuItemActionCollapsed yöntemlerimde kesme noktaları ile çalıştırdım ve bu yöntemlerin aslında hiç çağrılmadığını öğrendim.

MainActivity.java

import android.content.Context; 
import android.support.v4.view.MenuItemCompat; 
import android.support.v4.view.ViewPager; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.support.v7.widget.SearchView; 
import android.support.v7.widget.Toolbar; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.widget.Toast; 

public class MainActivity extends AppCompatActivity { 

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

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setDisplayShowHomeEnabled(false); 
    } 

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

     MenuItem searchItem = menu.findItem(R.id.action_search); 
     SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem); 
     // See above 
     MenuItemCompat.setOnActionExpandListener(searchItem, new SearchViewExpandListener(this)); 
     MenuItemCompat.setActionView(searchItem, searchView); 

     searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 

      @Override 
      public boolean onQueryTextSubmit(String s) { 
       Toast.makeText(MainActivity.this, "You searched " + s, Toast.LENGTH_SHORT).show(); 
       return false; 
      } 

      @Override 
      public boolean onQueryTextChange(String s) { 
       return false; 
      } 
     }); 
     return true; 
    } 

// See above 
    private class SearchViewExpandListener implements MenuItemCompat.OnActionExpandListener { 

     private Context context; 

     public SearchViewExpandListener (Context c) { 
      context = c; 
     } 

     @Override 
     public boolean onMenuItemActionExpand(MenuItem item) { 
      ((AppCompatActivity) context).getSupportActionBar().setDisplayShowHomeEnabled(true); 
      return false; 
     } 

     @Override 
     public boolean onMenuItemActionCollapse(MenuItem item) { 
      ((AppCompatActivity) context).getSupportActionBar().setDisplayShowHomeEnabled(false); 
      return false; 
     } 
    } 
} 

menu.xml

<?xml version="1.0" encoding="utf-8" ?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
    <item 
     android:id="@+id/action_search" 
     android:title="Search" 
     app:actionViewClass="android.support.v7.widget.SearchView" 
     app:showAsAction="ifRoom"/> 

    <item android:id="@+id/action_about" 
     android:title="About" 
     app:showAsAction="never"/> 
</menu> 

Aynı zamanda bu sorunu kimde sadece ben değil anlaşılmaktadır. This guide on implementing a SearchView, benzer sorunlarla karşılaşıyor gibi görünüyor.

This guy's problem which is like mine.

Yani Google'ın Malzeme Tasarımı kurallarda ve Google Messenger gibi, uygulamalarında böyle böyle bir arama çubuğuna sonuçlanan bir AppCompatActivity içinde bir arama çubuğu uygulamak için doğru yolu nedir ? Kendimi geçmişte sonsuza kadar Googling'le uğraştığımı hissediyorum, ama bana yardımcı olan hiçbir şey bulamıyorum.

+1

uygulamayı deneyin: showAsAction = "her zaman | collapseActionView", menünüzün action_search öğesinde –

cevap

3

Kullanım serchView menü öğesini showAsAction yılında always birlikte collapseActionView bayrağı

app:showAsAction="always|collapseActionView" 

collapseActionView bayrak kullanıcı onunla etkileşim değil widget'ı nasıl görüntüleneceğini gösterir: Widget uygulaması çubuğunda ise, Uygulama, widget'ı bir simge olarak göstermelidir. Widget taşma menüsünde ise, uygulama widget'ı bir menü öğesi olarak görüntülemelidir. Kullanıcı eylem görünümü ile etkileşime girdiğinde, uygulama çubuğunu doldurmak için genişler.

+0

Bu çözümün hiç bu kadar basit olmasını beklemiyordum. Teşekkürler! – Yharooer

İlgili konular