2017-12-03 554 views
1

我想用自定義樣式自定義我的微調器。Android微調器自定義佈局

微調

<Spinner 
      android:id="@+id/my_spinner" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="@dimen/activity_vertical_margin" 
      android:layout_marginLeft="@dimen/activity_horizontal_margin" 
      android:layout_marginRight="@dimen/activity_horizontal_margin" 
      android:layout_marginTop="@dimen/activity_vertical_margin" 
      app:layout_constraintTop_toBottomOf="@id/expense_amount" 
      app:layout_constraintLeft_toRightOf="parent" 
      app:layout_constraintRight_toLeftOf="parent" 
      android:elevation="3dp" 
      /> 

這是我的styles.xml文件。

styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <item name="android:spinnerStyle">@style/AppTheme.spinnerStyle</item> 
    <item name="android:spinnerDropDownItemStyle">@style/AppTheme.spinnerDropDownItemStyle</item> 

</style> 
<style name="AppTheme.spinnerStyle" parent="@android:style/Widget.Material.Light.Spinner"> 
    <item name="android:textColor">@android:color/white</item> 
    <item name="android:background">@color/colorPrimary</item> 

</style> 
<style name="AppTheme.spinnerDropDownItemStyle" parent="@android:style/Widget.Material.DropDownItem.Spinner"> 
    <item name="android:textColor">@android:color/white</item> 
    <item name="android:background">@color/colorPrimary</item> 
</style> 

這給了我紡紗看起來像這樣: Spinner Image

我想增加一個下拉箭頭。 當我更改微調器代碼爲下拉箭頭時,所有的textcolor和背景顏色都會丟失。

微調代碼來顯示的下拉箭頭

<Spinner 
      android:id="@+id/my_spinner" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="@dimen/activity_vertical_margin" 
      android:layout_marginLeft="@dimen/activity_horizontal_margin" 
      android:layout_marginRight="@dimen/activity_horizontal_margin" 
      android:layout_marginTop="@dimen/activity_vertical_margin" 
      app:layout_constraintTop_toBottomOf="@id/expense_amount" 
      app:layout_constraintLeft_toRightOf="parent" 
      app:layout_constraintRight_toLeftOf="parent" 
      android:background="@android:drawable/btn_dropdown" 
      /> 

Spinner with dropdown arrow

我如何能留住我的主題,下拉箭頭沿着?

P.S.我不擅長截獲Linux機器上的截圖。

+0

只是一個捷徑 - 添加'ImageView'用src作爲箭頭,並在該ImageView的onClickListener中設置'spinner.showDropDown();'。 –

回答

0

這是Android的正常行爲:

微調有它自己默認的背景,當您使用styles.xml定製它,它遵循並變成藍色。然後在代碼中,再次將微調器的android:background設置爲@android:drawable/btn_dropdown,因此它會覆蓋您的樣式,因爲layout xml中的屬性的優先級高於樣式中的優先級。

你沒有背景顯示的下拉箭頭,使用此:

解決方案一:

<Spinner 
     android:id="@+id/spinner" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:theme="@style/ThemeOverlay.AppCompat.Light" 
     android:spinnerMode="dropdown" /> 

,並在你的java文件

spinner = (Spinner) view.findViewById(R.id.spinner); 
ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.spinner_data, android.R.layout.simple_spinner_dropdown_item); 
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
spinner.setAdapter(adapter); 

解決方法二

您需要在Spinner外面包裝一個RelativeLayout。這種替換您<Spinner>

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/spinner_bg"> 
    <Spinner 
     android:id="@+id/spinner" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/ThemeOverlay.AppCompat.Light" 
     android:spinnerMode="dropdown" /> 
</RelativeLayout> 

然後創建一個自定義背景,選擇背景色爲您的微調:

spinner_bg.xml

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:top="8dp" android:bottom="8dp"> 
     <shape> 
      <solid android:color="@color/colorPrimary" /> 
      <corners android:radius="2dp"/> 
      <stroke 
       android:width="1dp" 
       android:color="@color/colorPrimary" /> 
      <padding 
       android:top="16dp" 
       android:bottom="16dp" 
       android:left="8dp" 
       android:right="16dp"/> 
     </shape> 
    </item> 
</layer-list> 
+0

我在右側拿到了箭頭,但沒有顯示任何項目。單擊箭頭時,項目會顯示在下拉列表中。 – Tony

+0

@Tony你現在得到了什麼?請給我一張照片。 – nhoxbypass

+0

對不起。我在其他一些工作中迷失了方向。我只是得到一個箭頭而不是一個按鈕。當我點擊它時,它會以我所有的主題完美地顯示下拉列表。但我真的不知道如何用箭頭創建一個微調,並以標準方式擁有自己的自定義主題。 我完成了定製spinnerss !!!! – Tony