9

मैं अपने एक्शनबार नेविगेशन स्पिनर (मैं एक्शनबार शेरलॉक का उपयोग कर रहा हूं) की टेक्स्ट सामग्री को लपेटने की कोशिश कर रहा हूं। ऐसा लगता है कि मेरा स्पिनर ड्रॉपडाउन सूची में निहित वस्तुओं की चौड़ाई लेता है।ActionBarSherlock नेविगेशन स्पिनर में टेक्स्ट सामग्री को कैसे लपेटें

मैं स्पिनर में चयनित आइटम को अपनी चौड़ाई के अनुसार "लपेटा" कैसे बना सकता हूं? जीमैप्स एक्शन बार स्पिनर में एक उदाहरण मिल सकता है।

+0

क्या आप उपयोग करते हैं? । GetSupportActionBar() setNavigationMode (com.actionbarsherlock.app.ActionBar.NAVIGATION_MODE_LIST); – TouchBoarder

+0

अरे, क्या आपने इसे हल किया? मैं वही काम करना चाहता हूं लेकिन मुझे कोई समाधान नहीं मिल रहा है। ऐसा लगता है कि यह एक्शनबार डिफ़ॉल्ट व्यवहार है (एंड्रॉइड 4.2 में भी डिफ़ॉल्ट नहीं है एक्शनबर्सहेलॉक)। – vandzi

+0

@vandzi no, मैंने नहीं किया और मैं पुष्टि करता हूं कि यह एक्शनबार का "मूल" व्यवहार है इसलिए ऐसा करने का कोई तरीका नहीं है। – kaffein

उत्तर

1

अद्यतन:

यहाँ डाउनलोड मेरी उदाहरण परियोजना: Spinner width test (Dropbox folder) (यह इस जवाब में प्रदान की दोनों समाधान शामिल हैं)।

के बाद से कर्निंग (पत्र-रिक्ति) वर्णों के विभिन्न पाठ के आधार पर है, स्पिनर की चौड़ाई भी चौड़ाई जवाब मैंने पहले (नीचे) postet बदल

तो बजाय शीर्षक सबस्ट्रिंग, सिर्फ इस तरह पिक्सेल में TextView की चौड़ाई सेट:

textView.setWidth(200); 
  • पाठ अब छोटा कर दिया और साथ समाप्त हो जाएगा ".."।

  • स्पिनर की चौड़ाई एक ही आकार बनी हुई है।

  • आप ड्रॉप डाउन सूची और स्पिनर

  • तुम अब भी एक कस्टम SpinnerAdapter की जरूरत के लिए अलग अलग चौड़ाई सेट कर सकते हैं, लेकिन आप एक कस्टम की जरूरत नहीं है
    SpinnerItem क्लास, बस एडाप्टर एक स्ट्रिंग देना [ ] सरणी

spinner.setAdapter (नई TruncatedSpinnerAdapter (stringArray)); // String []

TruncatedSpinnerAdapter में:

public class TruncatedSpinnerAdapter implements SpinnerAdapter { 

    String[] spinnerItem; 

    public TruncatedSpinnerAdapter(String[] spinnerItem) { 
     this.spinnerItem = spinnerItem; 
    } 

// ...more required interface callbacks here... 

    /** 
    * Returns the View that is shown when a spinner item is selected. 
    */ 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = getLayoutInflater().inflate(
       android.R.layout.simple_spinner_item, null); 
     TextView textView = (TextView) view.findViewById(android.R.id.text1); 
     textView.setText(spinnerItem[position]); 
     //Set the width of the TextView in pixel. 
     //the text will now get truncated and ending with ".." 
     textView.setWidth(200); 
     return textView; 
    } 

उत्तर अद्यतन करने से पहले:

आप कस्टम स्पिनर एडाप्टर बनाकर टेक्स्ट सॉर्ट को लपेट सकते हैं जहां आप स्पिनर व्यू में दिखाए गए पाठ की लंबाई को नियंत्रित करते हैं और स्पिनर ड्रॉप डाउन व्यू में।

/** 
    * A SpinnerItemAdapter to handle SpinnerItem Objects, 
    * displays the ArrayList of SpinnerItem Objects. 
    */ 
    public class SpinnerItemAdapter implements SpinnerAdapter{ 

     /** 
     * The internal data, ArrayList of SpinnerItem Objects. 
     */ 
     SparseArray<SpinnerItem> spinnerItem; 

     public SpinnerItemAdapter(SparseArray<SpinnerItem> spinnerItem){ 
      this.spinnerItem = spinnerItem; 
     } 

     /** 
     * Returns the Size 
     */ 
     @Override 
     public int getCount() { 
      return spinnerItem.size(); 
     } 
     /** 
     * Returns a SpinnerItem Object at the specified position. 
     */ 
     @Override 
     public Object getItem(int position) { 
      return spinnerItem.valueAt(position); 
     } 


// ...more required interface callbacks here... 


     /** 
     * Views displayed when the Spinner is clicked, the drop 
     * down list of spinner items. 
     */ 
     @Override 
     public View getDropDownView(int position, View convertView, 
       ViewGroup parent) { 
      View view=getLayoutInflater().inflate(android.R.layout.simple_spinner_dropdown_item, null); 
      TextView v=(TextView)view.findViewById(android.R.id.text1); 
      v.setText(spinnerItem.valueAt(position).getDropDownTitle());  
      return v; 
     } 
     /** 
     * Returns the View that is shown when a spinner item is selected. 
     */ 
     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      View view=getLayoutInflater().inflate(android.R.layout.simple_spinner_item, null); 
      TextView v=(TextView)view.findViewById(android.R.id.text1); 
      v.setText(spinnerItem.valueAt(position).getShortTitle()); 
      return v; 
     } 

    } 

एक कस्टम SpinnerItem क्लास कि पकड़ और स्पिनर दृश्य के लिए एक छोटा शीर्षक लौट सकते हैं साथ एडाप्टर पॉप्युलेट।

class SpinnerItem { 

    // SpinnerItem fields, including variable of type SpinnerItem 
    public String title = ""; 
    // sets the width of the spinnerItem 
    public int titleLength = 10;//default value 
    public int titleDropDownLength = 20; 

    public long id; 

    // SpinnerItem methods() 

    /** 
    * Title with max characters displayed, set by titleLength; 
    * 
    * @return title of the spinnerItem. 
    */ 
    public CharSequence getShortTitle() { 
     if (title.length() == 0) 
      return "?";// 
     else if (title.length() > 0 && title.length() <= titleLength) { 
      return title; 
     } else { 
      String shortTile = title.substring(0, titleLength).trim() + ".."; 
      return shortTile; 
     } 
    } 

    public CharSequence getDropDownTitle() { 
     if (title.length() == 0) 
      return "?";// 
     else if (title.length() > 0 && title.length() <= titleDropDownLength) { 
      return title; 
     } else { 
      String shortTile = title.substring(0, titleDropDownLength).trim() + ".."; 
      return shortTile; 
     } 
    } 
} 
SpinnerItem वर्ग आप शीर्षक एक मैक्स शीर्षक लंबाई की स्थापना जब आप SpinnerItem वस्तु बनाने के द्वारा स्पिनर आइटम दृश्य में दिखाया गया की लंबाई को नियंत्रित कर सकते हैं के साथ

//Create an ArrayList for the Adapter with SpinnerItems 
     SparseArray<SpinnerItem> spinnerItems = new SparseArray<SpinnerItem>(); 

     //Some dummy Cheese titles for the spinner items 
     String[] sCheeseStrings = { 
       "Abbaye de Belloc", "Abbaye du Mont des Cats", "Abertam", "Abondance", "Ackawi", 
       "Acorn", "Adelost", "Affidelice au Chablis", "Afuega'l Pitu", "Airag", "Airedale"}; 

     for (int i = 0; i < sCheeseStrings.length; i++) { 
      SpinnerItem spinnerItem= new SpinnerItem(); 
      spinnerItem.title=sCheeseStrings[i]; 
      spinnerItem.id=i; 
      spinnerItem.titleLength=MAX_TITLE_LENGTH; 
      spinnerItem.titleDropDownLength=MAX_DROP_DOWN_TITLE_LENGTH; 
      spinnerItems.append(i, spinnerItem); 
     } 
     spinnerAdapter = new SpinnerItemAdapter(spinnerItems); 

फिर स्पिनर

spinner.setAdapter(spinnerAdapter); 

ActionBar को spinnerAdapter जोड़ें: menu.xml उदाहरण

में स्पिनर
 // For API below 11 use ActionBar Sherlock with Android Support Library 
//  getSupportMenuInflater().inflate(R.menu.activity_menu, menu); 
     // For API above 11 
     getMenuInflater().inflate(R.menu.activity_menu, menu); 
     spinner_menu = (Spinner) menu.findItem(R.id.menu_spinner).getActionView(); 
     spinner_menu.setAdapter(spinnerAdapter); 
1

वास्तव में एंड्रॉयड सभी मदों के लिए getView() फोन करने की कोशिश करेंगे, और व्यापक चौड़ाई के साथ स्पिनर की चौड़ाई निर्धारित करें। कृपया मेरे समाधान को किसी अन्य धागे में देखें। https://stackoverflow.com/a/15356679/2159849

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