2015年8月6日 星期四

[Android] EditText 做下拉選單

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"

沒有留言:

張貼留言

[Java] Invalid HTTP method: PATCH

最近系統需要使用 Netty4,所以把衝突的 Netty3 拆掉,然後就出現了例外。 pom.xml <dependency> <groupId>com.ning</groupId> <artifactId>as...