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);
kullanıyor musunuz? . GetSupportActionBar() setNavigationMode (com.actionbarsherlock.app.ActionBar.NAVIGATION_MODE_LIST); – TouchBoarder
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
@vandzi no, Yapmadım ve Actionbar'ın "yerel" davranışı olduğunu doğrulamak için bunu yapmanın bir yolu yoktur. – kaffein