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
项目的文本是太长,无法成单行线,在文本不包装,而切断这样的:
谁能告诉我在哪里和什么我应该改变包装的文本?
答
这实际上不是一个数据绑定问题。这是因为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" />
我尝试setSinglLine on textView,但它不起作用。我将spinnerMode设置为对话框,它工作。谢谢 – forfiter9
最后,我用第二个选项覆盖getDopDownView – forfiter9