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