728x90
책에서는 그냥 layout_weight로 비율을 맞춘다고 했는데
정확히 어떻게 줘야 하냐면

모든 가로폭을 관장하는 View를
layout_width=0
layout_weight=n

ex) 두개의 TextView를 2:8로 놓으려면
<LinearLayout
    layout_width=match_parent
    layout_height=wrap_content
>
<TextView
    layout_width="0"
    layout_weight="2"
    layout_height="wrap_content"/>
<TextView
    layout_width="0"
    layout_weight="8"
    layout_height="wrap_content"/>
</LinearLayout>

 로 주면 딱 비율이 맞는다.
굳이 10을 기준으로 하지 않아도 되지만
여러 Layout 반복되므로 계산하기 편하게 기준되는 수를 모든 화면에 동일하게 적용하는 게 좋다.

물론 0.5: 9.5 도 그대로 주면 된다.
layout_weight="0.5" 와 같이
728x90
728x90

2.1에서 잘 작동했던 restartpackage.
LogOut으로 썼는데 2.2에서는 사용할 수 없다.
근데 구글에는 같은 메소드가 다른이름으로 존재한다.

Google force closes packages in Android 2.2 (Froyo).
This happens over an internal API.
Method name is: forceStopPackage(String pkgName).


Class c = Class.forName("android.app.ActivityManagerNative");
Method getDefaultMethod = c.getMethod("getDefault");
getDefaultMethod.setAccessible(true);
Object nativeManager = getDefaultMethod.invoke(null);
c = nativeManager.getClass();
Method forceStopPackageMethod = c.getMethod("forceStopPackage", String.class);
forceStopPackageMethod.setAccessible(true);
forceStopPackageMethod.invoke(nativeManager, pkgName);
->
java.lang.SecurityException: Permission Denial: forceStopPackage() from pid=1965, uid=10075 requires android.permission.FORCE_STOP_PACKAGES

권한이 없댄다. 그래서
AndroidManifest.xml 에 추가했다.

그런데 이것역시 되지 않는다.
The only problem is that in order to use this method, you need the “android.permission.FORCE_STOP_PACKAGES” permission, and that permission requires a “signature” protectionLevel, so the system will not grant it unless the app is signed with the same signature as the system

해당 권한은 시그너쳐로 보호되고 있어서
시스템과 같은 사인이 아니면 권한을 얻을 수 없댄다.

된장....
728x90
728x90

간단히  App 을 만들 수 있는 Tool이라고 해서
다운받고 실행시키려고 했더니...

뭔가 입력하라고 한다.

입력 했더니 다음과 같이 뜨면서 기다리랜다.

728x90
728x90
저장공간의 부족으로 고민고민하다가 결국 하나 질렀다.

처음에는 FreeAgent 1TB라고 해서 샀는데
그게 MAC을 지원하지 않더군... 그래서 다시 찾아보니
GoFlex라는 모델은 지원한다고 되어있어서 그것으로 다시 샀다.

설치방법이 어려울 것 같았는데 해보니 해볼 만 하더군.

일단 케일블과 전원을 꽂으면 MAC에서 자동으로 외장하드를 인식한다.
Finder에서 그것을 살펴보면 Mac Installer.dmg라고 있는데 그것을 실행시켜서 설치한다.

설치하면서 이런저런 정보를 캐 가는데... 별로 내키지는 않지만 잘 작성을 했다.

그리고 나서 파티션을 나누는데
200기가는 Time Machine에서 200기가는 MAC util 및 data 등으로 쓰고
나머지 500기가(계산상 600기가가 아니라 530기가정도 된다)는 윈도랑 같이쓰기로 했다.

DISK UTILITY를 연다
FreeAgent를 선택한다.
우측에 First Aid, Erase, Partition, RAID, Restore 가 있는데
그중 Partition을 선택한다

당장은 파티션을 나누지 않았으므로 파티션은 1개고
Volume scheme에 current라고 나와있는 것을 클릭해 3partitions을 선택한다
그러면 3개의 파티션이 나눠지고
첫번째 파티션을 클릭하고 아래쪽에 Options을 클릭한다음 GPT를 클릭한다.
(Inter 기반 CPU를 쓰면 선택)

Volume Information에 해당 파티션 이름을 입력한다
첫번째 파티션은 TimeMacheme로 하기로 했으니 그렇게 짓고
Format은 MAC OS Extended(journaled) 로하고
Size는 200기가로

두번째 파티션은 첫번째와 동일하니까 그대로 하고

세번째 파티션은
Format에서 windows NT Format(NTFS)를 선택한다

오른쪽하단의 Apply를 클릭하면 파타션이 나누어진다.

일단 두번째 파티션에 Data를 넣어보니 잘 들어간다
따로 포맷은 필요없나보다. ^^;

아~ 이제 저장공간 부족에서 해방인가?
드라마, 영화 등 좀 받아놔야겠다 ㅋㅋㅋ

---------------------------------------------
자세한것은 아래사이트 참조.
제일 아래에 관련 동영상까지 볼 수 있게 링크가 걸려있음.

http://seagate.custkb.com/seagate/crm/selfservice/search.jsp?DocId=207851&NewLang=en&Hilite=


728x90
728x90
한번 올려보려고 했더니... 돈내란다.

처음에는
이름
웹사이트주소
전화번호를 물어봐서
넣어줬더니

그 다음에는
$25를 내야 Developer로 등록 해 준단다

Register as a developer
Registration fee: $25.00
Your registration fee enables you to publish software in the market. The name and billing address used to register will bind you to the Android Market Developer Distribution Agreement. So make sure you double check!

Pay your registration fee with
Buy Now with Google Checkout



728x90
728x90
Tab 예제를 하면서
버튼이 눌러졌을 때 다른 tab으로 이동하게 하는것을 찾으려고 무진장 애를 썼으나...
찾기 힘들었다.

그런데 ㅋㅋㅋ 힌트를 얻은게 getParent()라는 게 있어서 한번 해 봤더니 되는군 ㅋㅋㅋ

onClick() event안에 넣으면 됨.

public void onClick(View view) {
                TabActivity tab = (TabActivity)getParent();
                TabHost tabHost = tab.getTabHost();
                tabHost.setCurrentTabByTag("targetTabName");//원하는 tabName
}

어딘가 다른 방법이 있다면 다른방법을 찾아봐야겠군 ^^;
728x90
728x90
Google Map View tutorial 을 배포 성공한 뒤에
overlayItem을 하나 더 추가했다.
(tutorial에서 그렇게 하라고 해서)

그런데 build도 문제없이 됐고 실행도 문제가 없는데
안드로이드 아이콘이 하나밖에 보이지 않는것이었다.

그래서 몇 번 재시도를 해봤는데도 똑같았다.

그러다 안드로이드 이미지를 클릭하면 맵을 zoom in/out하는 bar가 생기는데
거기에서 zoom out을 해봤더니 맵이 작아지면서 안보였던 android 이미지가 나타나더군...
예전 target찾을 때도 몇주를 헤맸었는데 ㅋㅋㅋ
화면을 잘 살펴봐야겠다.

728x90
728x90
Google Map View tutorial을 따라 하던중
Source코드를 다 하고 Error도 없는데
에뮬레이터를 가동시키자 위 에러와 함께 해당 App가 실행이 안되는 것이었다.

처름 프로젝트를 생성했을 때,
Google Apis를 target으로 지정했는데
프로젝트에서 maps.jar를 필요로 해서 해당 jar를 external jar에서 찾아서 build path에 추가했었다.
근데 그게 혼란을 준건가??

아무튼 추가한 build path에서 제거하고 다시 build를 한뒤
실행시켜보니 이제는 괜찮다.
728x90
728x90
출처 : http://stackoverflow.com/questions/2209406/issues-with-android-tabhost-example

안드로이드 웹사이트에서 제공되는 tutorial중 TabLayout 은 제대로 실행이 되지 않는다.
해당 source가 완전하지 않아서 인데 이를 해결하는 방법이 위 사이트에 나와있다.

1. main.xml에서
The third to last line under /res/layout/main has a typo (a ; instead of a :)
Eclipse에서 알려주듯이 에러가 나는 라인에 보면 세미콜론(;)으로 되어있다. 이를 콜론(:)으로 바꿔준다.

2. HelloTabLayout.java에서
tabHost.setCurrentTab(intent); 가 있는데 
setCurrentTab은 int형을 인자로 원하는 tab을 선택하게 된다.
현재 3개의 tab이 있으므로 (0,1,2)중의 숫자를 넣어주면 된다.
tabHost.setCurrent(0);

또는 이름으로

tabHost
.setCurrentTabByTag("albums"); 과 같이
위에 tabSpec에 선언한 이름 ("songs", "artists", "albums")중의 하나를
tab이름으로 넣으면 되다.

spec = tabHost.newTabSpec("songs").setIndicator("Songs",
                          res.getDrawable(R.drawable.ic_tab_songs))
                      .setContent(intent);

3. 중간에 난데없이 나타나는 mTabHost 를 볼 수 있는데
이클립스에서 에러로 나타날 것이다.
이것 역시 제대로 오타다

그냥 tabHost로 바꿔주면 된다.

4. 해당 tutorial에서는 ic_tab_artists.xml 파일만 보여주는데
실제로는 같은내용으로
ic_tab_songs.xml 와 ic_tab_albums.xml 두 xml파일을 같은 위치에 생성 해 주어야 한다.

5. 마지막으로 AndroidManifest.xml 파일에
tab으로 사용할 activity들이 정의되어있지 않은데

현재 정의된 Activity아래에 Activity들을 추가해 주면된다.
해당 class이름 앞에 .을 붙여서 .AlbumsActivity ^^
<activity android:name=".AlbumsActivity"
                 
android:label="@string/app_name"
                 
android:theme="@android:style/Theme.NoTitleBar">
       
</activity>
 
<activity android:name=".ArtistsActivity"
                 
android:label="@string/app_name"
                 
android:theme="@android:style/Theme.NoTitleBar">
       
</activity>
         
<activity android:name=".SongsActivity"
                 
android:label="@string/app_name"
                 
android:theme="@android:style/Theme.NoTitleBar">
       
</activity>


=======================================================================

첨부 파일을 참고 할 것.
이것이 제대로 실행이 안되면 애뮬레이터를 제거하고 새로 만들어서 test 해 볼 것.
728x90
728x90
03-28 23:57:32.201: ERROR/AndroidRuntime(388): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.nobang.widget/com.nobang.widget.BillboardWidget}: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.nobang.widget/com.nobang.widget.ArtistsActivity}: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'


03-28 23:57:32.201: ERROR/AndroidRuntime(388): Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.nobang.widget/com.nobang.widget.ArtistsActivity}: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'

==>
내 소스의 문제였다.
onCreate() method 에서
super.onCreate(savedInstanceState);
setContentView(R.layout.list_artists);  --> 바로 setContentView를 선언해서 사용하려고 했는데
정확히는 모르겠지만 그게 문제였던 것 같다.
해당 ListView를 사용하려면 list라는 attribute가 선언되어 있어야 하는데 없다는것을 보니.

의도한것과는 전혀 상관없는곳에서 나서 참...
그래도 다행이 찾았으니 ㅋㅋㅋ


728x90
BLOG main image
"그게 뭐 어쨌다는 거냐?" 늘 누가 나에게 나에대한 말을할 때면 이말을 기억해라. by nobang

카테고리

nobang이야기 (1951)
Life With Gopro (7)
Life With Mini (79)
Diary (971)
너 그거 아니(do you know) (179)
난 그래 (159)
Study (290)
속지말자 (10)
Project (34)
Poem (15)
Song (0)
Photo (113)
낙서장 (45)
일정 (0)
C.A.P.i (2)
PodCast (0)
nobang (27)
고한친구들 (4)
recieve (0)
History (0)
android_app (2)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

Total :
Today : Yesterday :