Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android RecyclerView不显示自定义按钮_Android_Android Recyclerview_Android Button - Fatal编程技术网

Android RecyclerView不显示自定义按钮

Android RecyclerView不显示自定义按钮,android,android-recyclerview,android-button,Android,Android Recyclerview,Android Button,我已经创建了一个名为SquareButton的AppCompatButton自定义子类,它强制按钮为方形。在此处找到该子类的代码: 此按钮工作正常,当包含它的布局在RecyclerView外部膨胀时显示,但是当与RecyclerView一起使用时,此按钮不会显示。当我更改布局和代码以使用普通按钮时,按钮会显示出来,因此我使用RecyclerView的方式似乎没有任何问题。我不知道为什么会这样 SquareButton.java: import android.annotation.TargetA

我已经创建了一个名为SquareButton的AppCompatButton自定义子类,它强制按钮为方形。在此处找到该子类的代码:

此按钮工作正常,当包含它的布局在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工作的屏幕截图:

SquareButton未显示在RecyclerView内部的屏幕截图:

在RecyclerView内部工作的常规按钮的屏幕截图:

在我看来,这种行为很奇怪。任何帮助都将不胜感激。

请尝试以下代码块:

@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());
    }
}
在此用法中,您将设置widthMeasureSpecheightMeasureSpec而不是直接设置widthheight值。

尝试此代码块:

@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());
    }
}

在此用法中,您将设置widthMeasureSpecheightMeasureSpec而不是直接设置widthheight值。

这就成功了!我在代码中唯一更改的是底部if/else语句中的exunge getMeasuredHeight()和getMeasured\width()。谢谢你的帮助,这就成功了!我在代码中唯一更改的是底部if/else语句中的exunge getMeasuredHeight()和getMeasured\width()。谢谢你的帮助。