我创建了一个名为SquareButton的AppCompatButton的自定义子类,它强制按钮为方形。该子类的代码可在此处找到:https://stackoverflow.com/a/36991823/7648952。
此按钮工作正常,当其中包含的布局在RecyclerView外部膨胀时显示,但与RecyclerView一起使用时,按钮不会显示。当我更改我的布局和代码以使用普通按钮时,按钮显示,所以我使用RecyclerView的方式似乎没有任何问题。我不知道为什么会这样。
SquareButton.java:
import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build;
import android.support.v7.widget.AppCompatButton;
import android.util.AttributeSet;
public class SquareButton extends AppCompatButton {
public SquareButton(Context context) {
super(context);
}
public SquareButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SquareButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = MeasureSpec.getSize(heightMeasureSpec);
int size = width > height ? height : width;
setMeasuredDimension(size, size);
}
}
在RecyclerView外部充气时SquareButton工作的屏幕截图:
不在RecyclerView内显示SquareButton的屏幕截图:
在我看来,这种行为很奇怪。任何帮助将不胜感激。
答案 0 :(得分:2)
试试这段代码:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = MeasureSpec.getSize(heightMeasureSpec);
if(width > height){
setMeasuredDimension(getMeasuredHeight(), getMeasuredHeight());
}else {
setMeasuredDimension(getMeasuredWidth(), getMeasuredWidth());
}
}
在此用法中,您将设置 widthMeasureSpec 或 heightMeasureSpec ,而不是直接宽度或高度值。< / p>