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

时间:2015-04-06 20:57:26

标签: android size android-recyclerview

我需要做一个水平滚动条,其中每个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的adaptern的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>

我已尝试将on on设置为以下内容:

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不再是正方形,当然也不是屏幕宽度的一半。 有提示吗?

1 个答案:

答案 0 :(得分:0)

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

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