Android的数据绑定微调适配器

问题描述:

我必须写一个@BindingAdapter它接受微调和EnumSet<T>Android的数据绑定微调适配器

@BindingAdapter(value = {"android:entries"}) 
public static <T extends Enum<T> & ITextable> void bindSpinnerData(Spinner spinner, EnumSet<T> entries) { 
    spinner.setAdapter(new ArrayAdapter<T>(spinner.getContext(), R.layout.support_simple_spinner_dropdown_item, new ArrayList<>(entries)) { 
     @NonNull 
     @Override 
     public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { 
      View v = super.getView(position, convertView, parent); 
      TextView textView = (TextView) v.findViewById(android.R.id.text1); 
      ITextable item = getItem(position); 
      textView.setText(item.getText()); 
      return v; 
     } 

     @Override 
     public View getDropDownView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { 
      View v = super.getDropDownView(position, convertView, parent); 
      TextView textView = (TextView) v.findViewById(android.R.id.text1); 
      ITextable item = getItem(position); 
      textView.setText(item.getText()); 
      return v; 
     } 
    }); 
} 

我有一个问题,因为如果一个Spinner项目的文本是太长,无法成单行线,在文本不包装,而切断这样的:

enter image description here

谁能告诉我在哪里和什么我应该改变包装的文本?

这实际上不是一个数据绑定问题。这是因为TextView没有默认包装,如果你不设置它们,也没有elipses。

你可能想尝试或者创建自己的布局,被夸大,或者你可以使用

textView.setSingleLine(false) 
textView.setMaxLines(2) 

如果您需要这并不工作覆盖getDropDownView

@Override 
public View getDropDownView(final int position, View convertView, ViewGroup parent) { 
    if (convertView == null) { 
     convertView = new TextView(_context); 
    } 

    TextView item = (TextView) convertView; 
    item.setText(yourItems.getItem(position)); 
    final TextView finalItem = item; 
    item.post(new Runnable() { 
     @Override 
     public void run() { 
      finalItem.setSingleLine(false); 
     } 
    }); 
    return item; 
} 

最简单的办法就是使用对话框设计将您的Spinner切换到您的xml中。

<Spinner android:spinnerMode="dialog" /> 
+0

我尝试setSinglLine on textView,但它不起作用。我将spinnerMode设置为对话框,它工作。谢谢 – forfiter9

+0

最后,我用第二个选项覆盖getDopDownView – forfiter9