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

Android:水平滚动一行两列的列表,android,size,android-recyclerview,Android,Size,Android Recyclerview,我需要做一个水平滚动,其中每个视图持有人有相同的大小,但它的大小是屏幕的一半。 让我告诉你我做了什么: 红色的方块是图像,蓝色的方块是文本。 正如您可以看到的,此处的ViewHolder是方形的,但由于以下代码,其大小是固定的,为150dp: public class SquareRelativeLayout extends RelativeLayout { public SquareRelativeLayout(Context context) { super(context);

我需要做一个水平滚动,其中每个视图持有人有相同的大小,但它的大小是屏幕的一半。 让我告诉你我做了什么:

红色的方块是图像,蓝色的方块是文本。 正如您可以看到的,此处的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>
结果如下: 现在,ViewHolder不再是正方形,当然也不是屏幕宽度的一半。。
任何提示?

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


取而代之的是,不要致电super,或者致电super时请提供适当的测量规格。

谢谢!这对我有帮助!以下是我所做的:测量时受保护的void(int-widthMeasureSpec,int-heightMeasureSpec){…int-widthScreen=displaymetrics.widthPixels;int-newWidthMeasureSpec=MeasureSpec.makeMeasureSpec(widthScreen/2,MeasureSpec.AT_);此.setMeasuredDimension(newWidthMeasureSpec,newWidthMeasureSpec);super.onMeasure(newwidthmasurespec,newwidthmasurespec);}使用MeasureSpec。完全正确,而不是最多,因为你希望它有那个高度。此外,与其这样做,不如在onCreateViewHolder中设置它们并使用RecyclerView.LayoutParams。对不起,我应该在第一个答案中提到。在这种情况下,您不必覆盖onMeasure,也不需要创建度量规格。太好了!那就简单多了。谢谢
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);
}