2017-12-03 285 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