请Horizo​​ntalScrollView的孩子一样大的屏幕? [英] Make children of HorizontalScrollView as big as the screen?

查看:160
本文介绍了请Horizo​​ntalScrollView的孩子一样大的屏幕?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我解决这个问题的方法是通过创建子视图自定义视图,然后覆盖onMeasure()的自定义视图。新onMeasure()设置的宽度和高度要尽可能大。

The way I solved this problem is by creating a custom view for the child views, and then overriding onMeasure() for the custom view. The new onMeasure() sets the width and height to be as large as possible.

现在的问题是,当你表现出软键盘旋转手机。随着方向改变和键盘显示,onMeasure()设置的最大可用高度是什么可笑的小,所以当我隐藏键盘,孩子的意见有错误的大小。

The problem is when you show the soft keyboard and rotate the phone. With the orientation change and the keyboard showing, onMeasure() sets the "largest" available height to be something ridiculously small, so when I hide the keyboard, the child views have the wrong size.

有没有办法告诉意见重新计算布局时,键盘会消失?还是我做onMeasure()错了吗?这里的code:

Is there a way to tell the views to recompute the layout when the keyboard goes away? Or am I doing onMeasure() wrong? Here's the code:

@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()完成相同的方式。

measureHeight() is done the same way.

推荐答案

您super.onMeasure(widthMeasureSpec,heightMeasureSpec)使用传入的价值观,我觉得你会希望这是实际测量的宽度和高度:

Your super.onMeasure(widthMeasureSpec, heightMeasureSpec) uses the passed in values I would think you would want these to be the actual measured width and height:

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

这篇关于请Horizo​​ntalScrollView的孩子一样大的屏幕?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆