ListPopupWindow的學習和使用

這一段時間在做一個app主要是與加油機通訊。裏面涉及到EditView的下拉框問題,經過百般的思考和摸索終於實現下拉框。並且動態更改右邊的小圖標。如圖所示

效果很nice,我覺得我得記錄下來,免得我忘了,這個功能主要用到的是ListPopupWindow,請看代碼

private void setListPopupWindow(final EditText mEditText1,final EditText mEditText_type, final ListPopupWindow mListPop, final List<Map<String,String>> list1){

    mListPop.setAdapter(new ArrayAdapter<Map<String,String>>(this, android.R.layout.simple_expandable_list_item_1, list1));//適配,直接匿名內部類
    mListPop.setWidth(840);//寬度
    mListPop.setHeight(620);//高度
    mListPop.setModal(true);//設置是否是模式
    mListPop.setDropDownGravity(Gravity.LEFT);//對齊模式,左對齊
    mListPop.setBackgroundDrawable(new ColorDrawable(ContextCompat.getColor(this,R.color.mintcream)));//設置背景色
    mListPop.setAnchorView(mEditText1);//設置ListPopupWindow的錨點,即關聯PopupWindow的顯示位置和這個錨點
    mListPop.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                                int position, long id) {
            mEditText1.setText(list1.get(position).toString());
            String type = mEditText_type.getText().toString().trim();
            if(type.equals("1")){//如果狀態爲1則表明關閉
                mEditText1.setCompoundDrawablesWithIntrinsicBounds(null, null, getResources().getDrawable(R.mipmap.on), null);
                mListPop.show();
                mEditText_type.setText("0");
            }else {
                mEditText1.setCompoundDrawablesWithIntrinsicBounds(null, null, getResources().getDrawable(R.mipmap.down), null);
                mListPop.dismiss();
                mEditText_type.setText("1");

            }
        }
    });
    mListPop.setOnDismissListener(new PopupWindow.OnDismissListener() {//監聽彈出框是否存在,用於判斷右邊的圖標是否變化
        @Override
        public void onDismiss() {
            mEditText1.setCompoundDrawablesWithIntrinsicBounds(null, null, getResources().getDrawable(R.mipmap.down), null);
            mEditText_type.setText("1");
        }
    });
}

ListPopupWindow是在參照控件下方顯示列表窗口,不同的是,它在展示上更加靈活,開發者可以自定義列表彈窗的大小與樣式。 
這是ListPopupWindow的常用方法說明: 
setAdapter : 設置下拉列表的數據適配器,指定主題。 
setModal : 設置顯示模式。通常設置爲true。  
setAnchorView : 設置下拉列表的參照控件。下拉列表在顯示時將展現在參照控件的下方,注意:如果不設置參照控件就直接調用show函數,系統不知道要把下拉列表在何處展示,只能是異常退出了。 
setDropDownGravity : 設置下拉列表的對齊方式。Gravity.START表示與參照控件左側對齊,Gravity.END表示與參照控件右側對齊。注意:該函數只在4.4.2及以上版本中使用。 
setOnItemClickListener : 設置列表項的點擊監聽器。 
show : 顯示下拉列表窗口。 
dismiss : 關閉下拉列表窗口。 
setOnDismissListener : 設置下拉列表的關閉監聽器。

ListPopupWindow與EditText結合使用,效果上有點類似AutoCompleteTextView,即都會在編輯框下方彈出文本列表可供選擇。但它們之間也有明顯的區別:AutoCompleteTextView一旦設置適配器,則它會根據編輯框的文本來自動調整文本列表;而ListPopupWindow的文本列表是固定的,不會自動調整。

網上也搜了點,自己也理解了點,安卓開發之路任重而道遠,只要細心,一切都不是問題。寫這篇文章是給我自己寫的,不要浮躁,不要只停留在表面。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章