最近在做新App开发时,使用RecycleView控件Gridlayout分三列展示信息,却遇到了只显示一行数据的Bug,


代码如下:


mBinding.recyclerViewLabel.setLayoutManager(new GridLayoutManager(getActivity,3));

列表子项item.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/tv_lovetalk_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/back_label_cornor"
        android:layout_gravity="center_horizontal"
        android:text="@string/lovetalk"
        android:textSize="@dimen/font_12"
        android:layout_marginLeft="@dimen/spacing_30"
        android:layout_marginTop="@dimen/spacing"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        android:paddingStart="@dimen/spacing"
        android:paddingEnd="@dimen/spacing"
</LinearLayout>
recycleView.xml
   <androidx.recyclerview.widget.RecyclerView
                   android:id="@+id/recyclerView_label"
                   android:layout_width="match_parent"
                   android:layout_height="140dp"
                   android:layout_below="@id/tv_hot_label"
                   android:layout_marginTop="23dp"
                   android:overScrollMode="never"
                   tools:listitem="@layout/lovetalk_label_item_layout" />

Bug展示:

e5e38639d6783dec21cbdaeb343b66f.png



522164ee73cbc1c79b8f6549e46cb7d.png



既然是单行显示,是不是子项把父控件的高度占满了,于是去检查item.xml文件,看到textView高度是wrap_content,就很纳闷儿,既然不是match_parent为啥只能显示一行,发现,还是自己疏忽大意,既然是列表子项,那么他整个最外层的布局文件的高度都不能match_parent,于是发现在最外层的LinerLayout的 android:layout_height="match_parent",大意了啊,执着于TextView控件,却疏忽了其父容器的宽高。


解决方法就出来啦!


一、检查列表子项布局文件的属性,是不是写错了


二、若布局文件找不出来是哪儿的问题,则可以从把item装入RecycleView这个过程中入手!


更改位置:列表的adapter文件。


原理:直接在装入item的时候无视父容器的逻辑,重写onCreateViewHolder()方法


@Override
public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
    //重点在inflate里的参数,本来第二个参数是parent,这儿改为null,则父容器的属性对他本身就无效
    View convertView = layoutInflater.inflate(R.layout.lovetalk_label_item_layout, null, false); 
    return new BaseViewHolder(convertView);
}

第二个方法百度找到的,试了下也可以哦!


在用户使用 应用的时候,经常会出现点击过快且多次点击同一控件的情况, 一方面这是因为应用或手机当前有些卡顿,网络卡啥的 另一方面也可能是由于很多应用并没有设置按钮点击时的 selector 或者其它按钮响应方式(例如点击按钮时按钮放大,常见于游戏),导致用户误认为没有点击到当前按钮。(比如使用selector再点击后更换背景颜色,图片等等)
【Android 逆向】IDA 工具使用 ( 重命名函数 | 添加注释 | 添加标签 / 跳转标签 | 代码跳转前进 / 后退 )(二)
【Android 逆向】IDA 工具使用 ( 重命名函数 | 添加注释 | 添加标签 / 跳转标签 | 代码跳转前进 / 后退 )(二)
【Android 逆向】IDA 工具使用 ( 重命名函数 | 添加注释 | 添加标签 / 跳转标签 | 代码跳转前进 / 后退 )(一)
【Android 逆向】IDA 工具使用 ( 重命名函数 | 添加注释 | 添加标签 / 跳转标签 | 代码跳转前进 / 后退 )(一)
bug -- android 7.0 popwindow显示位置异常情况解决
android 7.0 popwindow显示位置异常,在android7.1官方进行解决了,但是还是要多7.0的bug进行解决,我的解决方案里面通过重写popwindow进行适配: import android.