【问题标题】:How to style Android spinner popup?如何设置 Android 微调器弹出窗口的样式?
【发布时间】:2017-02-19 08:55:40
【问题描述】:

我已经设置了

<item name="android:spinnerMode">dialog</item>

所以当我点击微调器时,我会弹出一个窗口。但是该弹出窗口是灰色的,带有白色文本,我似乎无法更改任何颜色。如何设置此对话框的样式?

我尝试了以下一些疯狂的临时颜色,看看有什么变化,但没有任何变化。

<style name="AppTheme" parent="AppBaseTheme">
    <item name="android:dialogTheme">@style/SpinnerDialog</item>
    <item name="android:alertDialogTheme">@style/SpinnerAlertDialog</item>
</style>

<style name="SpinnerDialog" parent="Theme.AppCompat.Light.Dialog">
    <item name="android:popupBackground">#ff00ff</item>
    <item name="colorPrimary">#ff00ff</item>
    <item name="colorPrimaryDark">#ffff00</item>
    <item name="colorAccent">#ff0000</item>
</style>

<style name="SpinnerAlertDialog" parent="Theme.AppCompat.Dialog">
    <item name="colorPrimary">#00ffff</item>
    <item name="colorPrimaryDark">#00ff00</item>
    <item name="colorAccent">#0000ff</item>
</style>

有很多类似的问题,但它们要么处理下拉菜单或 Android 的古老版本,要么根本不起作用。

【问题讨论】:

  • 您是否尝试过创建自定义布局和适配器以配合here 提到的那样?
  • 我不想在代码中做这些事情。他们是认真的吗?我只想更改对话框的背景,而不是创建 Android 的分支或他们建议的任何内容。
  • 没有什么比 fork Android 更好的了。您只需为适配器指定自定义布局。
  • 无效。我将它添加到 AppTheme、popupTheme、微调器主题,它并没有改变任何东西。

标签: android android-spinner android-styles


【解决方案1】:

而不是使用主题或 style.xml 来更改对话框的弹出背景颜色。

为什么不试试这个?在你的布局 xml 中

 <Spinner
    android:id="@+id/spinner1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:spinnerMode="dialog"
    android:popupBackground="#yourcolor"/>

由于您尝试添加主题,它没有任何改变。这很容易实现..不是吗??

希望对你有帮助!!!

【讨论】:

  • 这不起作用。当微调器模式设置为对话框时,popupBackgroundColor 会被忽略,就像文档说的那样。
【解决方案2】:

您可以使用自定义布局来实现这一点。

Spinner spinner = (Spinner) findViewById(R.id.spinner);
ArrayAdapter<String> adapter = new ArrayAdapter<>(this,
        R.id.custom_spinner_item, yourItemList);
adapter.setDropDownViewResource(R.layout.custom_spinner_dropdown_item);
spinner.setAdapter(adapter);

您应该有自定义布局:

  • R.id.custom_spinner_item 用于微调器中的项目。
  • R.layout.custom_spinner_dropdown_item 用于微调器下拉项。

【讨论】:

  • 我没有使用下拉菜单。我只想更改弹出窗口的背景颜色,而不是更改任何项目。
  • @TimSim 那个弹出窗口在这里被称为“下拉”
【解决方案3】:

我想更改对话框背景并添加自定义填充,这是样式:

 <style name="customSpinnerDialog" >

        <item name="android:background">@android:color/white</item>
        <item name="android:textColor">@color/color_accent</item>
        <item name="android:padding">0dp</item>

 </style>

在布局 xml 中应用于您的微调器:

<android.support.v7.widget.AppCompatSpinner
                android:id="@+id/reason_spinner"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:drawSelectorOnTop="true"
                android:theme="@style/customSpinnerDialog"
                android:spinnerMode="dialog"
                style="@style/SpinnerTheme"
                 />

希望这会有所帮助。

【讨论】:

  • 要编辑提示中的字体或字体大小,您可以从提示文本中创建一个 SpannableStringBuilder,并使用 setSpan 方法添加必要的跨度(例如 TypefaceSpan 和 AbsoluteSizeSpan)。并调用 setPrompt 方法设置可跨字符串。对于自定义字体,请考虑使用 stackoverflow.com/questions/4819049/… 中提到的 CustomTypefaceSpan
【解决方案4】:

在您的应用主题或活动中:

  <item name="android:dropDownListViewStyle">@style/SpinnerStyle1</item>

声明 SpinnerStyle1:

<style name="SpinnerStyle1" parent="Widget.AppCompat.ListView.DropDown">
        <item name="android:divider">@color/blackText</item>
        <item name="android:dividerHeight">1px</item>
        <item name="android:scrollbars">none</item>
</style>

【讨论】:

    【解决方案5】:

    只需使用包含您想要的颜色的“背景”项目创建主题。

    <style name="Spinner.PopUpTheme">
        <item name="android:background">@color/black</item>
    </style>
    

    然后将该主题设置为微调器的“popupTheme”属性。

    <Spinner
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:spinnerMode="dialog"
        android:popupTheme="Spinner.PopUpTheme"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-17
      • 2011-09-14
      • 2012-10-27
      相关资源
      最近更新 更多