Android Spinner 下拉框簡單應用 詳細註解
目錄
- Android Spinner
- 程式碼部分
- Spinner程式碼介紹
- 核心程式碼
- 說在最後
@
Android Spinner
Spinner 提供下拉列表式的輸入方式,該方法可以有效節省手機螢幕上的顯示空間。
本次我將使用最簡單的Spinner來完成一個下拉框。完成的功能如下面的動圖
程式碼部分
Spinner程式碼介紹
list_Q.add("區縣");//下拉框列表,用於儲存下拉的內容 adapter_Q = new ArrayAdapter<String>(getActivity(),R.layout.support_simple_spinner_dropdown_item,list_Q); //建立adpter介面卡(必須)。 //R.layout.support_simple_spinner_dropdown_item,spinner框樣式,這裡我使用的都是預設的。 spinner_Q.setAdapter(adapter_Q);//spinner繫結adpter,到這裡你的下拉框已經可以顯示了。 //spinner_Q.setEnabled(false);//設定spinner不可操作 //設定spinner的選擇監聽事件 spinner_Q.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { } @Override public void onNothingSelected(AdapterView<?> adapterView) { } });
adapter_Q = new ArrayAdapter
adapter_Q .setDropDownViewResource(==R.layout.item_drop==); 自定義下拉的字型樣式
這樣式你都可以自己寫一個XMAL檔案,我的使用的都是預設的就不在這裡解釋了android:dropDownSelector:列表框被選中時的背景
下面引用一個博主的內容
android:dropDownWidth:設定下拉列表框的寬度
android:gravity:設定裡面元件的對其方式
android:popupBackground:設定列表框的背景
android:prompt:設定對話方塊模式的列表框的提示資訊(標題),只能夠引用string.xml中的資源id,而不能直接寫字串
android:spinnerMode:列表框的模式,有兩個可選值:dialog:對話方塊風格的視窗
dropdown:下拉選單風格的視窗(預設) android:overlapAnchor =
false:設定下拉框不覆蓋顯示框。(重要!!!) 可選屬性:android:entries:使用陣列資源設定下拉列表框的列表專案
———————————————— 版權宣告:本文為CSDN博主「北極熊的微笑」的原創文章,遵循 CC 4.0 BY-SA
版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/lpCrazyBoy/article/details/80748334
核心程式碼
private List<String> list_P= new ArrayList<>();//省下拉框列表 private List<String> list_C= new ArrayList<>();//市下拉框列表 private List<String> list_Q= new ArrayList<>();//區縣下拉框列表 private List<String> list_TP= new ArrayList<>();//型別下拉框列表 private ArrayAdapter<String> adapter_P;//省列表的介面卡 private ArrayAdapter<String> adapter_C;//市列表的介面卡 private ArrayAdapter<String> adapter_Q;//區縣列表的介面卡 private ArrayAdapter<String> adapter_TP;//型別列表的介面卡 private Button btn_eq_ok ;//查詢按鈕 private Spinner spinner_P;//省下拉框 private Spinner spinner_C;//市下拉框 private Spinner spinner_Q;//區縣下拉框 private Spinner spinner_TP;//型別下拉框 public static equipmentFragment newInstance() { return new equipmentFragment(); } @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(R.layout.equipment_fragment, container, false); } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); mViewModel = ViewModelProviders.of(this).get(EquipmentViewModel.class); // TODO: Use the ViewModel init_Palette();//初始化控制元件 init_hashmap();//初始化hashmap。 //初始化省下拉框 list_P.add("省"); adapter_P = new ArrayAdapter<String>(getActivity(),R.layout.support_simple_spinner_dropdown_item,list_P); spinner_P.setAdapter(adapter_P); spinner_P.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { if (adapter_P.getItem(i).equals("省")){ list_C.clear(); list_C.add("市"); adapter_C = new ArrayAdapter<String>(getActivity(),R.layout.support_simple_spinner_dropdown_item,list_C); spinner_C.setAdapter(adapter_C); }else{ list_C.clear(); list_C.add("市"); mapTool_getList(c_Hashmap,list_C,mapTool_getKey(p_Hashmap,adapter_P.getItem(i)),2); adapter_C = new ArrayAdapter<String>(getActivity(),R.layout.support_simple_spinner_dropdown_item,list_C); spinner_C.setAdapter(adapter_C); } } @Override public void onNothingSelected(AdapterView<?> adapterView) { spinner_C.setEnabled(false); } }); /*** * 初始化市下拉框 */ list_C.add("市"); adapter_C = new ArrayAdapter<String>(getActivity(),R.layout.support_simple_spinner_dropdown_item,list_C); spinner_C.setAdapter(adapter_C); //spinner_C.setEnabled(false); spinner_C.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {//這個引數‘i’是選擇項的索引 //每當選擇一個新的就會觸發這個事件,預設會選擇第一個,利用這個從這裡設定 if (adapter_C.getItem(i).equals("市")){//如果市下拉框選擇了市,市是預設顯示的 /*這兩句是重置區的下拉列表*/ list_Q.clear();//清除區的列表 list_Q.add("區縣");//新增一個區縣, adapter_Q = new ArrayAdapter<String>(getActivity(),R.layout.support_simple_spinner_dropdown_item,list_Q);//建立 spinner_Q.setAdapter(adapter_Q);//繫結 }else{ /*這三句是重置區的下拉列表*/ list_Q.clear(); list_Q.add("區縣"); //新增符合要求的專案。自定義的一個方法,從區裡找符合市裡的地名,然後新增到list mapTool_getList(q_Hashmap,list_Q,mapTool_getKey(c_Hashmap,adapter_C.getItem(i)),4); adapter_Q = new ArrayAdapter<String>(getActivity(),R.layout.support_simple_spinner_dropdown_item,list_Q); spinner_Q.setAdapter(adapter_Q); } //程前啟後,就完成了下拉列表的聯動,最後只用判別區縣框裡面選擇的內容是否是“區縣”,就可辨別,具體情況具體考慮 } @Override public void onNothingSelected(AdapterView<?> adapterView) { } }); /*** * 初始化區縣下拉框 */ list_Q.add("區縣"); adapter_Q = new ArrayAdapter<String>(getActivity(),R.layout.support_simple_spinner_dropdown_item,list_Q); spinner_Q.setAdapter(adapter_Q); //spinner_Q.setEnabled(false); spinner_Q.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { } @Override public void onNothingSelected(AdapterView<?> adapterView) { } }); /*** * 初始化監測型別下拉框 */ list_TP.add("型別"); list_TP.add("雨量計"); list_TP.add("泥位計"); list_TP.add("地聲感測器"); list_TP.add("撞線感測器"); adapter_TP = new ArrayAdapter<String>(getActivity(),R.layout.support_simple_spinner_dropdown_item,list_TP); spinner_TP.setAdapter(adapter_TP); //spinner_TP.setEnabled(false); spinner_TP.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { } @Override public void onNothingSelected(AdapterView<?> adapterView) { } }); //按鈕點選事件 btn_eq_ok.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Log.d("test","run:btn_eq_ok查詢點選:"+spinner_Q.getSelectedItem()); //判別區縣框裡面選擇的內容是否是“區縣”,就可辨別 if (spinner_Q.getSelectedItem().equals("區縣")){ Toast.makeText(getActivity(),"請完善省/市/區縣",Toast.LENGTH_SHORT).show(); }else { //彈框提示 Toast.makeText(getActivity(),mapTool_getKey(q_Hashmap,spinner_Q.getSelectedItem().toString()),Toast.LENGTH_SHORT).show(); } } }); }
說在最後
這裡我也沒用自定義樣式,這個可以通過重寫adapter來實現,具體參考下面連結。簡書:Android 好用的下拉控制元件Spinner
CSDN:修改Android中Spinner的顯示及下拉樣式的四種方法
這裡我就是使用了list來控制列表的更新和聯動,有的不懂得可以留言。本人也比較挫,寫不來隱藏的提示項,就乾脆將就用吧,功能完成就行。
程式碼還不懂的可以看下下面教程連結:C語言中文網:Android Spinner:下拉列表控制元件
最後騷一句,祝大家情人節快樂
——2020.2.14
(你現在的表情一定很好笑,哈哈哈)
要是幫到你了,記得點個贊哦