R.java 를 참조하지 않고 리소스 얻어오기

int resId = context.getResources().getIdentifier(resName, "string", context.getPackageName());
String str = context.getString(resId);
             = context.getResouces().getString(resId);

int resId = context.getResources().getIdentifier(resName, "drawable", context.getPackageName());
Drawable = context.getResources().getDrawable(redId);

getIdentifier 의 첫번째 인자 는 리소스 이름
두번째 인자 "string" 같은경우
resource xml 의 element 이름 적어주거나
"drawable" 로 Drawable도 얻어올수 있다.


Posted by 바나나쥬스
TAG android

댓글을 달아 주세요

  1. BlogIcon 무적조로™ 2010.01.23 19:53 신고  댓글주소  수정/삭제  댓글쓰기

    음... 아직은 내가 아무것도 몰라서;;;
    이거 봐도 무슨 말인지 모르겠다 ㅋㅋ
    지금 열심히 책봐야지

  2. BlogIcon 무적조로™ 2010.01.28 00:12 신고  댓글주소  수정/삭제  댓글쓰기

    별로 쓸일이 없어도...
    나중에 궁금한거 있으면 물어볼께 ㅋㅋㅋ
    나중에 모른척하고 안갈쳐주면 안데~ㅋㅋ

  3. BlogIcon 비요뜨 2010.03.06 06:08  댓글주소  수정/삭제  댓글쓰기

    블로그로 퍼갈게요~~ 비공개로

  4. zz 2010.12.27 15:55  댓글주소  수정/삭제  댓글쓰기

    담아갈게요~^^

http://groups.google.com/group/android-developers/browse_thread/thread/d97938299660f501/8afafd1b56e646e2?lnk=raot
http://www.mail-archive.com/android-developers@googlegroups.com/msg34374.html
위 문제의 해결책

TabActivity 안에 Tab Content로 A Activity 가 있다고 할때
어떤 Caller Activity에서 startActivityOnResult() 로 TabActivity를 호출한 뒤
A Activity에서 아래와 같이 종료하면 (TabActivity가 종료됨)

setResult(RESULT_OK, intent);
finish();

위와 같이 RESULT_OK 로 넘겨줘도
TabActivity 를 호출한 Caller Activity에서 resultCode 가 항상 RESULT_CANCELED 로 넘어온다

이 문제는 의외로 쉽게 해결 할 수 있다.
A Activity를 종료하는 코드에서 부모 Activity를 얻어와서 (여기선 TabActivity 가 된다)
부모에도 result를 설정해 주면 된다.

setResult(RESULT_OK, intent);
Activity tab = getParent();
tab.setResult(RESULT_OK, intent);
finish();

이건 의도한 것인지.. 버그인 것인지... -ㅅ-;;

Posted by 바나나쥬스
TAG android, issue

댓글을 달아 주세요

  1. mSurfLab 2010.01.20 10:56  댓글주소  수정/삭제  댓글쓰기

    제가 고민고민던것을 정확히 집어주셨군요. 감사합니다.

  2. 나항상일등 2010.08.20 14:28  댓글주소  수정/삭제  댓글쓰기

    저도 고민하고 있었는데 감사합니다. ^^

  3. 0태 2012.10.27 13:03  댓글주소  수정/삭제  댓글쓰기

    감사합니다 ㅠㅠ 해결했네요

  4. 지나가는이 2012.11.10 01:29  댓글주소  수정/삭제  댓글쓰기

    덕분에 해결 할 수 있었습니다.
    감사합니다.

* install
$ sudo apt-get install virtual-ose

* 설치후 Install Guest Additions 해줘야 video driver도 제대로 잡히고 이리저리 편한다ㅋ

* audio 설정
처음 설치후 audio 설정이 disabled로 되어있기때문에 audio가 안된다
따라서 virtual machine Settings에서 audio를 enabled 시켜줘야 한다
host audio dirver는 ALSA 로 선택해 준다

* usb 설정
virtualBox open source edition을 설치하면 usb가 안되는데
아래 사이트에 설명한대로 설정하면 될것이다 (난 아직 안필요해서 안해봤음 -ㅅ-)

http://tuxmark.blogspot.com/2007/08/audio-and-usb-on-winxp-vm-in-virtualbox.html


음훼훼
이제 노래를 들어보아요 -ㅅ-;
Posted by 바나나쥬스

댓글을 달아 주세요

Android에 번들되어있는 Browser 소스 뒤져보다가 발견한 부분
정확히 mimeType에 해당하는 이미지는 아니고 mimeType을 열수 있는 Application에서 제공하는 이미지를
얻어오는듯 하다(소스를 보아하니 -_-)

Intent intent = new Intent(Intent.ACTION_VIEW)
intent.setDataAndType(Uri.fromParts("file", "", null), mimeType);
PackageManager pm = context.getPackageManager();
List<ResolveInfo> list = pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
if (list.size() > 0) {
Drawable icon = list.get(0).activityInfo.loadIcon(pm);
}
Posted by 바나나쥬스

댓글을 달아 주세요

  1. BlogIcon Chan 2009.05.27 00:08  댓글주소  수정/삭제  댓글쓰기

    꺄~ 안드로이드 전문가~ ㅎㅎ

  2. BlogIcon 옷장수 2009.05.27 09:17  댓글주소  수정/삭제  댓글쓰기

    꺄~ 오타다. MineType 내타입은 음~ 이미지에요~ -,.-;; ㅋㅋ

TabWidget에서 추가되는 Tab의 Background변경하기
Tab마다 View를 얻어와서 직접 BackgroundDrawable을 지정하고
아래 막대부분은 reflection을 이용하여 꽁수로 바꿔치기 한다

tab_indicator.xml, tab_bar_left.xml, tab_bar_right.xml 내용은 <selector>로 정의

    private void changeTabWidgetStyle(TabWidget tw){
        for (int i = 0; i < tw.getChildCount(); i++) {
            View v = tw.getChildAt(i);
            v.setBackgroundDrawable(getResources().getDrawable(R.drawable.tab_indicator));
        }
       
        Field mBottomLeftStrip;
        Field mBottomRightStrip;
        try {
            mBottomLeftStrip = tw.getClass().getDeclaredField("mBottomLeftStrip");
            mBottomRightStrip = tw.getClass().getDeclaredField("mBottomRightStrip");
           
            if(!mBottomLeftStrip.isAccessible()) {
                mBottomLeftStrip.setAccessible(true);
            }
            if(!mBottomRightStrip.isAccessible()){
                mBottomRightStrip.setAccessible(true);
            }
            mBottomLeftStrip.set(tw, getResources().getDrawable(R.drawable.tab_bar_left));
            mBottomRightStrip.set(tw, getResources().getDrawable(R.drawable.tab_bar_right));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

tab_indicator.xml 예
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Non focused states -->
    <item android:state_focused="false"
        android:state_selected="false"
        android:state_pressed="false"
        android:drawable="@drawable/tab_unselected" />
    <item android:state_focused="false"
        android:state_selected="true"
        android:state_pressed="false"
        android:drawable="@drawable/tab_selected" />

    <!-- Focused states -->
    <item android:state_focused="true"
        android:state_selected="false"
        android:state_pressed="false"
        android:drawable="@drawable/tab_focus" />
    <item android:state_focused="true"
        android:state_selected="true"
        android:state_pressed="false"
        android:drawable="@drawable/tab_focus" />

    <!-- Pressed -->
    <item android:state_pressed="true" android:drawable="@drawable/tab_press" />
</selector>

Posted by 바나나쥬스

댓글을 달아 주세요

  1. 양은경 2010.05.19 19:03  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 위 글 보다가 모르겠어서 질문드립니다.

    위에서 xml파일에서 사정없이 에러가 나는데요 ㅜㅜ;;;
    현재 버전(1.6 or 2.1)으로 하려면 Selector와 Item은 무엇으로 봐뀌는 건가요???

    • BlogIcon 바나나쥬스 2010.05.20 22:31 신고  댓글주소  수정/삭제

      아마도 이미지가 없으니까 에러가 나는거겠죠? ㅎㅎ
      android:drawable 에 적어놓은 이미지 파일들이 있어야 됩니다.. 위 코드는 그냥 예제인지라 ^^;;

    • 양은경 2010.05.24 11:04  댓글주소  수정/삭제

      아 이미지가 있어야 문제가 없는건가요??
      그럼 먼저 이미지를 만들고 해봐야 겠네요 ^^
      감사합니다.

  2. 임태훈 2010.06.08 16:22  댓글주소  수정/삭제  댓글쓰기

    좋은 글 감사합니다. 잘 보고 갑니다.
    근데 궁금한게 있는데요.
    제가 안드로이드 공부한지 얼마 되지 않아서 잘 모르는 부분이 많이 있네요.
    위 XML을 만들고
    setBackgroundDrawable에서 마지막에 getDrawable에
    R.drawable.tab_indicator이라고 되어 있는데
    위와 같이 xml으로 만들었을경우 보통은 Layout로 되어 있지 않나요??
    똑같이 R.drawable.tab_indicator이라고 하면 에러가 나는데..
    제가 뭐를 모르고 있는건지 잘 모르겠네요.

    • BlogIcon 바나나쥬스 2010.06.08 22:05 신고  댓글주소  수정/삭제

      drawable도 xml파일로 정의 할수 있습니다.
      tab_indicator.xml 을 drawable 폴더 아래에 넣으셔야합니다. 그래도 제대로 컴파일될려면 tab_indicator.xml안에서 사용한 tab_focus,tab_selected등으로 정의한 drawable이 있어야 겠지요..

  3. 2012.11.04 16:37  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

1.  Linear Gradient
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient android:startColor="#FFFF00" android:endColor="#FFFFFF" android:angle="270"/>
    <corners android:radius="0dp" />
</shape>


2. Radial Gradient
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <gradient android:type="radial"
        android:startColor="#ff0000"
        android:endColor="#ffff00"
        android:gradientRadius="300"
        android:centerX="0.5"
        android:centerY="0.7"/>
</shape>


3. Line
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line">
    <stroke android:width="1dp" android:color="#FF000000"
            android:dashWidth="1dp" android:dashGap="2dp" />
    <size android:height="5dp" />
</shape>

4. Oval
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
    <solid android:color="#00000000"/>
    <stroke android:width="4dp" android:color="#990000FF"
            android:dashWidth="4dp" android:dashGap="2dp" />
    <padding android:left="7dp" android:top="7dp"
            android:right="7dp" android:bottom="7dp" />
    <corners android:radius="4dp" />
</shape>


5. Ring & Sweep Gradient
<shape android:shape="ring" xmlns:android="http://schemas.android.com/apk/res/android"
    android:innerRadiusRatio="3"
    android:thicknessRatio="8"
    android:useLevel="false">
    <size android:width="48dip"
        android:height="48dip" />
    <gradient android:type="sweep"
        android:useLevel="false"
        android:startColor="#4c737373"
        android:centerColor="#4c737373"
        android:centerY="0.50"
        android:endColor="#ffffd300" />
</shape>



Posted by 바나나쥬스
TAG android

댓글을 달아 주세요

  1. Rohit 2010.06.26 16:42  댓글주소  수정/삭제  댓글쓰기

    Too good, thanks man

http://developer.android.com/guide/tutorials/views/hello-tabwidget.html
위 링크의 TabWidget 예제로 이리저리 TabWidget의 background 변경해본 결과

먼저 background 로 쓸 drawable 파일 준비
일단 tabWidget의 background로 사용할 drawable 파일을 만들었다
물론 그냥 색상을 지정해도 상관없다 ㅋㅋ (걍 이런저런 기능 사용해보기위해)

res/drawable/tab_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient android:startColor="#FF0000" android:endColor="#C0C0C0"
            android:angle="0"/>
    <corners android:radius="0dp" />
</shape>

이제 이 background를 적용해 보았다

1. Theme로 적용
 styles.xml 만든다
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="Theme.Test" parent="android:Theme">
        <item name="android:tabWidgetStyle">@style/Widget.TabWidget</item>
    </style>
    <style name="Widget.TabWidget" parent="android:Widget.TabWidget">
         <item name="android:background">@drawable/tab_bg</item>
    </style>
</resources>

여기서 tabWidgetStyle은 모두 "Widget.TabWidget" style을 사용하도록 하고 background를 지정해 주었다
"Theme.Test"를 AndroidManifest.xml 에서 적용시킨다

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="net.escomic.test"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name"
        android:theme="@style/Theme.Test">
        <activity android:name=".Tab" android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-sdk android:minSdkVersion="3" />
</manifest>

이렇게 하면 결과는


글자에만 배경이 적용되었다 -_-;;;

2. TabWidget에 Style적용
테마로 적용한 경우 원하는 결과가 나오지 않아 TabWidget에 바로Widget.TabWidget Style을 적용해 보았다

AndroidMenifest.xml 에서 적용한 Theme는 삭제하고
layout 파일에서 style적용
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <TabWidget
            android:id="@android:id/tabs"
            style="@style/Widget.TabWidget"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">
            <TextView
                android:id="@+id/textview1"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:text="this is a tab" />
            <TextView
                android:id="@+id/textview2"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:text="this is another tab" />
            <TextView
                android:id="@+id/textview3"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:text="this is a third tab" />
        </FrameLayout>
    </LinearLayout>
</TabHost>

style대신에 android:background="@style/tab_bg" 로 써도 된다
이렇게 하면 다음과 같다 -_-;;


이것은 소스 코드상에서 직접 설정하는것과 같다
TabHost mTabHost = getTabHost();
TabWidget tabWidget = mTabHost.getTabWidget();
tabWidget.setBackgroundResource(R.drawable.tab_bg);       

3. 따라서...
테마에  tabWidgetStyle 과 TabWidget에 직접 style을 적용하는 것이 다르다는 것을 알수있는데
왜인지는 모르겠따 -_-;;;



* 번외로 TabHost라고 있는데 여기에 background를 적용하면 아래와 같다
여기서 TabWidget에 background가 없으면 TabHost의 것이 적용되기때문에 노란색 그라데이션이 윗부분까지 적용되게 된다


* TAB1, TAB2, TAB3과 같은 Tab에 style을 적용하는 것은 없는 듯하다
따로 아예 만들어줘야 한다는듯... -_-;;;


Posted by 바나나쥬스

댓글을 달아 주세요

  1. 아인슈 2011.01.05 17:57  댓글주소  수정/삭제  댓글쓰기

    탭 메뉴의 자체적인 색은 따로 설정 하신건가요?

  2. 질문 2011.04.11 21:54  댓글주소  수정/삭제  댓글쓰기

    리소스에 tag_bg.xml추가하고

    tabwidget안에
    android:background="@drawable/tab_bg"해도 안되고
    android:background="@style/tab_bg"해도 안되네요

    에러는 안나는데 배경이안떠요
    다른거 추가해줘야되나요?

  3. 2012.11.04 01:20  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

XLFD

지식쌓기 2009.05.20 12:03
XLFD = X Logical Font Description

리눅스에서 사용하는 폰트를 나타내는 방법으로
대시로 구분된 폰트의 속성들을 나열한 것으로 각 속성은 와일드 카드로 변경되어 runtime에 지정할수 있다
자세한 내용은 : http://www.meretrx.com/e93/docs/xlfd.html

형식 :
FontNameRegistry-Foundry-FamilyName-WeightName-Slant-SetwidthName
-AddStyleName-PixelSize-PointSize-ResolutionX-ResolutionY
-Spacing-AverageWidth-CharSetRegistry-CharSetCodin

예 :
-monotype-times new roman-regular-r---*-%d-*-*-p-*-iso8859-1


아래 명령어를 통해서 xlfd의 모든 리스트를 볼수 있다
xlsfonts [-options] [-fn pattern]

ex) xlsfonts -fn '-hy-*'

Posted by 바나나쥬스
TAG Linux, xlfd

댓글을 달아 주세요

  1. BlogIcon iolo 2009.05.21 00:50  댓글주소  수정/삭제  댓글쓰기

    요즘 리눅스는 저거 잘 안쓰는데...
    안드로이드는 아직 저거 쓰나보네...

Android에서도 UI관련 행위는 UI Thread위에서 해야한다
그렇지 않으면 아래와 같은 Exception이 발생한다

android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created .....

Swing의 SwingUtilities.invokeLater(Runnable r)와 같은 역할을 하는 아래의 방법을 사용하여 해결할수 있다

Activity.runOnUiThread(Runnable action)

View.post(Runnable action)

View.postDelayed(Runnable action, long delayMillis)

Handler.post(Runnable action)

Posted by 바나나쥬스
TAG android

댓글을 달아 주세요

Eclipse.app 에서 오른쪽 클릭후 '패키지내용보기'
Contents > MacOS > eclipse.ini 파일에 size설정

-Xms128m
-Xmx1024m

넉넉하게 주자구 -_-
안드로이드 빌드할때마다 OutOfMemory -_-

Posted by 바나나쥬스
TAG Eclipse, Java, Mac

댓글을 달아 주세요

  1. BlogIcon Chan 2009.05.03 23:14  댓글주소  수정/삭제  댓글쓰기

    안드로이드... ㅎㄷㄷ 이구만 -_-