AppCompatSpinner 的使用

AppCompatSpinner 控件

繼承自 Spinner , 提供 dialog, popup 兩張方式顯示下拉框, 默認為下拉方式

  • 單獨配置
  • 顯示在 Toolbar 中

單獨配置

  1. 配置 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" />
  1. 配置 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>
    
  1. 設置數(shù)據(jù) 列表

    • 方式一 : 在xml 中配置

      1. 在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>
        
      2. 在布局文件中使用

        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>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市吨铸,隨后出現(xiàn)的幾起案子行拢,更是在濱河造成了極大的恐慌,老刑警劉巖诞吱,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舟奠,死亡現(xiàn)場離奇詭異,居然都是意外死亡房维,警方通過查閱死者的電腦和手機沼瘫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來咙俩,“玉大人耿戚,你說我怎么就攤上這事“⒊茫” “怎么了膜蛔?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長脖阵。 經(jīng)常有香客問我皂股,道長,這世上最難降的妖魔是什么命黔? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任呜呐,我火速辦了婚禮就斤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蘑辑。我一直安慰自己洋机,他們只是感情好,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布洋魂。 她就那樣靜靜地躺著槐秧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪忧设。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天颠通,我揣著相機與錄音址晕,去河邊找鬼。 笑死顿锰,一個胖子當著我的面吹牛谨垃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播硼控,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼刘陶,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了牢撼?” 一聲冷哼從身側(cè)響起匙隔,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎熏版,沒想到半個月后纷责,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡撼短,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年再膳,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片曲横。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡喂柒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出禾嫉,到底是詐尸還是另有隱情灾杰,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布熙参,位于F島的核電站吭露,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏尊惰。R本人自食惡果不足惜讲竿,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一泥兰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧题禀,春花似錦鞋诗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至秀仲,卻和暖如春融痛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背神僵。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工雁刷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人保礼。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓沛励,卻偏偏與公主長得像,于是被迫代替她去往敵國和親炮障。 傳聞我的和親對象是個殘疾皇子目派,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容