Android 使水平滚动视图的子对象与屏幕一样大?

Android 使水平滚动视图的子对象与屏幕一样大?,android,android-layout,android-widget,Android,Android Layout,Android Widget,我解决这个问题的方法是为子视图创建一个自定义视图,然后为自定义视图重写onMeasure()。新的onMeasure()将宽度和高度设置为尽可能大 问题是当您显示软键盘并旋转手机时。随着方向的改变和键盘的显示,onMeasure()将“最大”可用高度设置为非常小的值,因此当我隐藏键盘时,子视图的大小是错误的 当键盘离开时,有没有办法告诉视图重新计算布局?还是我在测量上做错了?代码如下: @Override protected void onMeasure(int widthMeasureSpe

我解决这个问题的方法是为子视图创建一个自定义视图,然后为自定义视图重写onMeasure()。新的onMeasure()将宽度和高度设置为尽可能大

问题是当您显示软键盘并旋转手机时。随着方向的改变和键盘的显示,onMeasure()将“最大”可用高度设置为非常小的值,因此当我隐藏键盘时,子视图的大小是错误的

当键盘离开时,有没有办法告诉视图重新计算布局?还是我在测量上做错了?代码如下:

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){

    int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
    int parentHeight = MeasureSpec.getSize(heightMeasureSpec);
    setMeasuredDimension(measureWidth(widthMeasureSpec), 
                         measureHeight(heightMeasureSpec));

    setLayoutParams(new LinearLayout.LayoutParams(
           measureWidth(widthMeasureSpec), measureHeight(heightMeasureSpec))
    );

    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}

public int measureWidth(int measureSpec) {
    int result = 0;
    int specMode = MeasureSpec.getMode(measureSpec);
    int specSize = MeasureSpec.getSize(measureSpec);
    Display display = ( (WindowManager)getContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
    int screenWidth = display.getWidth();

    if (specMode == MeasureSpec.EXACTLY) {
        // We were told how big to be
        result = specSize;
    } else {
        // Measure the view
        result = screenWidth;
        if (specMode == MeasureSpec.AT_MOST) {
            // Respect AT_MOST value if that was what is called for by measureSpec
            result = Math.min(result, specSize);
        }
    }
    Log.d(TAG, "Width: "+String.valueOf(result));

    return result;
}
measureHeight()也是这样做的。

您的super.onMeasure(widthMeasureSpec,heightMeasureSpec)使用传入的值,我认为您希望这些值是实际测量的宽度和高度:

super.onMeasure(measureWidth(widthMeasureSpec), measureHeight(heightMeasureSpec));

你说难读是什么意思?格式?具体是什么?可能只有我一个人,但“new LinearLayout.LayoutParams”的多行代码占用了5行,而我可能只使用2或3行。你可以接受自己的答案。是的,就是这样。子视图的宽度现在不正确,但这可能是因为我设置的布局尺寸不正确。@UAvalos更新了这个答案后,图像比屏幕大。。你能告诉我你是怎么修好的吗?我会非常感激的!