2011년 9월 27일 화요일

Android - Color를 XML로 정의하여 사용하기

XML에 정의
/res/values/colors.xml


<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="color01">#ffff0000</color>
    <color name="color02">#ff00ff00</color>
    <color name="color03">#ff0000ff</color>
    <color name="color04">#ff000000</color>
</resources>





사용하기

<TextView android:id="@+id/textView4" android:text="TextView" android:layout_height="wrap_content" android:layout_width="wrap_content" android:textColor="@color/color01"></TextView>

2011년 9월 21일 수요일

2011년 9월 16일 금요일

Android - onDraw() 가 안먹을때

View 에서는 기본적으로 onDraw가 동작한다.

하지만 View를 RelativeLayout으로 바꿨더니 갑자기 동작하지 않았다.

해결방법은

this.setWillNotDraw(false);

위 코드를 onCreate 에 작성해주면 된다.

2011년 9월 8일 목요일

Android - XML에 배열 정의하여 사용하기

보통의 문자열은

/res/values/strings.xml 파일에 아래와 같이 정의하여 사용한다.


 <string name="app_name">WHOMLI</string>


XML에서 쓸때
@string/app_name


JAVA에서 쓸때
getString(R.string.app_name)



하지만 문자열 배열은??




/res/values/strings.xml 파일에 아래와 같이 정의하여 사용한다.

    <string-array name="planets_array">
        <item>Mercury</item>
        <item>Venus</item>
        <item>Earth</item>
        <item>Mars</item>
    </string-array>



JAVA에서 쓸때
String[] planets = getResources().getStringArray(R.array.planets_array);

Android - view, layout의 사이즈 구하기

바탕화면의 상대좌표를 이용하여 그림을 그리거나, 콤포넌트를 배치하려고 할때 화면, view, layout 의 사이즈를 알아야 하는 경우가 있다.

아래와 같이 코딩해 보지만 원하는 결과값을 얻을 수 없다.



@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.main_layout);

        View layoutMainView = (View)this.findViewById(R.id.mainLayout);

        Log.w("Layout Width - ", String.valueOf(layoutMaintView.getWidht()));
        Log.w("Layout Height - ", String.valueOf(layoutMaintView.getHeight()));

    }


=========  Result =========
Layout Width - 0
Layout Height - 0




원인으로는 onCreate 함수는 화면이 그려지기 전에 호출 되는 관계로 onCreate 시 객체의 사이즈를 구할 수 없다.


따라서 onCreate가 아닌 다른 함수에 해당 코드를 작성해야 한다.
그 코드는 바로....

onWindowFocusChanged(boolean hasFocus)



@Override
public void onWindowFocusChanged(boolean hasFocus) {

        View layoutMainView = (View)this.findViewById(R.id.mainLayout);

        Log.w("Layout Width - ", String.valueOf(layoutMaintView.getWidht()));
        Log.w("Layout Height - ", String.valueOf(layoutMaintView.getHeight()));
}


위와 같이 작성하면 올바르게 사이즈를 리턴하는 것을 확인 할 수 있다.