Android的:不能风格微调分频器(Android: Cannot style spinner d

2019-06-25 06:19发布

我试图创建一个主题为我的第一个Android应用程序,这是推动我拐弯。 我终于设法弄清楚如何风格在下拉列表中的项目,但现在我不能改变列表项之间的分隔符的颜色。 我已搜查计算器上类似的问题,并试图数十组合,但似乎没有任何工作。

这里是我的styles.xml文件(简称为清楚起见):

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <style name="MyTheme" parent="android:Theme.Light">
    <item name="android:spinnerStyle">@style/spinnerStyle</item>
    <item name="android:spinnerDropDownItemStyle">@style/spinnerDropDownItemStyle</item>    
    <item name="android:dropDownListViewStyle">@style/spinnerListViewStyle</item>
  </style>

  <style name="spinnerStyle" parent="@android:style/Widget.Spinner">
      <item name="android:background">@drawable/my_theme_spinner</item>
  </style>

  <style name="spinnerDropDownItemStyle" parent="@android:style/Widget.DropDownItem.Spinner">
      <item name="android:background">@drawable/my_theme_spinner_item</item>
      <item name="android:paddingLeft">5dp</item>
      <item name="android:gravity">center_vertical</item>
  </style>

  <style name="spinnerListViewStyle" parent="@android:style/Widget.ListView.DropDown">
      <item name="android:height">3dp</item>
      <item name="android:dividerHeight">3dp</item>
      <item name="android:divider">@color/divider</item>
  </style>
</resources>

无论我做什么,我只是得到项目之间的1DP浅灰色分频器(这勉强可以用我的浅色列表项的背景可见) - 无论是高度还是分隔的颜色是以往任何时候都受到影响(我也尝试将其设置为一个绘制,也没有影响)。 我究竟做错了什么?

Answer 1:

我与微调一个非常简单的活动,它适用于以下几种。 我看到的唯一区别是,你有一个<item name="android:height">3dp</item> ,我没有,在所有。

<style name="TestSpinnerStyle" parent="android:style/Widget.ListView.DropDown">
    <item name="android:divider">#ff0000</item>
    <item name="android:dividerHeight">5dp</item>
</style>


<style name="SampleTheme" parent="@android:style/Theme.Holo.Light">
    <item name="android:dropDownListViewStyle">@style/TestSpinnerStyle</item>
</style>

在我的活动我有:

    Spinner spinner = (Spinner) findViewById(R.id.spinner);
    List<String> list = new ArrayList<String>();
    list.add("list 1");
    list.add("list 2");
    list.add("list 3");
    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_spinner_item, list);
    dataAdapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
    spinner.setAdapter(dataAdapter);

然后为主要布局,我有以下XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
        >
    <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Hello World, StylingActivity"
            />
    <Spinner android:id="@+id/spinner"
             android:layout_width="250dp"
             android:layout_height="40dp"
             />
</LinearLayout>

下面是截图

如果你不能得到它的工作从那里,我可以把整个事情推到GitHub库为您服务。



Answer 2:

你可以水平线添加到您使用下拉式布局,这将有效地创建一个分频器。

编辑

一些进一步搜索发现这一点:

SO回答

基本上说,你看你正在尝试做上面应该工作...但它提到设置这种风格在您的活动主题,你不提这样做。



Answer 3:

您可以在layout.xml做

     <Spinner
                android:id="@+id/sp_to_create"
                android:layout_width="match_parent"
                android:layout_height="32dp"
                android:layout_marginBottom="10dp"
                style="@style/spinner_style"
                android:prompt="@string/to_type_prompt" />

XML样式添加它

 <style name="spinner_style" parent="Widget.AppCompat.ListView.DropDown">
    <item name="android:divider">#d1d1d1</item>
    <item name="android:dividerHeight">0.5dp</item>
</style>

添加到您的活动主题

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

Java文件

your_spinnerList.setAdapter(new ArrayAdapter<>(getActivity(), android.R.layout.simple_dropdown_item_1line, timeOff_type_list));

让我知道,如果那是对您有用! 祝你今天愉快!



Answer 4:

直到你需要两个微调用不同的颜色分隔在接受答案的风格方法效果很好。

下面是我发现的作品作为一种替代方案:

a)设置的微调,以你想要的分频器的颜色popupBackgroundColor属性。 这将颜色在整个列表项的背景(包括我们认为的分隔空间)。

b)设置纺纱适配器dropDownViewResource是一个CheckedTextView与它的,如果你想选择的项目有不同的颜色)的背景属性设置为其他颜色(或选择。 这将覆盖我们工序的一切,但分压器设置的颜色。 有效地给我们想要的结果。

所以,你将有:

绘制/ spinner_dropdown_background_selector:

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@color/your_unchecked_color" android:state_checked="false"/>
    <item android:drawable="@color/your_checked_color" android:state_checked="true"/>
    <item android:drawable="@color/your_unchecked_color"/>

</selector>

布局/ drop_down_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
             android:id="@android:id/text1"
             android:background="@drawable/spinner_dropdown_background_selector"
             android:textColor="@android:color/white"
             android:singleLine="true"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:ellipsize="marquee" />

您微调的定义:

<Spinner
        ...
        android:popupBackground="@color/your_divider_color"            
        ...
        />

最后是你的阵列适配器的定义:

ArrayAdapter<String> dataAdapter = new ...
dataAdapter.setDropDownViewResource(android.R.layout.drop_down_item);
spinner.setAdapter(dataAdapter);

请注意,设置popupBackgroundColor没有效果,如果微调是在对话框模式 。



文章来源: Android: Cannot style spinner divider