【问题标题】:Android spinner custom layoutAndroid微调器自定义布局
【发布时间】:2017-12-08 02:12:07
【问题描述】:

我正在尝试使用自定义样式自定义我的微调器。

微调器

<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
            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"
            />

如何保留我的主题以及下拉箭头??

P.S.我不太擅长在 linux 机器上截屏。

【问题讨论】:

  • 只是一个快捷方式 - 添加一个带有 src 作为箭头的 ImageView 并在该 ImageView 的 onClickListener 中设置 spinner.showDropDown();

标签: android android-layout android-spinner


【解决方案1】:

这是Android的正常行为:

Spinner 有自己的默认背景,当您使用styles.xml 自定义它时,它会跟随并变成蓝色。然后在代码中再次将 Spinner 的 android:background 设置为 @android:drawable/btn_dropdown,因此它会覆盖您的样式,因为布局 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 包装。将您的 &lt;Spinner&gt; 替换为:

<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>

【讨论】:

  • 我得到了右侧的箭头,但它没有显示任何项目。单击箭头时,项目会显示在下拉列表中。
  • @Tony 你现在得到了什么?请发给我一张照片。
  • 对不起。我迷失在其他工作中。我只是得到一个箭头而不是一个按钮。当我单击它时,它会完美地显示包含我所有主题的下拉列表。但我真的不知道如何创建一个带箭头的微调器并以标准方式拥有我自己的自定义主题。我已经完成了自定义微调器!!!!
  • @Tony 解决方法,最快的方法:找到一个有下拉图标和蓝色背景的可绘制对象。在styles.xml 中替换您在此&lt;item name="android:background"&gt;@color/colorPrimary&lt;/item&gt; 中的可绘制对象
  • 好的@nhoxbypass 我会试试的。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多