我需要做一个水平滚动条,其中每个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不再是正方形,当然也不是屏幕宽度的一半。 有提示吗?
答案 0 :(得分:0)
您正在调用super.onMeasure(width, width);
,它使用一些垃圾测量规范调用超级,并且它将设置一个新的测量尺寸,覆盖您的。
相反,要么不使用从MeasureSpec.makeMeasureSpec获得的适当测量规范来调用super或调用super。