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

Android: List that scrolls horizontal with one row and two columns

我需要做一个水平滚动条,其中每个 ViewHolder 都具有相同的大小,但它的大小是屏幕的一半。 让我告诉你我做了什么: http://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);
}

结果如下: http://i.stack.imgur.com/re5Xf.png 现在 ViewHolder 不再是正方形了,当然也不再是屏幕宽度的一半了。 有什么建议吗?

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

相反,要么不调用 super,要么使用从 MeasureSpec.makeMeasureSpec 获得的适当度量规​​范调用 super。