9

ActionBar gezinme döndürücümün metin içeriğini kaydırmaya çalışıyorum (ActionBar Sherlock kullanıyorum). Görünüşte, çevirmenim açılan listede yer alan öğelerin genişliğini alıyor.ActionBarSherlock gezici döndürücüde metin içeriği nasıl kaydırılır

Seçilen öğeyi, sıkıcının enine göre "sarılı" olarak nasıl yapabilirim? GMaps eylem çubuğu çeviricisinde bir örnek bulunabilir.

+0

kullanıyor musunuz? . GetSupportActionBar() setNavigationMode (com.actionbarsherlock.app.ActionBar.NAVIGATION_MODE_LIST); – TouchBoarder

+0

Hey, çözdün mü? Aynı şeyi yapmak istiyorum ama hiçbir çözüm bulamıyorum. Actionbar varsayılan davranışı gibi görünüyor (hatta android 4.2 varsayılan Actionbarsherlock değil). – vandzi

+0

@vandzi no, Yapmadım ve Actionbar'ın "yerel" davranışı olduğunu doğrulamak için bunu yapmanın bir yolu yoktur. – kaffein

cevap

1

GÜNCELLEME:

burada örnek proje indir: (bu yanıtında sağlanan her iki çözümlerini içerir) Spinner width test (Dropbox folder).

karakter karakter aralığı (letter-spacing) metine göre farklı olduğu için, eğiren genişliği de genişliğe Daha önce (aşağıda) postet cevabı değişti

Bunun yerine başlığını alt dize, sadece bu gibi pikselde bulunan TextView genişliğini ayarlayın:

textView.setWidth(200); 
  • metin artık kesilmiş ve biten alacak "..".

  • Eğiricinin genişliği aynı boyutta kalır.

  • Açılan liste ve

  • Hala özel SpinnerAdapter ihtiyaç spinner için farklı genişlik de ayarlayabilirsiniz, ancak
    SpinnerItem Sınıf, sadece [adaptörü bir Dize vermek Özel bir ihtiyacım yok ] dizi.

spinner.setAdapter (yeni TruncatedSpinnerAdapter (stringArray)); // String [] TruncatedSpinnerAdapter olarak

:

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; 
    } 

Yanıt güncellemeden önce:

Siz Döndürücü görünümünde ve döndürücü aşağı açılır görünümünde gösterdiğiniz metnin uzunluğunu kontrol ettiğiniz özel bir SpinnerAdapter oluşturarak metni türüne göre sarmalayabilir.

/** 
    * 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; 
     } 

    } 

tutmak ve bükme görünümü için kısaltılmış bir başlık döndürebilir bir özel SpinnerItem sınıfı olan adaptör doldurun. Eğer SpinnerItem Nesnesi oluştururken bir MAKS başlık uzunluğunu ayarlayarak spinner öğesi görünümünde gösterilen başlığın uzunluğunu kontrol edebilirsiniz SpinnerItem sınıfı ile

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; 
     } 
    } 
} 

.

//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); 

Sonra Spinner

spinner.setAdapter(spinnerAdapter); 

İşlem Çubuğu için spinnerAdapter ekleyin: menu.xml Örnek

yılında Spinner
 // 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

tüm öğeler için GetView() aramaya çalışacağız Aslında android, ve en geniş genişlikteki eğiricinin genişliğini ayarlayın. Lütfen başka bir iş parçacığındaki çözümüme bakın. https://stackoverflow.com/a/15356679/2159849

İlgili konular