我尝试在主题级别为RecyclerView
实现通用样式参数。与ListView
相反,我使用了这样的东西:
定义了一种风格:
<style name="StyleListView" parent="Widget.AppCompat.ListView">
<item name="android:requiresFadingEdge">vertical</item>
<item name="android:fadingEdgeLength">10dp</item>
<item name="android:scrollbars">vertical</item>
</style>
以后用于我的自定义主题:
<item name="android:listViewStyle">@style/StyleListView</item>
这对ListView
完全正常。但是,我无法为RecyclerView
反映这一点,因为我认为它适用于任何类型的列表。
那么,RecyclerView
是否有可用的预定义样式属性,例如 android:recyclerViewStyle
或其他什么?
如果没有,那我怎样才能在主题层面实现这个目标?
答案 0 :(得分:9)
不幸的是,listViewStyle
并不等同于RecylerView
。
我认为您可以做的最好的事情是为RecyclerView
定义一种风格,然后根据您使用style="@style/RecyclerViewStyle"
的风格设置您想要使用的任何视图(如果您只想定义一个像你的例子中的情侣属性。)
如果您真的不想为每个RecyclerView
执行此操作,那么您必须对其进行子类化并为defStyle
返回非零参数构造函数。但是,您必须用新的子类替换XML中RecyclerView
的所有实例。
答案 1 :(得分:3)
主题级别的RecyclerView样式
RecyclerView现在具有默认样式属性:recyclerViewStyle
,该属性允许在主题中设置默认样式
支持以下属性
<!-- Class name of the Layout Manager to be used. -->
<attr name="layoutManager" format="string" />
<!-- ============================= -->
<!-- Attributes for Layout Manager -->
<!-- ============================= -->
<attr name="android:orientation" />
<attr name="android:descendantFocusability" />
<attr name="android:clipToPadding" />
<attr name="spanCount" format="integer"/>
<attr name="reverseLayout" format="boolean" />
<attr name="stackFromEnd" format="boolean" />
<attr name="fastScrollEnabled" format="boolean" />
<attr name="fastScrollVerticalThumbDrawable" format="reference" />
<attr name="fastScrollVerticalTrackDrawable" format="reference" />
<attr name="fastScrollHorizontalThumbDrawable" format="reference" />
<attr name="fastScrollHorizontalTrackDrawable" format="reference" />
要使用上述功能,请在build.gradle文件中添加/更新以下依赖项。
dependencies {
implementation 'androidx.recyclerview:recyclerview:1.1.0-beta05'
}
您可以看到提交here。
1。定义您的默认样式
<style name="DefaultRecyclerViewStyle">
<item name="layoutManager">androidx.recyclerview.widget.GridLayoutManager</item>
<item name="android:orientation">vertical</item>
<item name="spanCount">2</item>
</style>
2。将上述样式添加到您的默认主题中
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="recyclerViewStyle">@style/DefaultRecyclerViewStyle</item>
</style>
就是这样。您已经为RecyclerView小部件定义了应用程序范围的默认样式。
答案 2 :(得分:1)
正如@Jason Robinson所说,您可以通过这种方式继承RecyclerView,将RecyclerView
替换为xml中的RecyclerViewStyleable
,然后将其设置为recyclerViewStyle
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="RecyclerViewStyleable">
<attr name="recyclerViewStyle"/>
</declare-styleable>
</resources>
-
public class RecyclerViewStyleable extends RecyclerView {
public RecyclerViewStyleable(Context context) {
super(context);
}
public RecyclerViewStyleable(Context context, AttributeSet attrs) {
this(context, attrs, R.attr.recyclerViewStyle);
}
public RecyclerViewStyleable(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
}
答案 3 :(得分:0)
根据this changelog,2019年8月7日,RecyclerView
添加了一个recyclerViewStyle
样式属性,其行为与listViewStyle
类似。
将其添加到您的build.gradle
:
dependencies {
...
implementation 'androidx.recyclerview:recyclerview:1.1.0-beta02'
...
}
注意:您需要使用AndroidX,它是Android Jetpack.
的一部分