w.h.i.t.e의 모든 글

Developer

EditText등에서 키 입력 후킹하기

EditText에 포커스가 가 있을 때에는 onBackPressed 등에서 이벤트가 잡히지 않는다.
이때는 dispathKeyEventPreIme를 사용할 수 있다.

@Override
public boolean dispatchKeyEventPreIme(KeyEvent event) {
    if (mContext != null) {
        InputMethodManager imm = (InputMethodManager)mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
        if (imm.isActive() && event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
            // 뭔가의 동작
        }
    }
    return super.dispatchKeyEventPreIme(event);
}

커스텀 ListView 크기 Parent view만큼 늘리기

ListView나 Adapter view들은 항목이 적으면 거기에 맞춰서 크기를 줄이게 되는데
갤럭시나 갤럭시나 갤럭시같이 요상한 커스텀화로 ListView에서 over scroll을 지원하는 경우
밑은 텅텅비었는데 스크롤이 되어서 밑에 잘린것 같이 보이는 경우가 있습니다.

그래서 또 쓸데없이 ListView의 크기를 굳이 늘려줘야합니다.

int mItemHeightNormal = 0;
 
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
    mItemHeightNormal = this.getMeasuredHeight(); // 한 행의 높이를 얻을 수 있습니다.
    int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
    mParentHeight = MeasureSpec.getSize(heightMeasureSpec); // 부모가 요구하는 최대 높이. 다른 view를 고려하지 않아 이걸 높이로 바로 쓰면 가려져도 스크롤이 안되는 상황이.
    this.setMeasuredDimension(parentWidth, mParentHeight);
}
protected void onLayout(boolean changed, int l, int t, int r, int b) {
    // 여기서 b-t는 ListView가 가질 실제 높이가 된다
    if (mItemHeightNormal * getCount() > b) { // 스크롤이 안될 상황에서만 b를 최대 높이로 설정
         b = mParentHeight;
    }
    super.onLayout(changed, l, t, r, b);
}

여러가지로 시도해보다 나오게 된 코드인데 더 좋은 방법이 있으면 알려주시길..