난 또 순진했을 뿐이고 :(

 ClickListener 같은 경우 setOnClickListener를 사용하기 때문에, 당연히 난 setTextBlahBlah가 있을줄 알았는데, 
그런게 없어서,

setKeyListener를 사용해봤는데, SoftKey를 잡지 못하고, Hardware Key만 잡았다.

아 이런게 없을 수 있나 싶었는데.. :(

addTextChangedListener가 존재 했다.. 

public void addTextChangedListener (TextWatcher watcher)


mDialogEditText.addTextChangedListener(new TextWatcher() {

@Override

public void onTextChanged(CharSequence s, int start, int before, int count) {

Log.d(TAG,"Count = " + count);

}

@Override

public void beforeTextChanged(CharSequence s, int start, int count,

int after) {

}

@Override

public void afterTextChanged(Editable s) {

}

});

 

위와 같이, before, changed, after 등의 event를 detecting 할 수 있다. 


 

Interface Builder에서 Custom Class 를 사용할때, Unknown Class Error가 발생할 때,

 
이 문제가 발생하는 원인은, Objective-C에서 정적 library를 사용의 고질적인 문제 인데,

static library가 RunTime에 제대로 로드 되지 않아서 이다.

실제로 코드 상의 문제가 있다기 보다는 Objective-C 자체 버그 인 셈이다.

이 문제를 해결하기 위해선

Other Linker Flags , -all_load를 해주면 해결이 된다.

이러면 어플리케이션이 Load될때, Dependency 가 걸려 있는 모든 Static Library를 강제로 로드 한다.
이것말고도 Static Library에서의 Category 등 Side-Effect가 꽤 많다.

이것좀 고쳐 달라고 Apple님들아 :(

 

ListView Background  세팅하기.

이게 Blog에 포스팅 할 꺼리가 될까? android:background 세팅 해주면 끝이 아닌가?

나도 그러길 기대했지만, 이것 때문에 꽤나 고생했습니다 :(


위의 스크린샷은 ListView에 android:background="#777777" 로 회색으로 줬습니다.
잘 나옵니다. 그런데, Drag를 하면 아래와 같이 검은 색으로 바뀌어 버립니다. 



이것 참 난감한일이 아닐수가 없습니다. 실제로 Scrolling이 되지 않는 뷰임에도 불구 하고, 
Dragging을 하면 검은색으로 바뀌어 버립니다. 다시 터치를 해주면 원래대로 들어옵니다.

그 이유는 바로 여기 있습니다.


android:cacheColorHint가 black으로 되어 있기 때문인데요, 

Scrolling (혹은 Drag)가 일어 나면, 성능 최적화를 위해 저 ColorHint를 사용하는데, 
Drag시에 검은색으로 노출 되는것이 cacheColorHint값과 동일 한것이지요. 

해당 값을 background와 동일하게 세팅해주면, Drag에 색이 변하는 문제가 해결됩니다.

후.. 안드로이드 아직 수련이 많이 부족한가 봅니다 ㅎㅎ


오늘 제가 해볼 것은 Preference Category를 Customizing 해보는것입니다. 
우선 결과 부터 보여드리면, 


이런식으로 Category Title을 변경해보는것이죠.

위와 같은 Layout의 Preference XML은 아래와 같습니다. 

<?xml version="1.0" encoding="utf-8"?>


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

        android:title="@string/app_name">

    <PreferenceCategory

    android:title="@string/category_name">

    <Preference android:key="app_name"

        android:persistent="false"

        android:title="@string/app_name"

    />

    </PreferenceCategory>  

</PreferenceScreen>


PreferenceScreen에 PreferenceCategory를 추가하고, 
PreferenceCategory에 Preference Item이 하나 있는 형태 이지요, 

여기서, PreferenceCategory의 Layout을 Customizing하는게 목적입니다.

Preference Item의 Layout을 변경할때 사용하는것은,  android:layout 속성을 정의 하는것입니다. 


android:layout="@layout/my_preference_category" 뭐 이런식으로 추가 해주는것지요 

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

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

  android:orientation="horizontal"

  android:layout_width="fill_parent"

  android:layout_height="25dip"

  android:gravity="center_vertical"

  android:paddingLeft="5dip"

  android:background="#323331">

  

  <ImageView 

  android:layout_width="wrap_content"

  android:layout_height="fill_parent"

  android:src="@android:drawable/ic_menu_info_details"/>

  <TextView

  android:textStyle="bold"

  android:id="@android:id/title"

  android:layout_width="wrap_content"

  android:layout_height="fill_parent" 

  android:text="test"

  android:gravity="center"

  android:textColor="#FF0000"

  />

  

</LinearLayout>


여기서 부터, 안드로이드 개발의 짜증나는 점이 나타나는데, 
PreferenceCategory에서 지정한 title 값과, 내가 만든 Layout의 TextView가 연결되어야 하는데, 
id값을 어떻게 지정해주어야 한다는 정보가, developer.android.com을 아무리 뒤져 봐도 없습니다.

결국 Android Source코드를 보고 나서야 
@android:id/title로 줘야 한다는걸 알게 되었고,  이렇게 해주고 나니 정상적으로  동작합니다.

android:layout은 PreferenceCategory의 XML Attribute가 아니라, Preference 아이템 클래스들의 최상위 클래스인 Preference Class의 
XML Attribute입니다. 

즉, PreferenceCategory뿐 아니라, CheckBoxPreference 등등 모든 Preference들을 이와 같은 원리로 Customizing할 수 있습니다. 

이 방법은 AppStore에서는 확인해보지 않았습니다. 

1. InfoPlist.string 파일 추가

info.plist 파일을 Localizing해야 할것이라고, 최초에 생각하였지만, 그게 아니었습니다.
info.plist 파일에서 localize 된 값을 위해서는,  NSLocalizedString에서 사용하듯이, InfoPlist.strings파일을 추가 해야 합니다. 




2. Localize 


3. 앱 이름 지정하기 

Info.plist파일에서 AppName을 결정하는것은 "CFBundleDisplayName" 입니다. 

위와 같이 적절하게 값을 채워주고 앱을 실행하면 됩니다 ! ^^




텍스트 그림자 효과를 넣는 법을 살펴보도록 하겠습니다.

    <style name="TextShadow">

    <item name="android:shadowColor">#000000</item>

    <item name="android:shadowDx">1</item>

    <item name="android:shadowDy">1</item>

    <item name="android:shadowRadius">4</item>

    </style>


우선 shadow를 위한 attribute는 위와 같습니다.
지정할수 있는건, Color/위치 (상대 좌표)/ 범위 정도 입니다.

뭐 딱히 설명 드릴만한게 없군요 ^^

저 같은 경우에는 위처럼 Style을 정의 해서 사용하고 있긴한데,

TextView등의 Attribute로 바로 지정해도 무방합니다. ^^




Snow Leopard에는 고맙게도, svn ( client , admin) 과 Apache가 기본설치 되어 있다.

만약 /var/svn/repo 로 svn repository가 있다고 가정하고 Apache로 연동하는법을 살펴 보겠다.

  1 LoadModule dav_svn_module /usr/libexec/apache2/mod_dav_svn.so
  2 
  3 <Location /svn>
  4     DAV svn
  5     SVNParentPath /var/svn/
  6 </Location>

svn.conf 파일을 /etc/apaches2/other 에 생성한한다.

apache를 재시작하면 svn.conf 파일이 알아서 로드 된다.  재시작하는 Command는 아래와 같다. 

sudo /usr/sbin/apachectl restart


http://localhost/svn/repo 로 접속하면 된다 ^^





UILabel의 경우, "setTextAlignment:" 로 Text를 정렬한다. 
UIButton에 setTitle:forControlState:를 통해서 Text를 Setting하면, UIButton의 titleLabel에 값이 설정된다.

그래서
[someButton.titleLabel setTextAlignment:UITextAlignmentLeft]; 했는데, 변함이 없다. 

UIButton의 TitleAlignment는

@property(nonatomic) UIControlContentHorizontalAlignment contentHorizontalAlignment; // how to position content hozontally inside control. default is center


UIControlContentHorizontalAlignment를 통해서 해야한다. 


Android Activity는 Device 상태가 변경되면, Activity ReCreation(onDestroy->onCreate)가 일어 납니다. 
만약에, Activity가 세로로만 보여지길 원하고, 변경이 필요 하지 않다면,

"android:configChanges" property 를 이용하여, 무시하도록 할수 있습니다.

 <activity android:name=".MainActivity"

                  android:configChanges="orientation|keyboardHidden|keyboard"/>


"android:configChanges" property 를 이용하여, 무시하도록 할수 있습니다.
위와 같이 설정을 하게 되면 더이상 Activity ReCreation이 일어 나지 않습니다.

그러나, 위의 같은 경우는 "세로모드로만 동작" 하는 설정이 아닙니다.
Device LandScape인 상태에서 실행하면,  App역시도 LandScape모드로 실행됩니다.

이를 방지 하기 위해서 


 

      <activity android:name=".WakeMeUpMain"

                  android:label="@string/app_name"

                  android:screenOrientation="portrait"

                  android:configChanges="orientation|keyboardHidden|keyboard"/>


android:screenOrientation 속성을 이용하여, portrait로만 보여지게 하면,
"세로모드로만" 보여지는 App 이 됩니다. 

Android Application 은 Activity단위로 움직이기 때문에,
모든 Activity를 세로모드로만 보여줄것이라면, Activity별로 모두 세팅해줘야 합니다. 

AVD 에서 Orientation 바꾸기


Emulator의 메뉴에 봐도, AVD Orientation을 바꾸는게 없다. OTL.

구글링을 해본결과.
"Ctrl + F11", "Ctrl + F12" 로 가능하다 .


구글님들아, 메뉴에 좀 등록해주면 오죽 좋아 ㅎ

+ Recent posts