我使用具有分隔符的列表视图和扩展视图,我可以设置它们,但在微调器上看起来它不是项目之间的分隔符。
有人知道如何解决这个问题吗?
我使用具有分隔符的列表视图和扩展视图,我可以设置它们,但在微调器上看起来它不是项目之间的分隔符。
有人知道如何解决这个问题吗?
这对我有用:
<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>
使用它的好处是它不会消除悬停时的涟漪效应。
我设法为这个问题找到了一个更合适的解决方案(在单个项目布局中不包括分隔符)。
你需要做的是在你的活动主题中定义
<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>
根据@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"/>
对不起,我在问这个问题多年后才回答,但解决方案很简单,你只需要做一件简单的事情。转到您的 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>
这将分隔您的单个项目,并且在我们将鼠标悬停在单个项目上时不会显示分隔符
但请确保在执行此操作时,我们将此主题应用于活动中的所有微调器。现在,每个微调器都将使用相同的微调器主题。
对于有同样问题的人,我几乎放弃了,我知道如何获得分隔线。
我在每个项目的自定义布局底部添加了分隔线
<?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>
其他解决方案都不适合我,所以我使用可绘制对象作为 Spinner 项目的背景来产生所需的效果。
我创建了一个新的 Drawabledropdown_divider.xml
和一个自定义 SpinnerAdapter 类,我在其中调整了getDropDownView()
将背景设置为 Spinner 项的方法。
对android:bottom="-56dp"
我来说,drawable 中的线在两个项目之间完美居中,但这取决于您在布局中应用的确切边距和填充。
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;
}