मैं एक्शन बार में एक खोज बटन के साथ एक एंड्रॉइड ऐप बनाने की कोशिश कर रहा हूं और जब उपयोगकर्ता खोज बटन पर दबाता है, तो एक्शन बार पर एक खोज टेक्स्ट बॉक्स दिखाई देता है, जैसे Google का मैसेंजर ऐप (नीचे देखें)। एप कॉम्पैक्ट एक्टिविटी के साथ सर्च व्यू का उपयोग यूआई ग्लिच में
मैं जैसा कि नीचे दिखाया इसे लागू करने की कोशिश की लेकिन मेरे ऐप इस तरह दिखता है:
इस के साथ कुछ समस्याएं हैं। उदाहरण के लिए, पाठ elipsis के साथ "खोज ..." पढ़ता है, elipsis के बिना एक सरल "खोज" के विपरीत, लेकिन अब तक सबसे अधिक संबंधित बात यह है कि टूलबार में कोई बैक बटन नहीं है, खोज बटन धक्का दिया जाता है बाईं ओर बहुत दूर, और दाईं ओर ओवरफ्लो बटन को तरफ धकेल दिया गया है। इसके अतिरिक्त, मेरे डिवाइस पर भौतिक बैक बटन दबाकर सर्चव्यू नहीं पड़ेगा, यह ऐप के लिए मौजूद है।
कुछ कोड जिन्हें मैंने खोज बार को लागू करने का प्रयास किया था, नीचे है। मैंने नीचे देखा गया SearchViewExpandListener
सेट करने का प्रयास किया ताकि खोज दृश्य का विस्तार होने पर बैक बटन दिखाई देगा, हालांकि यह काम नहीं करता है।
संपादित करें: मैंने अपने onMenuItemActionExpand
और onMenuItemActionCollapsed
विधियों पर ब्रेकपॉइंट्स के साथ ऐप भी चलाया, और मुझे पता चला कि इन विधियों को वास्तव में कभी नहीं कहा जाता है।
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>
यह भी प्रतीत होता है कि यह सिर्फ मुझे नहीं है, जो इस समस्या है। This guide on implementing a SearchView इसी तरह के मुद्दों का अनुभव प्रतीत होता है।
तो एक AppCompatActivity जो Google की वास्तविक डिज़ाइन दिशानिर्देशों में और है कि इस तरह Google मैसेंजर के रूप में अपने ऐप्लिकेशन में की तरह ऐसे ही एक खोज पट्टी में जो परिणाम में एक खोज पट्टी लागू करने के लिए सही तरीका क्या है? मुझे लगता है कि मैं अतीत के लिए अंतहीन रूप से गुगल रहा हूं, लेकिन मुझे कुछ भी नहीं मिला जो मेरी मदद करता है।
ऐप आज़माएं: showAsAction = "हमेशा | collapseActionView" आपके मेनू के action_search आइटम में –