public class SpinnerView extends EditText { private static class OnClickPopupSpinnerListener implements OnClickListener { private final SpinnerView spinnerView; private final Listitems; 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"
沒有留言:
張貼留言