public class SpinnerView extends EditText
{
private static class OnClickPopupSpinnerListener implements OnClickListener
{
private final SpinnerView spinnerView;
private final List items;
public OnClickPopupSpinnerListener(SpinnerView spinnerView, List items) {
this.spinnerView = spinnerView;
this.items = new ArrayList<>(items);
}
@Override
public void onClick(View v) {
final ListPopupWindow lpw = new ListPopupWindow(spinnerView.getContext());
lpw.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView parent, View view, int position, long id) {
String item = items.get(position);
spinnerView.setText(item);
lpw.dismiss();
}
});
lpw.setAdapter(new ArrayAdapter(spinnerView.getContext(), android.R.layout.simple_list_item_1, items));
lpw.setAnchorView(v);
lpw.setModal(true);
lpw.show();
}
}
public SpinnerView(Context context) {
super(context);
}
public SpinnerView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SpinnerView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public SpinnerView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
public void setItems(List items) {
setOnClickListener(new OnClickPopupSpinnerListener(this, items));
}
}
在 layout.xml 就當作一般 EditText 使用。 在 activity 有設定 list 才會變成下拉選單。
@Override
protected void onCreate(Bundle savedInstanceState) {
etSize = (SpinnerView) findViewById(R.id.editSize);
etSize.setItems(Lists.newArrayList(new String[]{"small", "medium", "large"}));
...
}
參考資料:http://www.informit.com/articles/article.aspx?p=2078060&seqNum=4
Android Studio 1.3
compileSdkVersion 22
buildToolsVersion "23.0.0 rc3"
沒有留言:
張貼留言