我想自定义折叠的微调器外观和下拉菜单的外观。代码方面,这就是我正在做的事情:
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.country_arrays,
R.layout.ssi);
//android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(R.layout.ssi2);
final Spinner states = (Spinner) findViewById(R.id.spinner);
states.setAdapter(adapter);
现在问题是,ssi
和ssi2
布局必须有TextView
作为 root ,即:
ssi.xml:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:singleLine="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:textColor="#00ff00"
android:background="#000020"
/>
ssi2.xml:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:singleLine="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:textSize="10pt"
android:textColor="#0000ff"
android:background="#800000"/>
这有效地阻止了对微调器项目执行任何类型的自定义/布局。我想要的是能够为微调器的折叠外观嵌入类似于自定义LinearLayout
的内容,并为展开的下拉列表添加一个截然不同的布局 - 例如带有图像的FrameLayout
和文本。即:
<LinearLayout>
<ImageView>...
<TextView>....
<LinearLayout> .... </LinearLayout>
</LinearLayout>
EDIT1 :有了Aleksey的答案,我几乎就在那里......除了,如何删除内置指示灯(见图)?
Default style for collapsed spinner
EDIT2 :我最终将visibility
微调器设置为gone
,然后有一个自定义小部件(比如ImageView
)转发{{1 } {}事件到onClick
。丑陋,但有效。
Spinner
答案 0 :(得分:0)
使用您自己的ArrayAdapter。覆盖 getDropDownView 和 getCustomDropDownView ,例如:
class CustomAdapter extends ArrayAdapter<String> {
public CustomAdapter(Context context, int itemLayoutResourceId, arrayList) {
super(context, itemLayoutResourceId, arrayList);
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
return getCustomDropDownView(position, convertView, parent);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return getCustomView(position, convertView, parent);
}
private View getCustomDropDownView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = LayoutInflater.from(context);
convertView = inflater.inflate(R.layout.spinner_item_dropdown, parent, false);
}
TextView label = (TextView) convertView.findViewById(R.id.textView);
label.setText(arrayList[position]);
return convertView;
}
public View getCustomView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = LayoutInflater.from(getContext());
convertView = inflater.inflate(R.layout.spinner_item, parent, false);
}
TextView label = (TextView) convertView.findViewById(R.id.text2);
label.setText(arraylist[position]);
return convertView;
}
}
并设置自己的项目布局。多数民众赞成。