AppCompatSpinner 控件
繼承自 Spinner , 提供 dialog, popup 兩張方式顯示下拉框, 默認為下拉方式
- 單獨配置
- 顯示在 Toolbar 中
單獨配置
- 配置 xml
<android.support.v7.widget.AppCompatSpinner
android:id="@+id/locationSelect"
android:minWidth="150dp"
style="@style/common_spinner"
app:theme="@style/common_spinner"
android:popupTheme="@style/common_spinner"
android:visibility="gone" />
-
配置 common_spinner 樣式
<style name="common_spinner"> <!--設置彈窗背景為 系統(tǒng)設置的 應用主色調(diào) 在application 的colorPrimay 中配置的顏色, actionBar toolbar 默認使用這個為背景顏色--> <item name="android:popupBackground">?attr/colorPrimary</item> <item name="android:layout_gravity">center</item> <item name="android:gravity">center</item> <item name="android:layout_width">wrap_content</item> <item name="android:layout_height">match_parent</item> <!--設置 spinner 顯示位置往下偏移 actionBarSize 的高度, 默認顯示是直接顯示在 Spinner 的選中項的上方--> <item name="android:dropDownVerticalOffset">?attr/actionBarSize</item> <!--設置選中之后Item 的背景變換 設置背景為 灰色背景色--> <item name="android:dropDownSelector">@color/light_grey</item> <!--設置下拉框的 list 的樣式, 主要是設置 分割線, 當然也可以設置下拉的 list 的背景顏色--> <item name="android:dropDownListViewStyle">@style/spinnerListStyle</item> <!--設置顯示在 popup 中 item(TextView) 的樣式--> <item name="android:dropDownItemStyle">@style/itemSpinnerStyle</item> </style> <!--設置分割線--> <style name="spinnerListStyle" parent="@android:style/Widget.ListView.DropDown"> <item name="android:divider">#fff</item> <item name="android:dividerHeight">1dp</item> </style> <!--設置文本顏色 和大小--> <style name="itemSpinnerStyle" parent="@android:style/Widget.TextView.SpinnerItem"> <item name="android:textColor">@color/white</item> <item name="android:textSize">16sp</item> </style>
-
設置數(shù)據(jù) 列表
-
方式一 : 在xml 中配置
-
在res/value/array.xml 聲明 一個 String Array
<string-array name="actionArray"> <item>Approach</item> <item>Retain</item> <item>Call Police</item> <item>Observe</item> </string-array>
-
在布局文件中使用
android:entries="@array/actionArray"
?
方式二: 在Java 中動態(tài)聲明 string array
List<String> spinnerEntries = null; private void setupSpinnerLabels(){ if (Globals._locations != null){ locationSpinner.setVisibility(View.VISIBLE); //設置下拉框的寬度 為屏幕寬度 locationSpinner.setDropDownWidth(Utils.screenWidth(this)); //準備數(shù)據(jù) if (spinnerEntries == null) spinnerEntries = new ArrayList<>(); spinnerEntries.clear(); int len = Globals._locations.size(); for (int i = 0; i < len; i++){ Location currentLocation = Globals._locations.get(i); spinnerEntries.add(currentLocation.partnerLocationName); } //設置 Adapter. 其中l(wèi)ayout 就是一個TextView ArrayAdapter<String> adapter = new ArrayAdapter<>(this, R.layout.custom_spinner_dropdown_item, spinnerEntries); adapter.setDropDownViewResource(R.layout.custom_spinner_dropdown_item); locationSpinner.setAdapter(adapter); //設置 item 點擊事件 locationSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { String currentLocation = Globals._locations.get(position).partnerLocation; if (currentLocation.equals(locationID)){ return; } locationID = currentLocation; alertFaces(locationID); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); locationSpinner.setSelection(0); alertFaces(locationID); }else{ locationSpinner.setVisibility(View.GONE); } }
?
-
對對應的獲取屏幕寬度 Util
public static int screenWidth(Context context){ DisplayMetrics dm = new DisplayMetrics(); WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); if (wm != null){ wm.getDefaultDisplay().getMetrics(dm); return dm.widthPixels; } return 1080; }
-
TextView
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" style="@style/itemSpinnerStyle" android:singleLine="true" android:layout_width="match_parent" android:gravity="center" android:layout_height="?attr/listPreferredItemHeight" android:ellipsize="marquee"/>
?
-
-
Toolbar 包裹AppCompatSpinner
設置 AppCompatSpinner 在Toolbar 的中間, 需要設置 android:layout_gravity="center"
android:layout_gravity 和 android:gravity 的區(qū)別
layout_gravity : 是對應父布局的設置 , 默認為 center|left
gravity : 對應本身的位置 , 默認為 center|left
可選值
這兩個屬性可選的值有:top滋将、bottom放接、left、right婚惫、center_vertical氧骤、fill_vertical奈泪、center_horizontal疾棵、fill_horizontal、center馆蠕、fill期升、clip_vertical。
而且這些屬性是可以多選的互躬,用“|”分開吓妆。
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:subtitleTextColor="@color/white"
app:titleTextColor="@color/white"
app:popupTheme="@style/AppTheme.PopupOverlay" >
<android.support.v7.widget.AppCompatSpinner
android:id="@+id/locationSelect"
android:minWidth="150dp"
style="@style/common_spinner"
app:theme="@style/common_spinner"
android:popupTheme="@style/common_spinner"
android:visibility="gone" />
</android.support.v7.widget.Toolbar>
</android.support.design.widget.AppBarLayout>