Android的微调工具栏中显示的文本,但没有图片
问题描述:
menu_catalog.xmlAndroid的微调工具栏中显示的文本,但没有图片
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/catalogactivityfilter"
app:showAsAction="always"
android:icon="@mipmap/filter"
android:title="Sort"
app:actionViewClass="android.widget.Spinner"
/>
</menu>
在我的片段
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
getActivity().getMenuInflater().inflate(R.menu.menu_catalog, menu);
setUpFilter(menu);
}
public void setUpFilter(Menu menu){
MenuItem item = menu.findItem(R.id.catalogactivityfilter);
Spinner spinner = (Spinner) MenuItemCompat.getActionView(item);
ArrayAdapter adapter = ArrayAdapter.createFromResource(getActivity(),
R.array.array_sorting_options, android.R.layout.simple_spinner_item);
// Specify dropdown layout style - simple list view with 1 item per line
adapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
spinner.setAdapter(adapter);
}
在我toolbar
,我收到spinner
,但它不显示当我打开应用程序时,图像显示选项。我想在应用程序打开时设置图像catalogactivityfilter
。
答
你需要创建一个扩展ArrayAdapter定制的适配器和覆盖getView
和getDropDownView
这里是一个自定义适配器我做了一个使用setCompoundDrawablesWithIntrinsicBounds
设置在TextView中可绘制。 你可以简单地使用这样的:
spinner.setAdapter(new CustomSpinnerAdapter(this));
CustomSpinnerAdapter.java
public class CustomSpinnerAdapter extends ArrayAdapter<ItemsEnum> {
private Context mContext;
private LayoutInflater mLayoutInflater;
public CustomSpinnerAdapter(Context context) {
super(context, 0, ItemsEnum.values());
mContext = context;
mLayoutInflater = (LayoutInflater)mContext.getSystemService(LAYOUT_INFLATER_SERVICE);
}
@NonNull
@Override
public View getView(int position, View convertView, @NonNull ViewGroup parent) {
CheckedTextView checkedTextView= (CheckedTextView) convertView;
if (checkedTextView== null) {
checkedTextView = (CheckedTextView) mLayoutInflater.inflate(android.R.layout.simple_spinner_dropdown_item, parent, false);
}
ItemsEnum item = getItem(position);
checkedTextView.setText(item.getTitle());
checkedTextView.setCompoundDrawablesWithIntrinsicBounds(item.getResId(), 0, 0, 0);
return checkedTextView;
}
@Override
public View getDropDownView(int position, View convertView, @NonNull ViewGroup parent) {
CheckedTextView checkedTextView = (CheckedTextView) convertView;
if (checkedTextView == null) {
checkedTextView = (CheckedTextView) mLayoutInflater.inflate(android.R.layout.simple_spinner_dropdown_item, parent, false);
}
ItemsEnum item = getItem(position);
checkedTextView.setText(item.getTitle());
checkedTextView.setCompoundDrawablesWithIntrinsicBounds(item.getResId(), 0, 0, 0);
return checkedTextView;
}
}
ItemsEnum.java
enum ItemsEnum {
OPTION1("Option 1", R.mipmap.ic_launcher),
OPTION2("Options 2", R.mipmap.ic_launcher_round);
private String title;
private Integer resId;
ItemsEnum(String title, Integer resId){
this.title = title;
this.resId = resId;
}
public Integer getResId() {
return resId;
}
public String getTitle() {
return title;
}
}