Android:一行两列水平滚动的列表
Android: List that scrolls horizontal with one row and two columns
我需要做一个水平滚动条,其中每个 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的适配器的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);
}
结果如下:
http://i.stack.imgur.com/re5Xf.png
现在 ViewHolder 不再是正方形了,当然也不再是屏幕宽度的一半了。
有什么建议吗?
您正在调用 super.onMeasure(width, width);
,它调用带有一些垃圾测量规范的 super,它将设置一个新的测量尺寸,覆盖您的尺寸。
相反,要么不调用 super,要么使用从 MeasureSpec.makeMeasureSpec 获得的适当度量规范调用 super。
我需要做一个水平滚动条,其中每个 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的适配器的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);
}
结果如下: http://i.stack.imgur.com/re5Xf.png 现在 ViewHolder 不再是正方形了,当然也不再是屏幕宽度的一半了。 有什么建议吗?
您正在调用 super.onMeasure(width, width);
,它调用带有一些垃圾测量规范的 super,它将设置一个新的测量尺寸,覆盖您的尺寸。
相反,要么不调用 super,要么使用从 MeasureSpec.makeMeasureSpec 获得的适当度量规范调用 super。