2016-01-04 10 views
6

मैं एक्शन बार में एक खोज बटन के साथ एक एंड्रॉइड ऐप बनाने की कोशिश कर रहा हूं और जब उपयोगकर्ता खोज बटन पर दबाता है, तो एक्शन बार पर एक खोज टेक्स्ट बॉक्स दिखाई देता है, जैसे Google का मैसेंजर ऐप (नीचे देखें)। Google's Messenger with collapsed search action. Google's Messenger with expanded search action.एप कॉम्पैक्ट एक्टिविटी के साथ सर्च व्यू का उपयोग यूआई ग्लिच में

मैं जैसा कि नीचे दिखाया इसे लागू करने की कोशिश की लेकिन मेरे ऐप इस तरह दिखता है: My app with collapsed search action My app with expanded search action

इस के साथ कुछ समस्याएं हैं। उदाहरण के लिए, पाठ 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 इसी तरह के मुद्दों का अनुभव प्रतीत होता है।

This guy's problem which is like mine.

तो एक AppCompatActivity जो Google की वास्तविक डिज़ाइन दिशानिर्देशों में और है कि इस तरह Google मैसेंजर के रूप में अपने ऐप्लिकेशन में की तरह ऐसे ही एक खोज पट्टी में जो परिणाम में एक खोज पट्टी लागू करने के लिए सही तरीका क्या है? मुझे लगता है कि मैं अतीत के लिए अंतहीन रूप से गुगल रहा हूं, लेकिन मुझे कुछ भी नहीं मिला जो मेरी मदद करता है।

+1

ऐप आज़माएं: showAsAction = "हमेशा | collapseActionView" आपके मेनू के action_search आइटम में –

उत्तर

3

उपयोग showAsAction serchView मेनू आइटम पर में always के साथ collapseActionView झंडा

app:showAsAction="always|collapseActionView" 

collapseActionView झंडा कैसे विजेट जब उपयोगकर्ता इसे के साथ बातचीत नहीं कर रहा है प्रदर्शित करने के लिए इंगित करता है: विजेट एप्लिकेशन बार पर है, तो ऐप को विजेट को आइकन के रूप में प्रदर्शित करना चाहिए। यदि विजेट ओवरफ़्लो मेनू में है, तो ऐप को विजेट आइटम के रूप में विजेट प्रदर्शित करना चाहिए। जब उपयोगकर्ता एक्शन व्यू के साथ इंटरैक्ट करता है, तो यह ऐप बार भरने के लिए फैलता है।

+0

मैंने कभी भी इस सरल होने का समाधान नहीं किया। धन्यवाद! – Yharooer

संबंधित मुद्दे