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
* 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 바나나쥬스
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.  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
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 바나나쥬스

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
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
JLabel에 한글 폰트로 설정한 경우 (아시아 폰트)
Html Tag를 사용하여 영문을 쓰는경우 descent가 잘리는 경우가 발생한다

한글 XP에서 기본적으로 Label.font가 Gulim, Plain, 12가 되는데
이때 영문리소스에 html을 적용하면 문제가 생긴다

아래 예제를 실행하면

Font f = new Font("Gulim", Font.PLAIN, 12);
UIManager.put("Label.font", f);
  
JFrame frame = new JFrame();
JPanel panel = new JPanel();

String str = "Layout";
  
JLabel label = new JLabel(str);
label.setBorder(BorderFactory.createLineBorder(Color.RED));

JLabel htmlLabel = new JLabel("<html>"+str+"</html>");
htmlLabel.setBorder(BorderFactory.createLineBorder(Color.RED));
  
panel.add(label);
panel.add(htmlLabel);
  
frame.add(panel);
frame.pack();
frame.setVisible(true);

결과가 다음과 같다
Html을 쓴 경우와 안쓴경우 string이 그려지는 baseline이 다른것을 알수 있다.
하지만 XP에서는 descent부분이 잘리고 Mac에서는 잘리지 않는다
  


줄바꿈 편하게 할려고 <html>을 쓰곤 하는데...
이럴땐 걍 JTextArea를 쓰자 -ㅅ-;

Posted by 바나나쥬스
TAG Java, JLabel