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"> <!--设置弹窗背景为 系统设置的 应用主色调 在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>
-
设置数据 列表
-
方式一 : 在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 中动态声明 string array
List<String> spinnerEntries = null; private void setupSpinnerLabels(){ if (Globals._locations != null){ locationSpinner.setVisibility(View.VISIBLE); //设置下拉框的宽度 为屏幕宽度 locationSpinner.setDropDownWidth(Utils.screenWidth(this)); //准备数据 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. 其中layout 就是一个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 的区别
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>