안드로이드 WebView의 lodaData() 에서 한글 깨짐 방지


Load할 data가 "UTF-8" 일때,


WebView mWebView = (WebView)findViewById(R.id.webView1);

mWebView.getSettings().setDefaultTextEncodingName("UTF-8");


StringBuilder sb = new StringBuilder();
sb.append("<html><head></head><body><table cellpadding=\"3\"             
                                                                   cellsapcing=\"10\" width=\"750\">");
sb.append("<tr align=\"left\" bgcolor=\"#E5CC7F\">");
sb.append("<th>번 호</th>");
sb.append("<th>이 름</th>");
sb.append("<th>나 이</th>");
sb.append("</tr>");

... 중간 생략 ...

sb.append("</table></body></html>");


// Android 4.0 이하 버전

mWebView.loadData(sb.toString(),  "text/html", "UTF-8");  


// Android 4.1 이상 버전

mWebView.loadData(sb.toString(),  "text/html; charset=UTF-8", null);  


assets 폴더에 있는 HTML 파일을 WebView에 표시하는 방식도 있는데

본 소스는 메모리 상의 HTML을 막바로 WebView에 표시하는 방식이다.




EditText로 입력을 받을 때 숫자만 입력 받고 문자가 포함되었을 경우 다시 
입력받도록 하기위한 간단한 코드이다.


xml layout이 다음과 같을 경우 
inputType="number"로하면 오직 양의 정수만 입력 가능하다. 
키보드에 특수 문자나 +, -, 소수점이 표시되더라도 오직 양의 정수만 입력
가능하다.

그리고 maxLength="4"로하면 4개의 숫자만 입력이 가능하다.
xml layout 파일을 아래와 같이 설정함을 통해서 숫자만 입력되도록 할수 있다.

    <EditText 
        android:id="@+id/editPhoneNum"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/txtPhoneNum"
        android:inputType="number"
        android:maxLength="4"
        android:textSize="40sp"/>

xml layout을 이용하거나 혹은 소스 상에서 체크할려면 다음과 같이 하는 방법도 
가능하다.

EditText editPhone = (EditText)findViewById(R.id.editPhoneNum);
try {
String str = editPhone.getText().toString().trim();

//아래 str에 숫자만 있을 경우는 NumberFormatException이 
                //발생치 않으나 숫자 이외의 어떤 문자가 포함되면 
                //NumberFormatException이 발생한다.
//따라서 이 Exception이 발생하면 숫자 이외의 값이 입력되었다고 
                //판단하고 재 입력 받도록 처리하면된다.

int rt = Integer.parseInt(str);
Toast.makeText(this, "RT : "+rt, 1).show();
} catch(NumberFormatException e){
Toast.makeText(this, "숫자만 입력하세요", 1).show();
}

한 마디로

Integer.parseInt()를 이용하되 NumberFormatException을 이용해서 
처리할 수 있다.


앱의 설치 위치 지정하기(내장 메모리, 외장 메모리)


AndroidManifest.xml 에 아래와 같이 installLocation 을 추가 한다.


<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.freecatz.test"

    android:versionCode="3"

    android:versionName="1.6"

    android:installLocation="preferExternal" >


auto : 자동으로 내장메모리에 우선 설치 하나 공간이 없는 경우 외장메모리에 설치.

internalOnly : 내장 메모리에 설치.

preferExternal : 외장메모리에 설치를 우선으로 하나 공간이 없는 경우 내장메모리에 설치.



Context에 대한 이해

  • Context를 이해하는 걸 다들 어려워 한다. 질문글에 답을 달다가 갑자기 정리가 깔끔하게 되서....

    하나의 application이 실행되기 위해서는 그 밑바탕에 깔려져야 하는 많은 정보들과 환경들이 필요하다. 
    그 정보들과 환경들을 안드로이드 시스템이 제공해 준다.
    application 실행을 위해 밑바탕에 깔려져 있는 정보들과 환경들을 Context라 한다.
    따라서 이 Context에는 안드로이 시스템이 제공해주는 유용한 많은 정보들이 있다.
    따라서 이 Context를 통해서 안드로이드 시스템이 제공해주는 많은 유용한 정보들을 
    꺼집어 낼수 있다(getSystemService() 메소드로).

    근데 Context를 필요로하는 곳에 Activity 객체인 this를 념길수 있는 이유는  
    Activity가  Context를 상속 받았기 때문에 Activity는 Context의 모든 정보를 가지고 있는 것이이다. 
    그래서 Context를 필요로 하는 곳에서 Activity의 객체를 넘길수 있는 것이다.

    Context를 얻을 수 있는 몇 가지 방법
    -. Activity 객체를 통해서. Activity 객체 자체가 Context이기도 하기 때문에 Context를   
       필요로하는 곳에 Activity 객체인 this를 사용하면 된다.
    -. View의 객체가 있으면 View의 getContext()를 통해서. View의 객체가 없는 상황이면 
       View v = new View(activity.this);로 만들면된다. 이때 View를 전역적으로 선언하면
       된다.
    -. Context 클래스의 getApplicationContext()를 통해서
    이정도면 Context를 못 구할 일이 별로 없을 것이다.



+ Recent posts