2013. 2. 26. 13:48 안드로이드

안드로이드 코딩을 하다보면 

함수 F3 키를 누를때 선언된 함수로 이동 시켜주지만 

안드로이드에서 제공하는 함수는 그렇지 못하다 


F3버튼을 누르면 

Class File Editor 이보인다 

난 안드로이드에서 제공하는 함수의 내용을 보고싶다 


Class File Editor이 보이면 

Attach Source 에서 

external folder 

D:\android-sdk-windows\sources\android-14


진득 하니 기다려 보자 

로딩이 좀 걸리네 


그러면 이제 F3을 누르면 안드로이드 제공하는 함수의 내용을 볼수가 있다 

posted by 욱이다
2012. 11. 14. 11:42 안드로이드

참고블로그

아이폰 커스텀 폰트사용



프로젝트 파일

FontTest.zip



asset폴더에 원하는 폰트 데이터를 추가한다 




public class FontTest extends Activity {

Typeface typeface ;

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_font_test);

        LinearLayout layout = new LinearLayout(this);        

        layout.setOrientation(LinearLayout.VERTICAL);


        layout.setGravity(Gravity.CENTER);

        typeface = Typeface.createFromAsset(getAssets(), "Tw Cen MT Condensed.TTF");

        TextView tv = new TextView(this);

//        tv.setTypeface(typeface);이렇게 적용해도되고

tv.setText("123123");

tv.setTextSize(13);

tv.setTextColor(Color.BLACK);

layout.addView(tv);

        

        

        setContentView(layout);

        setGlobalFont(layout);//이걸로 전체 적용도 가능하다 

    }

    void setGlobalFont(ViewGroup root) {

        for (int i = 0; i < root.getChildCount(); i++) {

            View child = root.getChildAt(i);

            if (child instanceof TextView)

                ((TextView)child).setTypeface(typeface);

            else if (child instanceof ViewGroup)

                setGlobalFont((ViewGroup)child);

        }

    }

    @Override

    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.activity_font_test, menu);

        return true;

    }

}



'안드로이드' 카테고리의 다른 글

Android Asynchronous Http Client  (0) 2013.08.08
Eclipse Attach Source  (0) 2013.02.26
프로가드 제외하기  (0) 2012.08.09
안드로이드 아이콘 만드는 방법  (0) 2012.06.26
안드로이드 view -> bitmap 변환  (0) 2012.06.25
posted by 욱이다
2012. 8. 9. 10:44 안드로이드

검색

https://www.google.co.kr/search?q=addjavascriptinterface+proguard+not+working&sugexp=chrome,mod=18&sourceid=chrome&ie=UTF-8

결과

http://stackoverflow.com/questions/7424510/uncaught-typeerror-when-using-a-javascriptinterface

 


빈 인터 페이스 하나 만든다

package com.danal.saljaTalk.Common;

 

public interface DontProguard

{

 

}

프로 가드 돌리기 싫은 클레스에 implements한다

class TwitterCallBack extends WebViewClient implements DontProguard

       {

 

 

 

Proguard.cfg에 아래와 같이 추가한다

 

-keep public class com.Common.DontProguard

-keep public class * implements com.Common.DontProguard

-keepclassmembers class * implements com.Common.DontProguard {

    <methods>;

}

 

 

그럼 DontProguard implements 클레스들은 프로가드가 돌아가지 않는다 ~

 

패키지를 프로가드 돌리기 싫을때는 

-keep class com.sns.** { *; } 

이것처럼 한다 

 

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

트위터에서 핀코드를 가져오는데에서

mWeb.addJavascriptInterface(new MyJavaScriptInterface(), "GETPINNUMBER");

이렇게 해서 했는데

MyJavaScriptInterface 이부분이 프로가드가 돌아가면서 실행이 되지 않았는데

위와 같이 설정하니깐 이상없이 돌아 갑니다.

 

참고하세요

 

 



 

 

posted by 욱이다
2012. 6. 26. 15:53 안드로이드

구글에서

android make icon 이라고 검색하니

아래의 블로그에서 정보를 얻었습니다.

http://envyandroid.com/archives/271/easiest-way-to-create-android-icons

 

 

 

아이콘 만드는 툴 다운로드

http://inkscape.org/

 

 

구글에서 이미지나 텍스트를 아이콘으로 변환해주는 싸이트

http://android-ui-utils.googlecode.com/hg/asset-studio/dist/index.html

 

 

안드로이드 폰에서 이미지 미리 보기

 https://code.google.com/p/android-ui-utils/downloads/list

 

 

 

 

posted by 욱이다
2012. 6. 25. 17:28 안드로이드
안드로이드 view convert bitmap
posted by 욱이다
2012. 6. 21. 17:55 안드로이드

웹뷰를 하다가 네이버에서 기사를 보고 거기에 연관되 기사를 보는데 

그거 다보고 취소키눌러 다시 네이버 기사로 갈려니 안돌아가 .. 

계속 그 페이지만 로딩하는거야 !!


뭔 일이래 .. 보니깐 


네이버 관련 기사 링크가 이거야 

http://www.munhwa.com/news/view.html?no=2012062001030827062002 

이런 url로 가는데 이게 분기가 되버리네 

http://m.munhwa.com/mnews/view.html?no=2012062001030827062002  


그래서 웹뷰에서 기사 보다가 취소키 누르면 http://www.munhwa.com/news/view.html?no=2012062001030827062002  이리로 갔다가 다시 이놈이 http://m.munhwa.com/mnews/view.html?no=2012062001030827062002  이걸 호출 해주시니 ...

뭐 계속 로딩 로딩 



그래서 꼼수가 ..



빽기 눌릴때 지금 보고 있는 url을 저장하는거야 



@Override

public boolean onKeyDown(int keyCode, KeyEvent event)

{

// TODO Auto-generated method stub

if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN)

{


if (getWebView(page - 2).canGoBack()) {

 

link = getWebView(page - 2).getUrl();


getWebView(page - 2).goBack();


return true;

}

}


}

return super.onKeyDown(keyCode, event);


}



그러고 여기에 서 진가를 발휘하는거지 


WebViewClient mWebViewClient = new WebViewClient()

{


@Override

public boolean shouldOverrideUrlLoading(WebView view, String url)

{


setProgressbar(view.getId(), 0);


//백기 눌렀을때 저장했던 url이 지금 로딩 할려고 하는 url이랑 같냐 ? 그럼 로딩하지 말고 백 한번 더해라 

if (link != null && link.equals(url))

view.goBack();

else//이건 보통의 경우고

view.loadUrl(url);


return true;

}

}


아 .. 이거 때문에 머리 터지는 줄알았네 .. 

난 안드로이드에서 뭔가 대단한걸 재공 해주는줄 알았더니 ..만 .. 개뿔 ... 없음..



웹뷰 하다가 보니깐 


요렇게 찍으니깐 히스토리가 다 나왔다 

이걸로 디버그 하니깐 괜찮드라 

WebBackForwardList a = getWebView(page - 2).copyBackForwardList();

for (int i = 0; i < a.getSize(); i++)

{

WebHistoryItem h = a.getItemAtIndex(i);


int idx = a.getCurrentIndex();


Log.i("goback",

"onKeyDown (getOriginalUrl) " + h.getOriginalUrl() + " (getTitle) " + h.getTitle()

+ " (getUrl) " + h.getUrl() + " (idx) " + idx + " (getid) " + h.getId()

+ " (i) " + i);


}






posted by 욱이다
2011. 8. 24. 11:38 안드로이드
 <intent-filter>
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
 </intent-filter>
이렇게 쓰면되겠지 ?
android.bluetooth.intent.action.BONDING_CREATED
android.bluetooth.intent.action.BONDING_REMOVED
android.bluetooth.intent.action.DISABLED
android.bluetooth.intent.action.DISCOVERY_COMPLETED
android.bluetooth.intent.action.DISCOVERY_STARTED
android.bluetooth.intent.action.ENABLED
android.bluetooth.intent.action.HEADSET_STATE_CHANGED
android.bluetooth.intent.action.MODE_CHANGED
android.bluetooth.intent.action.NAME_CHANGED
android.bluetooth.intent.action.PAIRING_CANCEL
android.bluetooth.intent.action.PAIRING_REQUEST
android.bluetooth.intent.action.REMOTE_ALIAS_CHANGED
android.bluetooth.intent.action.REMOTE_ALIAS_CLEARED
android.bluetooth.intent.action.REMOTE_DEVICE_CONNECTED
android.bluetooth.intent.action.REMOTE_DEVICE_DISAPPEARED
android.bluetooth.intent.action.REMOTE_DEVICE_DISAPPEARED
android.bluetooth.intent.action.REMOTE_DEVICE_DISCONNECTED
android.bluetooth.intent.action.REMOTE_DEVICE_DISCONNECT_REQUESTED
android.bluetooth.intent.action.REMOTE_DEVICE_FOUND
android.bluetooth.intent.action.REMOTE_NAME_FAILED
android.bluetooth.intent.action.REMOTE_NAME_UPDATED
android.intent.action.AIRPLANE_MODE
android.intent.action.BATTERY_CHANGED
android.intent.action.BATTERY_LOW
android.intent.action.BOOT_COMPLETED
android.intent.action.CAMERA_BUTTON
android.intent.action.CONFIGURATION_CHANGED
android.intent.action.DATA_SMS_RECEIVED
android.intent.action.DATE_CHANGED
android.intent.action.DEVICE_STORAGE_LOW
android.intent.action.DEVICE_STORAGE_OK
android.intent.action.GTALK_CONNECTED
android.intent.action.GTALK_DISCONNECTED
android.intent.action.HEADSET_PLUG
android.intent.action.MANAGE_PACKAGE_STORAGE
android.intent.action.MEDIA_BAD_REMOVAL
android.intent.action.MEDIA_BUTTON
android.intent.action.MEDIA_EJECT
android.intent.action.MEDIA_MOUNTED
android.intent.action.MEDIA_REMOVED
android.intent.action.MEDIA_SCANNER_FINISHED
android.intent.action.MEDIA_SCANNER_SCAN_FILE
android.intent.action.MEDIA_SCANNER_STARTED
android.intent.action.MEDIA_SHARED
android.intent.action.MEDIA_UNMOUNTABLE
android.intent.action.MEDIA_UNMOUNTED
android.intent.action.NEW_OUTGOING_CALL
android.intent.action.PACKAGE_ADDED
android.intent.action.PACKAGE_CHANGED
android.intent.action.PACKAGE_INSTALL
android.intent.action.PACKAGE_REMOVED
android.intent.action.PACKAGE_RESTARTED
android.intent.action.POWER_CONNECTED
android.intent.action.POWER_DISCONNECTED
android.intent.action.PROVIDER_CHANGED
android.intent.action.REBOOT
android.intent.action.SCREEN_OFF
android.intent.action.SCREEN_ON
android.intent.action.TIMEZONE_CHANGED
android.intent.action.TIME_SET
android.intent.action.TIME_TICK
android.intent.action.UID_REMOVED
android.intent.action.UMS_CONNECTED
android.intent.action.UMS_DISCONNECTED
android.intent.action.WALLPAPER_CHANGED
android.media.RINGER_MODE_CHANGED
android.media.VIBRATE_SETTING_CHANGED
android.net.wifi.NETWORK_IDS_CHANGED
android.net.wifi.RSSI_CHANGED
android.net.wifi.SCAN_RESULTS
android.net.wifi.STATE_CHANGE
android.net.wifi.WIFI_STATE_CHANGED
android.net.wifi.supplicant.CONNECTION_CHANGE
android.net.wifi.supplicant.STATE_CHANGE
android.provider.Telephony.SIM_FULL
android.provider.Telephony.SMS_RECEIVED
android.provider.Telephony.WAP_PUSH_RECEIVED
춮처
http://www.dearsoft.org/tag/broadcastreceiver/
posted by 욱이다
2011. 8. 16. 15:57 안드로이드

http://ememomo.tistory.com/50 여기보면 c2dm라는 것이 있네요
구글 서버를 통해서 메세지를 주고 받는 방법입니다

posted by 욱이다
2011. 8. 16. 15:29 안드로이드


//완전 저장 기능이네 어플이 삭제 되지 않는 이상 값들이 저장되어있다

final static String SHAREPREFERENCE = "SHAREPREFERENCE";
 @Override
 protected void onResume() {
  // TODO Auto-generated method stub
  super.onResume();
  Log.i("ListViewActivity", "onResume");
  //임의 적으로다가 저장된 값이 있으면 읽어 들인다
  SharedPreferences prefs = getSharedPreferences(SHAREPREFERENCE, Activity.MODE_PRIVATE);
  String list1 = prefs.getString("LIST1", "없을 경우 기본값");
  String list2 = prefs.getString("LIST2", "없을 경우 기본값");
  int int1 = prefs.getInt("INT1", 0);
  int int2 = prefs.getInt("INT2", 0);
  Toast.makeText(this, list1 + list2 + int1 +" "+int2, Toast.LENGTH_SHORT).show();
  
 }

 
 @Override
 protected void onPause() {
  // TODO Auto-generated method stub
  super.onPause();
  Log.i("ListViewActivity", "onPause");
  //액티비티가 종료될때 값들을 임의 적으로다가 저장하는 것이다 
    pref = getSharedPreferences(SHAREPREFERENCE, Activity.MODE_PRIVATE);
  //저장을 위해 Edit객체 호출
  SharedPreferences.Editor edit = pref.edit();
  //지금까지 생성된 리스트뷰 텍스트 저장  
  edit.putString("LIST1", "홍길동" );
  edit.putString("LIST2", "김갑수" );
  edit.putInt("INT1", 1);
  edit.putInt("INT2", 2);
  //변경된 값 저장
  edit.commit();
 }

posted by 욱이다
2011. 6. 24. 16:46 안드로이드
웹뷰에 둥근모양의 prograssbar가 뜨는 예제다



public class Tab4 extends Activity {
    WebView web;
    Activity activity;
     final static String TAG = "TAB4";

     Dialog dialog;
     ProgressBar progress;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

     
        getWindow().requestFeature(Window.FEATURE_PROGRESS);
        setContentView(R.layout.tabfour_bg);

        web = (WebView) findViewById(R.id.tab4_webview);
        web.getSettings().setJavaScriptEnabled(true);
        web.setWebViewClient(new DraptWebViewClient());
        web.setWebChromeClient(new DraptWebChormeClient());
        web.loadUrl("http://m.naver.com/");
       
//스타일에 맞는 다일얼로그를 생성했다
        dialog = new Dialog(this,R.style.prograssdialog);       
        dialog.addContentView(
                new ProgressBar(this),
                new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK)) {
            if (web.canGoBack())//뒤로 돌아가기 버튼을 눌렀을때 더 뒤로 갈수있으면 웹뷰를 뒤로 돌리고
                web.goBack();
 else //그렇지 않으면 다이얼로그 띄워서 앱을 종료할까 물어본다
                showDialog(0);
            return true;
        }
       
        return super.onKeyDown(keyCode, event);
    }

    @Override
    public Dialog onCreateDialog(int dialogId) {
        Dialog dialog = null;
        switch (dialogId) {
        case 0:
//커스텀 다이얼로그다 뒤로 가다가 더 뒤로 가기 힘들때 보여주는것 내 블로그 찾아보면 custom dialog라고 있다
            CustomDialog.Builder customBuilder = new CustomDialog.Builder(
                    Tab4.this);
            customBuilder.setTitle("Custom title").setMessage("Custom body")
                    .setNegativeButton("Cancel",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int which) {
                                    Tab4.this.dismissDialog(0);
                                }
                            }).setPositiveButton("Confirm",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int which) {
                                    dialog.dismiss();
                                }
                            });
            dialog = customBuilder.create();
            break;
        }
        return dialog;
    }

    private class DraptWebChormeClient extends WebChromeClient {

        /**
         * 페이지를 로딩하는 현재 진행 상황을 전해줍니다. newProgress 현재 페이지 로딩 진행 상황, 0과 100 사이의
         * 정수로 표현.(0% ~ 100%)
         */
        @Override
        public void onProgressChanged(WebView view, int newProgress) {
       
           

        }
    }

    private class DraptWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            Log.i(TAG,"shouldOverrideUrlLoading");
            return true;
        }

        @Override
        public void onPageFinished(WebView view, String url) {

            Log.i(TAG,"onPageFinished");
            dialog.dismiss();// 웹뷰 진행 상태를 닫는다

            super.onPageFinished(view, url);
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            // TODO Auto-generated method stub
     
            Log.i(TAG,"onPageStarted");
         
            super.onPageStarted(view, url, favicon);
//웹뷰 진행 상태를 띄운다
            if(dialog != null)
            {
                dialog.cancel();
                dialog = null;
            }
            dialog = new Dialog(Tab4.this,R.style.prograssdialog);   
            dialog.addContentView(
                    new ProgressBar(Tab4.this),
                    new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
           
           
            dialog.show();
        }

        @Override
        public void onLoadResource(WebView view, String url) {
            // TODO Auto-generated method stub
            Log.i(TAG,"onLoadResource");
           
            super.onLoadResource(view, url);
           
       

        }

        @Override
        public void onReceivedError(WebView view, int errorCode,

        String description, String failingUrl) {

            super.onReceivedError(view, errorCode, description, failingUrl);
            Toast.makeText(activity, "Oh no! " + description,
                    Toast.LENGTH_SHORT).show();

            switch (errorCode) {
            case ERROR_AUTHENTICATION:
                break; // 서버에서 사용자 인증 실패
            case ERROR_BAD_URL:
                break; // 잘못된 URL
            case ERROR_CONNECT:
                break; // 서버로 연결 실패
            case ERROR_FAILED_SSL_HANDSHAKE:
                break; // SSL handshake 수행 실패
            case ERROR_FILE:
                break; // 일반 파일 오류
            case ERROR_FILE_NOT_FOUND:
                break; // 파일을 찾을 수 없습니다
            case ERROR_HOST_LOOKUP:
                break; // 서버 또는 프록시 호스트 이름 조회 실패
            case ERROR_IO:
                break; // 서버에서 읽거나 서버로 쓰기 실패
            case ERROR_PROXY_AUTHENTICATION:
                break; // 프록시에서 사용자 인증 실패
            case ERROR_REDIRECT_LOOP:
                break; // 너무 많은 리디렉션
            case ERROR_TIMEOUT:
                break; // 연결 시간 초과
            case ERROR_TOO_MANY_REQUESTS:
                break; // 페이지 로드중 너무 많은 요청 발생
            case ERROR_UNKNOWN:
                break; // 일반 오류
            case ERROR_UNSUPPORTED_AUTH_SCHEME:
                break; // 지원되지 않는 인증 체계
            case ERROR_UNSUPPORTED_SCHEME:
                break; // URI가 지원되지 않는 방식
            }

        }
    }
}


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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <WebView
        android:id="@+id/tab4_webview"
        android:layout_height="wrap_content"
        android:layout_width="fill_parent" />

       
</LinearLayout>






//이부분이 리소스 부분인데 스타일 정의하는것 보면 거의다가 투명으로 만들어버린다
//이것이 핵심이다
<style
        name="prograssdialog">

        <item
            name="android:windowFrame">@null</item>

        <item
            name="android:windowBackground">@android:color/transparent</item>
           
       
        <item
            name="android:windowIsFloating">true</item>

        <item
            name="android:windowContentOverlay">@null</item>

        <item
            name="android:windowTitleStyle">@null</item>

        <item
            name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>

        <item
            name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>

        <item
            name="android:backgroundDimEnabled">false</item>

        <item
            name="android:background">@android:color/transparent</item>
           
       
           
    </style>
posted by 욱이다
prev 1 2 3 4 5 next