也许之前已经提出过这个问题,但我找不到准确的答案.我已经RecyclerView在我的L测试应用程序中将小部件实现为列表,并且当您单击列表中的项目时我想获得"材料效果".我onClickListener在我的ViewHolder创建中实现了一个并设置了属性
android:background="?android:attr/selectableItemBackground"
作为我的列表项布局的背景(到父级).
但这一切都没有奏效.当我点击没有发生的项目'.没有效果,全息,材料,没有...请指出我在这里做错了什么......谢谢
RecyclerView默认情况下,只要你提供一个很好的删除动画,setHasStableIds(true)并提供正确的实现getItemId.
最近,我RecyclerView通过/sf/answers/1892606131/添加了divider
结果如下
https://www.youtube.com/watch?v=u-2kPZwF_0w
https://youtu.be/c81OsFAL3zY(为了在删除动画播放时使分隔符更加清晰,我暂时将RecyclerView背景更改为红色)
当播放删除动画时,分隔符仍然可见.
但是,如果我查看GMail示例,当正在播放删除动画时,分隔线不再可见.它们被覆盖在纯色区域.
https://www.youtube.com/watch?v=cLs7paU-BIg
我可以知道,当删除动画播放时,如何通过不显示分隔线来实现与GMail相同的效果?
我有一些基本的项目装饰,在ItemDecoration.onDrawOver方法中绘制一些东西.
这RecyclerView也是DefaultItemAnimator它的基础.动画正在运作,一切都很棒.除了一件事.
当所有现有项目与此适配器中设置的新项目交换时,动画正在运行时将显示装饰.
我需要一种隐藏它们的方法.当动画结束时,需要显示它们,但是当它运行时,它们必须被隐藏.
我尝试了以下方法:
public void onDrawOver(..., RecyclerView.State state) {
if(state.willRunPredictiveAnimations() || state.willRunSimpleAnimations()) {
return;
}
// else do drawing stuff here
}
Run Code Online (Sandbox Code Playgroud)
但这没有帮助.装饰仅在短时间的动画中被删除,但在它仍在运行时再次出现.
另外,setup还包括RecyclerView.AdapterhasStableIds()(如果该位很重要).
我想使用View Pager2左右页面的预览来实现 Carousel ,如下所示:
最初我使用的是支持的视图 pager1。现在我认为它被删除了
viewPagerhost.setPageMargin(20);
Run Code Online (Sandbox Code Playgroud)
知道我们如何使用 View Pager 2 实现这一点
我正在使用RecyclerView圆角,使其圆角我在XML下面使用:
view_rounded.xml: -
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#008f8471"/>
<stroke android:width="2dp" android:color="#ffffff" />
<corners android:radius="10dp"/>
</shape>
Run Code Online (Sandbox Code Playgroud)
fragment_main.xml: -
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/view_rounded"/>
Run Code Online (Sandbox Code Playgroud)
adapter_main.xml: -
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/textTitle"
style="@style/AppTheme.ListTextView"
/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
style.xml: -
<style name="AppTheme.ListTextView" parent="android:Widget.Material.TextView">
<item name="android:gravity">left</item>
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textAllCaps">false</item>
<item name="android:padding">10dp</item>
<item name="android:textAppearance">@android:style/TextAppearance.DeviceDefault.Medium</item>
<item name="android:textColor">@color/tabsScrollColor</item>
<item name="android:textStyle">bold</item>
</style>
Run Code Online (Sandbox Code Playgroud)
获取(没有项目分隔符):

必需(带项目分隔符):

在我的Android应用程序中,我使用a RecyclerView来显示网格中的项目GridLayoutManager.在GridView中,为了指定元素之间的间距,我将设置horizontalSpacing和verticalSpacing属性.
那么,我怎么能这样做RecyclerView呢?
所以我搜索了高低,但找不到我的问题的答案.我基本上需要的是Android的ViewFlipper或ViewPager提供的行为,但我想显示左视图和右视图的部分,以指示用户有要滚动的元素,而不是让所选视图占据整个屏幕.
我还想在左侧和侧面视图中添加一些效果,例如调暗和缩放,然后稍微降低.是否可以使用库存ViewFlipper或ViewPager来完成它,或者我是否必须推出自己的视图组,即la cover flow(http://www.inter-fuser.com/2010/01/android-coverflow-widget .html)?
(PS我不想使用Gallery小部件,该组件很糟糕).
这是我们在选择视图后需要显示的内容(仍然显示左视图和右视图):

向左或向右投掷将使主视图过渡,调暗并减少一点,并与下一个或上一个视图相反.
我有一些带有卡片物品的RecyclerView.在preLollipop设备上它看起来很好.但是在Lollipop上,它看起来没有儿童卡之间的间隔.我试图使用保证金和填充,但它没有帮助.当我在棒棒糖上使用保证金时,它看起来很好,但是在preLollipop上的间距相同,非常大.再一次:为什么会有不同的间距?我应该使用哪个属性来修复它?
我有一个简单的列表视图,我已经为分隔符定义了一个自定义drawable.我已将分隔符高度定义为1dp.列表视图位于片段内.
<shape
android:shape="line" >
<stroke
android:color="@color/custom_color" />
<gradient android:height="1dp" />
</shape>
Run Code Online (Sandbox Code Playgroud)
它适用于除L以外的所有Android版本.
我缺少什么?
android android-layout android-listview android-5.0-lollipop
根据这个答案,我能够在垂直RecyclerView的项目之间得到一个分隔符.但是,我也想稍微缩进分隔线.
我能够通过在RecyclerView.ItemDecoration子类中的INDENT值中进行硬编码来实现.
int INDENT = 20;
@Override
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
int left = parent.getPaddingLeft() + INDENT;
int right = parent.getWidth() - parent.getPaddingRight() - INDENT;
// ...
divider.setBounds(left, top, right, bottom);
// ...
}
Run Code Online (Sandbox Code Playgroud)
然而,那时我不得不混淆密度无关的像素.