다이얼로그를 로딩화면으로 만들기 위한 방법입니다.
프로그레스바를 레이아웃에 넣어두면 화면 화면 마다
레이아웃이 복잡 해지거나 시간낭비가 될때가 있습니다.

dialog 로딩화면 즉 progressbar 로 하나 만들어두면 모든 화면에서
로딩화면을 보여주거나 안보이게 할 수가 있습니다.

아래는 리턴값으로 dialog 넘겨주고있어서 리턴값을 받아서
처리 할 수도있습니다.

public static Dialog setProgress(Activity mActivity){
               Dialog mDialog = new Dialog(mActivity , android.R.style.Theme_Dialog);
        mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
        mDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        mDialog.setContentView(new ProgressBar(mActivity, null, android.R.attr.progressBarStyleSmall));
        mDialog.setCanceledOnTouchOutside(false);
        mDialog.setCancelable(false);
        mDialog.show();
        return mDialog;
    }



안드로이드 자바 디데이 계산 방법을 소개합니다.
안드로이드에서 자바로 디데이 계산 하기가 복잡하죠
켈린더로 -1을 해줘야 하고 등 해줘야 하는데
아래 메소드를 복사해서 사용 하시면 됩니다.
Dday( 날짜 ) 를 넣어 주시면 됩니다. 형식은 2014-08-20 이런식으로
되어있습니다. 만약 형식이 다르면 약간의 수정이 필요 합니다. ^^


public static long Dday(String mday) {
        if (mday == null )
            return 0;
        mday = mday.trim();
        int first = mday.indexOf("-");
        int last = mday.lastIndexOf("-");
        int year = Integer.parseInt(mday.substring(0 , first ));
        int month = Integer.parseInt(mday.substring(first + 1 , last ));
        int day = Integer.parseInt(mday.substring( last + 1 , mday.length()));

        GregorianCalendar cal = new GregorianCalendar();  
        long currentTime = cal.getTimeInMillis() / (1000*60*60*24);       
        cal.set(year,month - 1 , day);      
        long birthTime = cal.getTimeInMillis() / (1000*60*60*24);
        int interval = (int)( birthTime - currentTime );     

        return interval;        
    }

리스트뷰 안에서 혹은 헤더에 넣어둔 이미지뷰나 버튼에 온터치를 줘야 한다면
기본 리스트뷰로는 온터치에서 세로로 터치가 이루어지면 리스트뷰가
인터셉터를 하기때문에 온터치를 처리 할 수 없습니다.

리스트뷰 안에 온터치를 컨트롤 하기 위해서는 Custom listview 를 사용 해야 합니다.
listview 를 상속 받아 사용 해야 하는데 클레스를 하나 생성후 extend listview 해서
만들어 주면 됩니다.

아래 소스는 제가 임의로 onIntercepttouch를 컨트롤 하기 위해 만들었습니다.
TouchCheck 변수를 통해서 컨트롤를 하는데요 리스트뷰 안에 다른 뷰가
온터치가 발생 하게 되면 TouchCheck 를 false 로 바꿔주면서 리스트뷰가
인터셉터를 하는걸 막게 되는겁니다.
TouchCheck 변수를 변경하기 위하여 setTouch 라는 메소드를 임의로 생성 하였습니다.

사용 방법은
아래처럼 메인 클레스에서 생성 합니다.
CustomListview lsitview = (CustomListview )findViewById(R.id.list);
생성 후
lsitview.setTouch() 로 컨트롤 하게 됩니다.
아래에서 img 는 listivew 안에 온터치를 처리하게될 다른 뷰라고 생각하시면 됩니다.


  ImageView img = new ImageView(this);
        img.setOnTouchListener(m_onTouchListener);

    OnTouchListener m_onTouchListener = new OnTouchListener(){

        @Override
        public boolean onTouch(View p_v, MotionEvent p_event){
            
            switch (p_event.getAction()){
            case MotionEvent.ACTION_DOWN:{
                lsitview .setTouch(false); // 온터치가 이루어질때 false 로 바꿔준다.
                
            }
            case MotionEvent.ACTION_UP:{
                lsitview .setTouch(true); // 온터치에서 손을 땐경우 true 로 바꿔준다
                break;
            }

            case MotionEvent.ACTION_MOVE:{
                 //드레그 할때 처리
                break;
            }
            }
            return true;
        }
    };


public class CustomListview extends ListView {

    private boolean TouchCheck = true;
    
    public CustomListview(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
    
        if ( TouchCheck == false){
            super.onInterceptTouchEvent(ev);
            return false;
        }
        return super.onInterceptTouchEvent(ev);
    }
        
    public void setTouch(boolean check){
        TouchCheck = check ;
    }
            
}



컴퓨터 조립 하려고 사둔 램카드 인데 조립을 안하고

노트북을 사용하기로 마음먹어서 집에 그냥 두기 그래서

판매 올려 봅니다. 블로그에 올려서 안팔릴 것 같긴하지만 검색이 안되서? ㅎ

구매 하시는분 있으면 팔고 아니면 그냥 두자는 마음으로 올려 봅니다. ㅎ


삼성전자 DDR3 2G 10600 정품 새재품 입니다.

구매하고 사용하지 않았습니다.


판매 가격 : 13000원

판매 방식 : 직거래

택배 ( 택배비 부담하시면 택배로 보내드립니다. )


아래 사진 확인 하신후 비밀 댓글로 연락처를 남겨주시면

연락 드리겠습니다.






안드로이드 기기 고유값 생성 방법입니다.

아래 소스를 사용하시면 기기 고유값을 사용 하실 수 있습니다.

하지만 제가 써본결과 항상 앱을 설치 했다 지웠다 해도 고유한 값은 아닌듯 합니다.

검색해본 결과 아래 방법이 최선인 듯 합니다만

혹시 다른 방법이나 제가 모르는 아래 소스에 대한 문제점이 있다고 하시면

댓글로 남겨주시면 감사 하겠습니다.


package util;

import java.util.UUID;
import android.content.Context;
import android.telephony.TelephonyManager;

//단말기 고유값 추출 클래스
public class UniqueDeviceID {
 
 public static String getUniqueID(Context context) {
        final TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

        final String tmDevice, tmSerial, androidId;
        tmDevice = "" + tm.getDeviceId();
        tmSerial = "" + tm.getSimSerialNumber();
        androidId = "" + android.provider.Settings.Secure.getString(context.getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);

        UUID deviceUuid = new UUID(androidId.hashCode(), ((long)tmDevice.hashCode() << 32) | tmSerial.hashCode());
        String deviceId = deviceUuid.toString();
        return deviceId;
    }
}

앱을 웹브라우저를 통해 실행시키고 데이터를 넘겨줄 수 있다. 

잘 이해가 안된다면 지금 스마트폰의 웹브라우저를 통해서 아래 링크를 클릭해보면 쉽게 이해할 수 있다.

 

*카카오톡이 설치되었다면 클릭 (이 블로그 url을 전송한다.)

 

1. 특정 URL을 사용한다고 선언

카카오톡의 경우 kakaolink:// 로 시작하며 그 뒤에 액션 및 파라미터를 추가하여 사용한다.

*카카오 링크 설명 : http://www.kakao.com/link/ko/api?tab=mobile

 

위 앱처럼 자신만의 url을 사용할 수 있게 해보자. 그러기 위해서는 manifest 파일에 선언해 주어야 한다.

액티비티 태그 안에 intent-filter를 추가하여 속성을 뷰여하자.

action은 View, category는 DEFAULT와 BROWSABLE.

 

여기까지는 url scheme를 사용하기 위한 준비이고 그렇다면 자신만의 url scheme를 등록해 보자.

마찬가리로 intent-filter에 data 를 추가한다. scheme는 http, daummaps, kakaolink 같은 프로토콜 부분이다. host는 www.daum.net과 같이 프로토콜 이후에 나오는 경로이다. 이 부분은 url을 사용하는 액티비티를 구분하던지, 동작형식을 구분하던지 자신에게 알맞는 용도로 사용하면 된다.


AndroidManifest.xml
<activity android:name=".BkCalculatorActivity" android:label="@string/title_activity_calc">
    <intent-filter>
        <action android:name="android.intent.action.VIEW">
        <category android:name="android.intent.category.DEFAULT">
        <category android:name="android.intent.category.BROWSABLE">
        <data android:scheme="bk" android:host="calc">
    </data></category></category></action></intent-filter>
</activity>


2. 소스상에서 host 및 파라미터 받는 방법

url scheme를 사용하면 url 형태로 데이터가 들어오기 때문에 해당 url에서 어떤 액션인지 어떤 파라미터가 있는지 알아야 구분해서 처리를 할 수 있다.

 

url scheme 를 통해서 액티비티가 실행되면 intent에 data 가 포함되어 들어온다.

Uri data = getIntent().getData(); 를 통해서 data를 받아올 수 있다.

여기서 getIntent().getData(); 값이 null 인지 아닌지 체크를 해야 한다. 그냥 실행된 것인지 url 을 통해서 실행된 것인지 판단해야 하기 때문이다. 그냥 실행된 것이면 null 이된다.


Uri data = getIntent().getData();
if(data != null) {
    //url을 통해서 실행된 것. 파라미터를 받아서 작업 수행해야 함.
}


Uri의 다양한 메소드를 통해서 여러가지 값을 알 수 있다.

toString() 으로 전체 url 형태를 알 수 있다.

getHost() 로 host 값을 알 수 있다.

getQuery()로 전체 파라미터를 알 수 있다.

getQueryParameter(String key) 로 각각의 파라미터의 값을 알 수 있다.

 

만약 bk://calc?op1=25&op2=9&operator=+ 이렇게 url을 실행 시키면

scheme 는 bk가 되고 host는 calc가 되면 전체 query는 op1=25&op2=9&operator=+ 이다.

만약 getQueryParameter("op1") 을 하면 25 라는 값을 얻을 수 있다.


html 테그 제거 정규화 입니다. tag 제거할 String 값을 removeTag 에서 넣어주시며 return 값으로 tag가 제거된 String 값이 반환됩니다. 정규화을 공부하시고 사용하시면 더욱 효과적으로 사용 하실수 있습니다.

public String removeTag(String str){
    Matcher mat;  
    // script 처리
 Pattern script = Pattern.compile("&lt;(no)?script[^&gt;]*&gt;.*?<!--(no)?script-->",Pattern.DOTALL);  
    mat = script.matcher(str);  
    str = mat.replaceAll("");  
    // style 처리
    Pattern style = Pattern.compile("<style[^>]*&gt;.*",Pattern.DOTALL);  
    mat = style.matcher(str);  
    str = mat.replaceAll("");  
    // tag 처리
    Pattern tag = Pattern.compile("&lt;(\"[^\"]*\"|\'[^\']*\'|[^\'\"&gt;])*&gt;");  
    mat = tag.matcher(str);  
    str = mat.replaceAll("");  
    // ntag 처리
    Pattern ntag = Pattern.compile("&lt;\\w+\\s+[^&lt;]*\\s*&gt;");  
    mat = ntag.matcher(str);  
    str = mat.replaceAll("");  
    // entity ref 처리
    Pattern Eentity = Pattern.compile("&amp;[^;]+;");  
    mat = Eentity.matcher(str);  
    str = mat.replaceAll("");
     // whitespace 처리
   Pattern wspace = Pattern.compile("\\s\\s+");  
   mat = wspace.matcher(str);
    str = mat.replaceAll("");          
    return str ;
    }
</style[^>

+ Recent posts