Android:一行两列的水平滚动列表



我需要做一个水平滚动器,每个ViewHolder都有相同的大小,但它的大小是屏幕的一半。让我向你展示我所做的:https://i.stack.imgur.com/aru4S.png

红色方块是一幅图像,蓝色方块是一段文字。正如你所看到的,这里的ViewHolder是方形的,但由于这个代码,大小是固定的,为150dp:

public class SquareRelativeLayout extends RelativeLayout {
public SquareRelativeLayout(Context context) {
    super(context);
}
public SquareRelativeLayout(Context context, AttributeSet attrs) {
    super(context, attrs);
}
public SquareRelativeLayout(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    // Set a square layout.
    super.onMeasure(heightMeasureSpec, heightMeasureSpec);
}
}

RecyclerView适配器的ViewHolder的xml是

        <listadoProgramas.SquareRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:listSelector="@color/fondo_contenido">
<io.leocad.view.WebCachedImageView
        android:id="@+id/imagen"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop"
        android:adjustViewBounds="true"/>
<TextView
        android:id="@+id/titulo"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:paddingTop="10dp"
        android:paddingBottom="10dp"
        android:layout_gravity="bottom"
        android:textColor="@color/blanco"
        android:background="@color/color_fondo_texto_imagen"
        android:singleLine="true"
        android:layout_alignParentBottom="true"
        />
        </listadoProgramas.SquareRelativeLayout>

我试着在测量上设置以下内容:

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    // Set a square layout.
    DisplayMetrics displaymetrics = new DisplayMetrics();
    ((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
    int widthScreen = displaymetrics.widthPixels;
    int width = widthScreen/2;
    this.setMeasuredDimension(width, width);
    super.onMeasure(width, width);
}

结果如下:https://i.stack.imgur.com/re5Xf.png现在ViewHolder不再是方形的,当然也不是屏幕宽度的一半。。有小费吗?

您正在调用super.onMeasure(width, width);,它用一些垃圾度量规范调用super,它将设置一个新的度量维度,覆盖您的维度。

相反,要么不调用super,要么使用从MeasureSpec.makeMeasureSpec.

获得的正确度量规范调用super

最新更新