이직하고나서 첫 작품이 나왔습니다.
프로젝트에 뒤늦게 참여해서는 많은 부분을 담당하진 않았지만... 그래도 첫 출근부터 코딩과 야근을 했었던~
제 첫 직장이였던 소리바다에서 소리바다 안드로이드 앱 개발 했었는데... 이젠 mnet에 까지 와서 개발하게 되었네요 ㅎㅎ
mnet에서 나온 소셜 기능까지 들어간 mnet2.0...
릴리즈 하고 나니 멍~ 해지긴 하는데... 앞으로도 할일이 있으니...
우선 오자마자 하나 끝내고 잠시 있는 시간을 통해 블로그에 하나 글 남깁니다 ㅋ








 




길고도 길었던 네이트온톡 프로젝트가 끝!!
그리고 대망의 오픈!! ㅎㅎ
요즘 잘나가는 카톡과 마플이 있지만... 그래도 최대 메신저 회원을 갖고 있는 네이트온을 이용해서...
톡을 개발! ㅎ

 

 

이것은 인트로 화면!!

처음 시작할 때 잘 될 수 있을까 우려도 많았지만 오픈을 하고 나니까 너무 뿌듯함...
네이트온 PC버전과 같이 쪽지로 대화를 할 수 있고, 네이트온톡과는 무료통화도 할 수 있음.
나름 고생해서 만들었으니 좋은 결과가 있기를 바랄 뿐입니다.

       

 

대화는 기본!!
파일도 주고 받을 수 있음.. <- 이건 모 다른데도 다 하니까...
거기에 무료통화도 즐길 수 있음...
스마트폰요금제에서 무료 통화 다 썼으면 이제...네이트온톡에서의 무료통화로?? ㅎㅎ
이건 wifi로 잡아서도 할 수 있으니... 더 좋은건가? ^^
참고로 통화 화면에 있는 바람머리를 하고 있는 그림... 제 케릭터입니다 ㅋㅋ

개발중 다른팀과 마찰도 많았고, 커뮤니케이션도 잘 안될때도 많아서.. 지금까지 임했던 프로젝트 중에서
이번이 제일 힘들기도 했습니다. 그래도 개발자라는게 다 그렇듯... 힘들게 개발하고 내놓으면 그래도 뿌듯하지요
그런 다음 결과도 좋으면 기분도 좋겠는데... 네이트온톡을 사용할 사용자들은 어떻게 생각하실 지는 모르는거니까요... 좀 두렵기도 하네요... 왜냐 요즘 톡시리즈 앱들이 너무 잘나와서 ㅜ.ㅜ
거기에 사용자들의 의식도 많이 높아졌으니까요 ^^

이래나 저래나... 개발자들은 힘들게 개발했고... 이렇게 출시는 했습니다...
사용자들이 잘 사용해주고... 안되는거 알려주시면 또 고치고... 기능 추가해서 업데이트 해야겠네요 ^^ ㅋ

키독 있는게 참 마음에 든다...


getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

이와 같은 내용을 Activity에 추가.
락스크린이 걸려 있을 경우에 풀어주고, 스크린이 꺼져 있을 경우엔 켜준다.
PowerManager를 이용하는 방법보다 이 방법이 더 좋은 것 같음.


'Android' 카테고리의 다른 글

[Android] ADB 에서 cpu 사용률 보기.  (0) 2011.06.17
[Android] Asus Eee Pad...  (0) 2011.04.11
[Android] One day with The New Samsung GALAXY Tab 10.1  (1) 2011.03.14
[Android] CyworldFlag  (0) 2010.12.14
[Android] 한글에 Bold 속성 주기.  (8) 2010.11.10
회사 이직하고나서 바로 개발에 참여하고 런칭한 안드로이드 앱 입니다.
머... 저의 공식적인 두번째 앱?? 처음은 소리바다 안드로이드 앱이구요 ㅎ
그냥저냥 자기 위치를 찍고 다니는... 지금 이벤트 합니다...
1등이 맥북에어~~~ 아... 에어가 탐나는군요 ㅋ
이제... 또 업데이트 준비를 해야 겠군요 ㅎㅎ



TextView에서 글시체에 Bold 속성을 주기 위해서는 여러가지 방법이 있습니다.
간단하게는 xml에서 TextView의 속성중에 android:textStyle="bold"을 주는 방법도 있습니다.
하지만 여기에 단순한 문제가 있습니다. 지금 한국에서 그래도 제일 많이 풀린 갤럭시S에서는 위에 속성을 주었을 경우 Bold속성에 문제가 없지만, 개발자 입장에서 에뮬레이터나 다른 디바이스에서는 TextView에서 Bold 속성을 주어도 한글에서는 Bold속성이 들어간 텍스트가 보여지지 않습니다. 영어는 Bold 속성을 주어도 되지만... 한글에서는 안되는.. ㅜㅜ// 좀 황당하지요?? 그래서 좀 해결책을 보여주고자 이 포스트를 작성해 봅니다.

TextView에 보면 setPaintFlags 라는 메소드가 있습니다. 그 내용을 확인해보면

이런 내용이 되어 있습니다.. See Also에 있는 setFlags(int) 의 내용도 보게 되면


이 속성을 잘 이용하면 Bold 효과를 준 한글의 텍스트를 만들 수 있습니다.
그에 대한 코드는

textEx5.setText("한글 볼드 테스트");
textEx5.setPaintFlags(textEx5.getPaintFlags() | Paint.FAKE_BOLD_TEXT_FLAG);

이런식으로 만들어 주면 됩니다.
중요한건
textEx5.setPaintFlags(textEx5.getPaintFlags() | Paint.FAKE_BOLD_TEXT_FLAG);
이 부분일 것이라고 생각됩니다.

제가 테스트한 결과 화면입니다.

첫번째 글씨는 단순히 영문 텍스트만 넣은 것이고.
두번째 글씨는 영문 텍스트에 xml에서 TextView에 bold 스타일을 추가했을 경우 입니다.
세번째 글씨는 TextView에 한글만 넣은 상태이고
네번째 글씨는 TextView에 Bold 스타일을 추가한 것인데... 한글에는 변화가 없지만 영어에만 bold 스타일이 적용된 것이 확인됩니다. 좀... 안습이죠... 적용되면 여러사람 고민안했을 문제이였을 터인데 ㅎㅎ
다섯번째 글씨는... 한글에 Bold 스타일이 해결된 상태입니다 ㅎㅎ

에뮬레이터나 다른 디바이스에서 한글에 대한 폰트 지원을 제대로 해주지 않는 것으로 생각이 됩니다. 머 그래도 이렇게라도 해결할 수 있는 방법이 있으니 다행이라고는 생각됩니다. 테스트한 코드는 압축파일로 첨부합니다. :-)




안드로이드 개발시에 Dialog를 불러와서 사용하거나, 아니면 custom dialog를 만들 수도 있습니다.
Dialog를 만들고 활용하는 방법은
http://developer.android.com/guide/topics/ui/dialogs.html
이곳에 가시면 Dialog를 활용하는 방법이 나와 있습니다.
이 방법과 같이 Dialog를 activity를 이용해서 만드는 방법 도 있습니다.
방법은 다름이 아니라 Activity를 만들고 그 해당 Acitivity의 Theme를 Manifest파일 안에서




로 해두시면 됩니다. 그리고 해당 Acitivity 파일의 코드 안에서는 이런식으로 해 두시면 됩니다.
@Override
	protected void onApplyThemeResource(Resources.Theme theme, int resid,
			boolean first) {
		super.onApplyThemeResource(theme, resid, first);

		// no background panel is shown
		theme.applyStyle(style.Theme_Panel, true);
	}

이렇게 하면 호출한 Activity위에 해당 Acitivity가 Dialog 형대로 보이게 됩니다. 단 dialog로 만든 Acivitiy의 view xml 파일에 있는 main view 크기가 전체 크기보다 작아야 하겠지요?? ^^


  Android에서는 EditText 에서 입력 이벤트 처리를 해 주어야 할 경우가 있습니다. 키보드에서 입력하는 동안의 이벤트와 그리고 enter키가 눌렸을 때의 이벤트 처리 등. 해줘야 할 부분이 있습니다. EditText에 있는 OnEditorActionListener와 OnKeyListener를 이용해서 하게 되면 Enter와 back기와 같은 이벤트를 처리 할 수 있습니다. 
  OnEditorActionListener와 OnKeyListener의 결과는 비슷하기 때문에 OnEditorActionListener를 이용한 예제 코드를 보자면

package com.test.edittext;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;

public class EditTextEvent extends Activity implements OnEditorActionListener{
	
	EditText editInput = null;
	TextView textResult = null;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        editInput = (EditText)findViewById(R.id.EditText_Input);
        editInput.setOnEditorActionListener(this);
    }

	@Override
	public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
		// TODO Auto-generated method stub
		switch(v.getId())
		{
		case R.id.EditText_Input:
		{
			if(event.getAction() == KeyEvent.ACTION_DOWN)
			{
				Log.i("TEST", "TEST");
			}
			break;
		}
		}
		return false;
	}
}


이런식으로 하게 되면 됩니다... 하지만
소프트 키보드에서 입력한 순간 순간마다의 이벤트는 받지 못합니다. OnKeyListener를 이용하여도 마찬가지 입니다. 이럴 때에는 addTextChangedListener 라는 것을 이용하면 됩니다. 이것에 대한 자세한 내용은
http://developer.android.com/reference/android/text/TextWatcher.html
이곳에 하면 볼 수 있습니다.
예제 코드를 작성하자면

package com.test.edittext;

import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.KeyEvent;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;

public class EditTextEvent extends Activity implements OnEditorActionListener{
	
	EditText editInput = null;
	TextView textResult = null;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        editInput = (EditText)findViewById(R.id.EditText_Input);
        editInput.setOnEditorActionListener(this);
        editInput.addTextChangedListener(textWatcherInput);
    }

	@Override
	public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
		// TODO Auto-generated method stub
		switch(v.getId())
		{
		case R.id.EditText_Input:
		{
			if(event.getAction() == KeyEvent.ACTION_DOWN)
			{
				Log.i("TEST", "TEST");
			}
			break;
		}
		}
		return false;
	}
	
	TextWatcher textWatcherInput = new TextWatcher() {
		
		@Override
		public void onTextChanged(CharSequence s, int start, int before, int count) {
			// TODO Auto-generated method stub
			Log.i("onTextChanged", s.toString());			
		}
		
		@Override
		public void beforeTextChanged(CharSequence s, int start, int count,
				int after) {
			// TODO Auto-generated method stub
			Log.i("beforeTextChanged", s.toString());		
		}
		
		@Override
		public void afterTextChanged(Editable s) {
			// TODO Auto-generated method stub
			Log.i("afterTextChanged", s.toString());
		}
	};	
}



  이렇게 해주면 됩니다. TextWatcher안에 있는 onTextChanged는 변경된 텍스트에 대한 결과를. beforeTextChanged는 변경되기 전에 입력 되었던 텍스트에 대한 내용을. afterTextChanged는 텍스트가 변경이 되었을 때의 결과를 보여줍니다. 처음에 TextWatcher를 몰랐던 저도 EditText에서 입력되는 순간순간마다의 변경되는 내용을 처리하기 위해서 상당히 고민을 했습니다. 머 우회적인 방법으로 변경된 내용을 확인하긴 했지만, 이렇게 쓸 수 있는 방법이 있다는 걸 알았으니 더 코딩하기가 쉬워 지는군요.

예제 코드도 첨부 합니다.



+ Recent posts