我需要做一个水平滚动器,每个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.