전체보기

기준값

Low density = 120, ldpi

Medium density = 160, mdpi 

High density = 240, hdpi


 (px -> dip) dip 값 구하기

(dip -> px)  px 값 구하기

 dip = px * (160/기준값)

(hdpi 기준) dip = ( PX / 3 ) * 2

(hdpi 기준) dip = px * 0.666

pixels = dip * (기준값/ 160)

(hdpi 기준) px = dip * 1.5


이미지를 레이아웃 백그라운드에 넣어줬더니 폰마다 다른 해상도 때문에 테스트 폰보다 큰 폰에서는 이미지가 늘어나는 현상이 발생했다.

그래서 레이아웃크기를 wrap_content로 해준 걸 수치로 고정시켜주었다.

그런데 xml에서는 크기수치를 dp로 주게 되어있는데 나는 dp가 픽셀이랑 같은 수치인 줄 알았다.

테스트 해보니 그게 아니었다.


그래서 변환 공식을 찾았고 계산을 해서 직접 때려넣었다.

 물론 소스 상에 변환 코드를 넣어서 구현할 수도 있지만 귀찮기도 하고 실력부족으로...

(기준 값은 hdpi=240으로 잡고 계산했다.)

이미지 사이즈는 픽셀기준이라 그 수치를 공식에 대입해서 나온 결과 값을 레이아웃 dp값으로 넣어주었더니

어느 폰에서나 똑같은 크기로 나올 수 있었다.




자바코드에서 쉘스크립트 실행하기


(Play Framework에서 사용함)


public static Result doShell(String server) { //서버명 받아오기


String result_line = "";

String line = "";

try {

String strScript = "ssh jeong@"+ server +" /usr/local/hello.sh"; //서버명 끼워넣기

Process p = Runtime.getRuntime().exec(strScript); //스크립트 실행


BufferedReader bri = new BufferedReader(new InputStreamReader(

p.getInputStream()));

while ((line = bri.readLine()) != null) { //쉘 스크립트 내용 출력

result_line += line; 

}

} catch (Exception err) {

err.printStackTrace();

}

System.out.println(result_line); //콘솔에서 확인차 

return ok();


}


나도 잘 모르지만 어찌 하다보니 됐다



참고한 블로그 글


http://blog.naver.com/PostView.nhn?blogId=mungyom&logNo=110151707237


'지식메모 > PlayFramework 2' 카테고리의 다른 글

자바에서 쉘스크립트 실행하기  (0) 2013.07.22
PlayFramework 2 테스트 방법  (0) 2013.07.17

참고한 블로그 글 

http://khmirage.tistory.com/71


http://mansoo.tistory.com/entry/MySQL-%EC%BA%90%EB%A6%AD%ED%84%B0-%EC%85%8B-%EB%B3%80%EA%B2%BD



[client]

default-character-set=utf8


[mysqld]

character-set-client-handshake=FALSE

init_connect="SET collation_connection = utf8_general_ci"

init_connect="SET NAMES utf8"

default-character-set=utf8 //근데 나는 이 부분을 넣었을때 재시작이 실패했는데 빼니까 되었다. 뭐지..

character-set-server=utf8

collation-server=utf8_general_ci


[mysqldump]

default-character-set=utf8


[mysql]

default-character-set=utf8





테이블 구성보기

desc 테이블명;


테이블 내용 다 지우기

delete from 테이블명;


테이블 칼럼 추가

alter table 테이블명 add 칼럼명 varchar(11) not null default '0';


테이블 칼럼 삭제

alter table 테이블명 drop 칼럼명;


칼럼명과 타입 수정하기

alter table 테이블명 change 원래칼럼명 바꿀칼럼명 varchar(11);


칼럼 타입수정하기

alter table 테이블명 modify 칼럼명 varchar(20);


테이블명 수정

alter table 테이블명 rename 바꿀테이블명;




테이블 데이터 추가하기

insert into 테이블명 values ('칼럼1','칼럼2', ...);


테이블 안에 모든 내용보기

select * from 테이블명;


테이블 데이터 검색

select [찾을 필드명] from [찾을 테이블 이름] where [검색조건];


데이터 변경하기

update 테이블명 set 칼럼명='바꿀내용' where 타겟칼럼명 = '타겟칼럼데이터' ;



자꾸 써야 안 까먹는데 자꾸 안 쓴다.


맨날 참고하는 링크글 

http://www.tipssoft.com/bulletin/board.php?bo_table=FAQ&wr_id=493


http://opencode.kr/55





기존 테이블스키마를 테이블 명만 바꿔서 새로 생성하고 싶을때

show create table 기존테이블명;

해주면 쫙 나온다. 그대로 긁어다가 테이블 명만 수정하고 생성~


team table 스키마를 보여준 모습







만약 액티비티를

public class MainActivity extends Activity implements OnClickListener{

이렇게 implements OnClickListener로 선언했다면

onClick 메소드에 xml에서 선언한 버튼의 아이디를 적어주면 된다.

if , else if 로 각 버튼이 눌렸을때 수행할 기능을 넣어준다.


public void onClick(View v){

if(v.getId() == R.id.버튼의 아이디){

... 수행할 기능

}else if(v.getid()== R.id.버튼의 아이디){

..... 수행할 기능

}

소스양식버전


public void onClick(View v){

		if(v.getId() == R.id.버튼의 아이디){

... 수행할 기능

}else if(v.getid()== R.id.버튼의 아이디){

..... 수행할 기능

}



또는 

public class MainActivity extends Activity

그냥 이렇게 선언했다면

OnCreate 부분에서 버튼 별로 수행할 기능을 넣어줘도 된다.

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);


Button btn1 = (Button) findViewById(R.id.버튼1의 아이디);

btn1.setOnClickListener(new OnClickListener() {


public void onClick(View v) {

// 수행할 기능소스

}

});


Button btn2 = (Button) findViewById(R.id.버튼2의 아이디);

btn2.setOnClickListener(new OnClickListener() {


public void onClick(View v) {

// 수행할 기능소스

}

});


}

소스양식버전


public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);


Button btn1 = (Button) findViewById(R.id.버튼1의 아이디);

btn1.setOnClickListener(new OnClickListener() {



	public void onClick(View v) {

//	수행할 기능소스

	}

});


Button btn2 = (Button) findViewById(R.id.버튼2의 아이디);

btn2.setOnClickListener(new OnClickListener() {



	public void onClick(View v) {

//	수행할 기능소스

	}

});



}








이미지를 캡쳐해서 저장한 후 공유하기를 통해 이미지를 공유하고 싶었다.

이 공유하기 기능을 사용하면 카톡 페북 미투데이 등등 메뉴가 저절로 나온다.신기방기


                         Intent intentSend  = new Intent(Intent.ACTION_SEND);

 intentSend.setType("image/*");

 intentSend.putExtra(Intent.EXTRA_STREAM, Uri.parse(파일경로));

 startActivity(Intent.createChooser(intentSend, "공유"));

특정파일을 공유하기 위해 다음과 같이 사용했다.

공유하기 버튼을 만들어 그 안에 집어넣었다.

Intent it3=getIntent(); //파일명을 가져오기 위한 인텐트(에디트텍스트에서 이름입력받은 걸 파일명으로 쓰기 위해)

String str_name=it3.getStringExtra("it3_name"); //이름을 가져온다.

File fileRoute = null;

fileRoute = Environment.getExternalStorageDirectory(); //sdcard 파일경로 선언

        File files = new File(fileRoute,"/temp/"+str_name+"-.jpeg"); //temp폴더에 이름으로 저장된 jpeg파일 경로 선언

    

if(files.exists()==true)  //파일유무확인

{

Intent intentSend  = new Intent(Intent.ACTION_SEND);

intentSend.setType("image/*");


//이름으로 저장된 파일의 경로를 넣어서 공유하기

intentSend.putExtra(Intent.EXTRA_STREAM, Uri.parse(fileRoute+"/temp/"+str_name+"-.jpeg"));


startActivity(Intent.createChooser(intentSend, "공유")); //공유하기 창 띄우기

}else{

//파일이 없다면 저장을 해달라는 토스트메세지를 띄운다.

Toast.makeText(getApplicationContext(), "저장을 먼저 해주세요", Toast.LENGTH_LONG).show();

}


소스양식버전


Intent it3=getIntent();	//파일명을 가져오기 위한 인텐트(에디트텍스트에서 이름입력받은 걸 파일명으로 쓰기 위해)

	String str_name=it3.getStringExtra("it3_name");	//이름을 가져온다.	

	File fileRoute = null;

	fileRoute = Environment.getExternalStorageDirectory(); //sdcard 파일경로 선언

			

        File files = new File(fileRoute,"/temp/"+str_name+"-.jpeg"); //temp폴더에 이름으로 저장된 jpeg파일 경로 선언

		     

	 if(files.exists()==true)  //파일유무확인

	 {

			 Intent intentSend  = new Intent(Intent.ACTION_SEND);

			 intentSend.setType("image/*");



//이름으로 저장된 파일의 경로를 넣어서 공유하기

			 intentSend.putExtra(Intent.EXTRA_STREAM, Uri.parse(fileRoute+"/temp/"+str_name+"-.jpeg"));



			 startActivity(Intent.createChooser(intentSend, "공유")); //공유하기 창 띄우기

		 }else{

//파일이 없다면 저장을 해달라는 토스트메세지를 띄운다.

			 Toast.makeText(getApplicationContext(), "저장을 먼저 해주세요", Toast.LENGTH_LONG).show();

		 }





  1. 초보 2014.03.18 11:37 신고

    안녕하세요 유용한 팁 잘 보았습니다 그런데 리스트를 띄우지 않고 바로 카카오톡이나 페이스북으로 공유를 보낼 수 있는 방법이 있을까요?

    • yonoo88 2014.03.18 21:48 신고

      음 그 부분은 저도 한번 살펴봐야겠네요..

    • 초보 2014.03.19 15:38 신고

      방법을 찾으신다면 댓글로 간략하게라도 답변을 부탁드립니다 ㅠㅠ아니면 리스트중에 카카오톡/페이스북 같이 지정된 앱만 출력하는 방법은 있을까요?

    • yonoo88 2014.03.19 16:12 신고

      http://www.kakao.com/services/api/kakao_link

      여기 한번 보시면 될려나요

      사용예로

      // KakaoTalk으로 바로 보내시려면 아래 코드를 추가합니다.
      intent.setPackage("com.kakao.talk");

      이러한 코드가 있네요.


      http://dev.epiloum.net/916

      여기 링크도 참고해보셔요

    • 초보 2014.03.24 11:08 신고

      오 감사합니다 ㅠㅠ

  2. ㅎㅇ 2016.08.22 14:25 신고

    지금 fileRoute = Environment.getExternalStorageDirectory(); 이부분이 Required java.io.File Found java.lang.String 이렇게 빨간색으로 뜨고
    Intent it3=getIntent(); 이부분에서 getintent 이부분이 cannot resolve symbol getIntent 이렇게 뜨는데 제가 지금 어뎁터 안에 있는 onClick 안에 지정을 해서 오류가 나는건가요?

    • yonoo88 2016.08.22 18:13 신고

      저도 잘 보진 못하지만 코드를 봐봐야 알 것 같네요..

<EditText

android:inputType="number"

/>


이렇게 해주면 된다. 

number 대신에 phone 을 쓰면 전화번호만 입력할 수 있는 키보드가 뜬다.

뭐 사실상 둘 다 같은거라 볼 수도 있는 듯..




뭔가 특별한게 있을 줄 알았는데 별 거 없었다..


그냥 텍스트 뷰에서 하는 것 처럼 xml 에서


<EditText

android:text="텍스트"

/>


이렇게 해주면 입력칸에 hint가 아닌 진짜 텍스트가 초기상태부터 들어가 있다.







내가 참고한 블로그. 


http://theeye.pe.kr/entry/example-of-image-crop-with-camera-and-album-picker-on-android?category=18



트랙백은 뭐하는건지 모르겠다..

누가 알려주실 분..


그리고 위 소스는 정사각형으로 밖에 자르기가 안되는데 직사각형으로도 자르게 하려면


case PICK_FROM_CAMERA: { // 이미지를 가져온 이후의 리사이즈할 이미지 크기를 결정합니다. // 이후에 이미지 크롭 어플리케이션을 호출하게 됩니다. Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(mImageCaptureUri, "image/*"); intent.putExtra("outputX", 120); intent.putExtra("outputY", 130); intent.putExtra("aspectX", 1); //이걸 삭제한다 intent.putExtra("aspectY", 1); //이걸 삭제한다 intent.putExtra("scale", true); intent.putExtra("return-data", true); startActivityForResult(intent, CROP_FROM_CAMERA); break; }


이 2개를 지워주면 자유자재로 자르기가 가능하다.
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
 X Y 좌표가 1:1 비율로 고정됐기 때문에 정사각형으로만 자르기가 되었던 것이었따. 




+ Recent posts