Search

'안드로이드'에 해당되는 글 8건

  1. 2011.11.18 소프트키보드 상태에 따라 이벤트 발생시키기 (4)
  2. 2011.09.18 나인패치 자동생성기 (3)
당황스럽게도 안드로이드에는 키보드가 떴는지 안떴는지를 알 수 있는 API도 없고, 이벤트도 없습니다.

우회해서 알아내야하는데요.

터치이벤트 자체를 낚아채서 강제로 이벤트를 주면서 키보드 상태를 알아내는 법. 화면사이즈 변경된 걸로 알아내는 법. 몇몇 방법이 있지만 재사용하기 편한 건 키보드가 뜨면서 화면크기가 변경된 걸 알아내는 뷰 하나 만들어서 화면에 붙이는 게 편하더군요.

주의점은 AndroidManifest.xml에서 android:windowSoftInputMode adjustResize 속성을 추가해야합니다.

키보드 등장에 화면크기가 바뀌는 걸로 설정했기 때문에 키보드 등장에 의한 자동 스크롤(Pan)은 되지않습니다.


키보드 알아내는 뷰.
SoftKeyboardDectectorView.java 소스 내용


package com.givenjazz.android;

import android.app.Activity;
import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.View;

public class SoftKeyboardDectectorView extends View {

    private boolean mShownKeyboard;
    private OnShownKeyboardListener mOnShownSoftKeyboard;
    private OnHiddenKeyboardListener onHiddenSoftKeyboard;

    public SoftKeyboardDectectorView(Context context) {
        this(context, null);
    }

    public SoftKeyboardDectectorView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        Activity activity = (Activity)getContext();
        Rect rect = new Rect();
        activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
        int statusBarHeight = rect.top;
        int screenHeight = activity.getWindowManager().getDefaultDisplay().getHeight();
        int diffHeight = (screenHeight - statusBarHeight) - h;
        if (diffHeight > 100 && !mShownKeyboard) { // 모든 키보드는 100px보다 크다고 가정
            mShownKeyboard = true;
            onShownSoftKeyboard();
        } else if (diffHeight < 100 && mShownKeyboard) {
            mShownKeyboard = false;
            onHiddenSoftKeyboard();
        }
        super.onSizeChanged(w, h, oldw, oldh);
    }

    public void onHiddenSoftKeyboard() {
        if (onHiddenSoftKeyboard != null)
            onHiddenSoftKeyboard.onHiddenSoftKeyboard();
    }

    public void onShownSoftKeyboard() {
        if (mOnShownSoftKeyboard != null)
            mOnShownSoftKeyboard.onShowSoftKeyboard();
    }

    public void setOnShownKeyboard(OnShownKeyboardListener listener) {
        mOnShownSoftKeyboard = listener;
    }

    public void setOnHiddenKeyboard(OnHiddenKeyboardListener listener) {
        onHiddenSoftKeyboard = listener;
    }

    public interface OnShownKeyboardListener {
        public void onShowSoftKeyboard();
    }

    public interface OnHiddenKeyboardListener {
        public void onHiddenSoftKeyboard();
    }
}


사용 예) 사용하는 activity의 onCreate같은 곳에 다음과 같이 사용
final SoftKeyboardDectectorView softKeyboardDecector = new SoftKeyboardDectectorView(this);
addContentView(softKeyboardDecector, new FrameLayout.LayoutParams(-1, -1));

softKeyboardDecector.setOnShownKeyboard(new OnShownKeyboardListener() {

    @Override
    public void onShowSoftKeyboard() {
        //키보드 등장할 때
    }
});

softKeyboardDecector.setOnHiddenKeyboard(new OnHiddenKeyboardListener() {

    @Override
    public void onHiddenSoftKeyboard() {
        // 키보드 사라질 때
    }
});
신고

나인패치 자동생성기

Android 2011.09.18 14:20 Posted by 기분째즈
클래스파일: Create9Patch.class

안드로이드는 해상도가 다르다고 해도 같은 화면으로 보여주기 위해 이미지를 늘려주는 나인패치라는 포맷을 사용합니다. 주로 draw9patch라는 툴을 사용합니다만 이걸 만드는 작업이 여간 귀찮은 게 아닙니다.  9패치 만드는 게 너무 귀찮아서 간단히 만들었는데 생각보다 쓸만해서 공개합니다.

그냥 상하좌우 5픽셀 떨어진 곳부터 5픽셀짜리 나인패치를 그려주는 게 전부입니다.
그럼 어떻게 되느냐? 예제를 보면 더 이해가 빠르실 겁니다.


5픽셀짜리 영역을 만들면 위처럼 5픽을 자동으로 지정만 해줘도 그라데이션이 들어가 있는 버튼도 생각보다 깔끔하게 확대가 됩니다.

사용법은 이 글에 첨부된 Create9Patch.class를 다운받아서 java Create9Patch [대상 폴더 혹은 파일] 로 실행하면 됩니다. 대상을 파일이 아닌 폴더로 하게 되면 폴더에 있는 모든 png파일을 9.png형식으로 변경합니다.

곧 나올 씨네21 앱에 나인패치를 적용했을 떄 기기별 화면에 보여지는 모습입니다.

넥서스 S)


갤럭시 탭 7인치)


갤럭시탭 8.9인치)


소스는 git에 공개합니다.
https://github.com/givenjazz/Create9Patch

그리고 터미널창에서 좀 더 디테일하게 변경할 수 있는 툴도 github에 있더군요.
https://github.com/reimund/9-Patcher
신고


 

티스토리 툴바