【问题标题】:How to show divider between spinner items?如何在微调器项目之间显示分隔符?
【发布时间】:2011-06-01 23:15:38
【问题描述】:

我使用带有分隔符的列表视图和扩展视图,我可以设置它们,但在微调器上看起来它不是项目之间的分隔符。

有人知道如何解决这个问题吗?

【问题讨论】:

    标签: android android-layout android-spinner divider


    【解决方案1】:

    这对我有用:

    <style name="SpinnerStyle" 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">
            <!-- Customize your theme here. -->
            <item name="android:dropDownListViewStyle">@style/SpinnerStyle</item>
    

    使用它的好处是它不会消除悬停时的涟漪效应。

    【讨论】:

    • 即使将其添加到主应用程序主题后,这对我也不起作用。
    • 谢谢这是我的工作。你必须在 andoid:Theme for spinner 中添加这个
    【解决方案2】:

    我设法为这个问题找到了一个更合适的解决方案(在单个项目布局中不包括分隔符)。

    你要做的就是在你的活动主题中定义

            <item name="android:dropDownListViewStyle">@style/App.Style.Spinner</item>
    

    然后用

    创建合适的样式
       <style name="App.Style.Spinner" parent="@style/Widget.Sherlock.Light.ListView.DropDown">
               <item name="android:dividerHeight">10dip</item>
               <item name="android:divider">@drawable/mydivider</item>
       </style>
    

    【讨论】:

    • 这很好,除非您只想将此样式应用于 Activity 中的 1 个 Spinner。
    • 我们在哪里定义项目:&lt;item name="android:dropDownListViewStyle"&gt;@style/App.Style.Spinner&lt;/item&gt;“在您的活动主题中”是什么意思?对此有点困惑。
    • @ojonugwaochalifu 您必须将此项目定义为活动主题的一部分...
    • 这更合适,因为当您在 UI 中实现某些内容时,它应该在整个应用程序中保持一致,并且此解决方案可以做到这一点。
    【解决方案3】:

    根据@Talihawk 的回答,我使它仅适用于特定微调器。无需设置活动主题,而是直接为微调器视图设置主题:

    <style name="MatchSpinnerStyle" parent="android:style/Widget.ListView.DropDown">
        <item name="android:divider">#123456</item>
        <item name="android:dividerHeight">1dp</item>
    </style>
    
    <style name="MatchSpinnerTheme" parent="AppTheme">
        <item name="android:dropDownListViewStyle">@style/MatchSpinnerStyle</item>
    </style>
    

    <android.support.v7.widget.AppCompatSpinner
        android:layout_width="match_parent"
        android:layout_height="wrap_content"        
        android:theme="@style/MatchSpinnerTheme"/>
    

    【讨论】:

    • +1。另外,我必须补充一点,您可以在drawable 中定义您的分隔线并引用它而不是#123456。哦,必须使用android:theme 而不是stlye="@stye/..."
    【解决方案4】:

    对不起,我在问这个问题多年后才回答,但解决方案很简单,你只需要做一件简单的事情。 转到您的 style.xml 文件并将此项目添加到您的活动主题中

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

    在此之后添加另一个主题,名称为 MySpinner,并且与您的活动主题相同

     <style name="MySpinner" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:dividerHeight">2dp</item>
        <item name="android:divider">#000</item>
    </style>
    

    这将分隔您的单个项目,当我们将鼠标悬停在单个项目上时不会显示分隔符

    但请确保在执行此操作时,我们将此主题应用于活动中的所有微调器。现在,每个微调器都将使用相同的微调器主题。

    【讨论】:

      【解决方案5】:

      对于有同样问题的人,我几乎放弃后我知道如何获得分隔线。

      我在每个项目的自定义布局底部添加了分隔线

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

      <RelativeLayout android:id="@+id/RelativeLayout01"
          android:layout_width="fill_parent" android:layout_height="fill_parent"
          xmlns:android="http://schemas.android.com/apk/res/android" style="@style/ListItem2">
      
          <TextView android:id="@+id/Text" android:layout_width="fill_parent"
              android:layout_height="wrap_content" android:layout_alignParentLeft="true"
              style="@style/SpinnerView_Text" android:paddingLeft="10dip" />
      
          <ImageView android:id="@+id/icon" android:layout_width="wrap_content"
              android:layout_height="wrap_content" android:src="@drawable/arrowright"
              android:layout_alignParentRight="true" android:layout_centerInParent="true"
              android:layout_marginRight="20dip" />
      
      </RelativeLayout>
      
      <ImageView android:id="@+id/Divider1" android:layout_width="fill_parent"
          android:layout_height="1dip" style="@style/Divider"></ImageView>
      

      【讨论】:

      • 你能发布更多的xml吗?比如最外层的布局和样式/Divider.thank you
      【解决方案6】:

      其他解决方案都不适合我,所以我使用可绘制对象作为 Spinner 项目的背景来产生所需的效果。

      我创建了一个新的 Drawable dropdown_divider.xml 和一个自定义 SpinnerAdapter 类,我在其中调整了 getDropDownView() 方法来设置 Spinner 项目的背景。

      drawable 中的android:bottom="-56dp" 对我来说是两个项目之间的完美中心线,但这取决于您在布局中应用的确切边距和填充。

      dropdown_divider.xml:

      <?xml version="1.0" encoding="utf-8"?>
      <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
          <item
              android:left="16dp"
              android:right="16dp"
              android:bottom="-56dp">
              <shape android:shape="line" >
                  <stroke
                      android:width=".2dp"
                      android:color="#FF666666" />
              </shape>
          </item>
      </layer-list>
      

      SpinnerAdapter:

      @Override
      public View getDropDownView(int position, View convertView,
                                  @NonNull ViewGroup parent) {
          TextView text = (TextView) super.getDropDownView(position, convertView, parent);
          text.setBackground(context.getDrawable(R.drawable.dropdown_divider));
          label.setTextColor(Color.BLACK);
          label.setText(lists.get(position).getTitle());
      
          return text;
      }
      

      结果如下所示:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-24
        • 1970-01-01
        • 1970-01-01
        • 2017-06-26
        相关资源
        最近更新 更多