Quantcast
Channel: @blog.justoneplanet.info
Viewing all articles
Browse latest Browse all 46

AndroidでViewがResizeされたのを検知する

$
0
0

殆どstackoverflowのコードと同様だがlistenerに発火する条件だけ変更した。

public class DetectableResizedLinearLayout extends LinearLayout {
    private OnResizedListener mListener;

    public DetectableResizedLinearLayout(Context context) {
        super(context);
    }
    public DetectableResizedLinearLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    public DetectableResizedLinearLayout(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
    
    public void setOnSoftKeyShownListener(OnResizedListener listener) {
        mListener = listener;
    }
    
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        if (mListener != null) {
            final int newSpec = MeasureSpec.getSize(heightMeasureSpec); 
            final int oldSpec = getMeasuredHeight();
            if (oldSpec > newSpec + oldSpec / 4){
                mListener.onContracted();
            }
            else if (oldSpec + newSpec / 4 < newSpec) {
                mListener.onExpanded();
            }
        }
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
    
    public interface OnResizedListener {
        public void onContracted();
        public void onExpanded();
    }
}

上述のようにしないと非同期で画像を読み込むViewなどがあった場合など想定していないタイミングで発火してしまう。

参考


Viewing all articles
Browse latest Browse all 46

Trending Articles