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 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
. Ö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.
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.
uygulamayı deneyin: showAsAction = "her zaman | collapseActionView", menünüzün action_search öğesinde –