【问题标题】:android spinner dialog popup backgroundandroid微调器对话框弹出背景
【发布时间】:2019-10-19 05:39:10
【问题描述】:

我的 android 应用程序已经将 popupbackground 设置为可绘制的 xml。但是,弹出对话框仍然无法显示我设置的颜色。如何解决这个问题?

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".CountrySelectorActivity">


    <Spinner
        android:id="@+id/search_spinner1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@color/black"
        android:popupBackground="@drawable/spinner_background"
        android:spinnerMode="dialog"
        />

    <Spinner
        android:id="@+id/search_spinner2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:background="@color/black"
        android:popupBackground="@drawable/spinner_background"
        android:spinnerMode="dialog"/>

</LinearLayout>

@drawable/spinner_background.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@color/green"/>

        </shape>
    </item>

</selector>

Spinner activity code https://stackoverflow.com/questions/51495271/android-kotlin-spinner-working-for-api-23-but-not-working-for-api-21

【问题讨论】:

标签: android background dialog spinner


【解决方案1】:

使用您的自定义微调器背景绘制样式。然后将样式作为属性添加到微调器。最后,以编程方式更改活动或片段中的微调器弹出背景颜色。以下方法对我有用:

<style name="SpinnerTheme" parent="android:Widget.DeviceDefault.Spinner">
    <item name="android:background">@drawable/spinner_background</item>
    <item name="android:padding">8dp</item>
    <item name="android:paddingTop">5dp</item>
    <item name="android:textSize">18sp</item>
    <item name="android:textColor">@android:color/white</item>
    <item name="android:paddingBottom">5dp</item>
    <item name="android:paddingRight">15dp</item>
</style>

为每个微调器将其放入您的 xml (REMOVE android:popupBackground="@drawable/spinner_background" & android:spinnerMode="dialog"):

<Spinner
    android:id="@+id/search_spinner2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="2"
    android:background="@color/black"
    style="@style/SpinnerTheme"/>

然后在您的活动或片段中,以编程方式设置弹出背景颜色:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                spinner.setPopupBackgroundResource(R.color.yourColor);
            }

这是一个示例链接:https://www.oodlestechnologies.com/blogs/Custom-Spinner-In-Android

【讨论】:

  • 在真实设备 SM-G900F API 23 中,它运行良好。但它在 SM-N9005 API 21 中不起作用。它显示了微调器,但当我单击微调器时它没有显示任何选项。
  • 如果您想支持 Lollipop 之前的版本,您可能需要尝试更改样式以使父级具有 appCompat 主题,并确保在您的应用级 gradle 文件中包含对 appCompat 的依赖项。这是 google 关于 appCompat 的博客文章的链接:android-developers.googleblog.com/2014/10/…
【解决方案2】:

借助 AndroidX 和 AppCompatSpinner,您可以做到这一点:

文件:styles.xml

<style name="MyPopUpTheme">
    <item name="android:background">@color/background_spinner</item>
    <item name="android:padding">5dp</item>
    <item name="android:textColor">@color/colorAccent</item>
    <item name="android:textStyle">bold</item>

</style>

文件:您的片段或活动

<androidx.appcompat.widget.AppCompatSpinner
    android:id="@+id/spinner_years"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="50dp"
    android:background="@drawable/spinner_bg"
    android:padding="15dp"
    android:theme="@style/MyPopUpTheme" />

结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-22
    相关资源
    最近更新 更多