안드로이드
-
안드로이드 EditText 에디트텍스트 값 남겨두기2013.09.09
-
안드로이드 dip px 변환하기2013.07.23
-
안드로이드 EditText에 텍스트 집어넣기2013.07.20
안드로이드 레이아웃 버튼 보이기 숨기기
안드로이드에서 레이아웃이나 버튼 이미지 뷰 등등 xml에서 제어 가능한 부분을 조건에 따라 보여주고 숨길 수 있는 방법이 있었다.
layout.setVisibility(View.VISIBLE);
해당 뷰를 보여줌
layout.setVisibility(View.INVISIBLE);
해당 뷰를 안 보여줌(공간은 존재)
layout.setVisibility(View.GONE);
해당 뷰를 안 보여줌(공간마저 감춤)
INVISIBLE과 GONE의 차이는 공간을 보여주느냐 안 보여주느냐의 차이이다.
예를 들면 1 2 3 4 5 의 숫자가 있을때 3을 숨기려고 한다면
INVISIBLE은 1 2 " " 4 5 이런 식으로 3은 없지만 자리는 남아있고
GONE은 1 2 4 5 이런 식으로 3과 공간 모두 숨기게 된다.
사용 예로
LinearLayout layout = (LinearLayout) findViewById(R.id.first); LinearLayout layout2 = (LinearLayout) findViewById(R.id.second); LinearLayout layout3 = (LinearLayout) findViewById(R.id.third); switch (checkedId) { case R.id.button: layout.setVisibility(View.VISIBLE); layout2.setVisibility(View.INVISIBLE); layout3.setVisibility(View.GONE);
이렇게 사용하면 id가 button 인 버튼을 누르면
id가 first인 레이아웃은 보여지고
second 레이아웃은 보이지 않고 그냥 빈 공간만 나오게 되며
third 레이아웃은 아예 삭제된듯이 숨겨지게 된다.
그리고 버튼을 선택하기전에 초기상태에서 숨기려면 직접 xml 파일로 가서 해당 레이아웃에
android:visibility="gone"
옵션을 주면 처음부터 보여지지 않게 된다.
레이아웃 뿐만 아니라 버튼이나 이미지 뷰 텍스트 뷰 등등 여러가지도 적용할 수 있다.
'지식메모 > 안드로이드 Android' 카테고리의 다른 글
안드로이드 로딩메세지 띄우기 (0) | 2013.10.27 |
---|---|
안드로이드 소리/효과음 재생이 안될때 해결책 (0) | 2013.10.24 |
안드로이드 EditText 에디트텍스트 값 남겨두기 (0) | 2013.09.09 |
안드로이드 Spinner(스피너) 값 전달하기 (11) | 2013.08.29 |
안드로이드 dip px 변환하기 (0) | 2013.07.23 |
안드로이드 EditText 에디트텍스트 값 남겨두기
안드로이드 EditText 에디트텍스트 값 남겨두기
다음 액티비티로 넘어갔다가 다시 전 액티비티로 돌아올 때 입력했던 EditText 값을 그대로 놔두고 싶다면
intent 호출 부분에
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
finish();
finish(); 이걸 지워주면 된다.
액티비티 종료 코드를 없애주면 되는 것이다.
난 예제만 보고 따라하느라 그냥 썼다가 값이 안 남길래 삽질을 했었다.
알고보니 간단한 거였다..
'지식메모 > 안드로이드 Android' 카테고리의 다른 글
안드로이드 소리/효과음 재생이 안될때 해결책 (0) | 2013.10.24 |
---|---|
안드로이드 레이아웃 버튼 보이기 숨기기 (1) | 2013.09.22 |
안드로이드 Spinner(스피너) 값 전달하기 (11) | 2013.08.29 |
안드로이드 dip px 변환하기 (0) | 2013.07.23 |
안드로이드 버튼 여러개 쓰기 (0) | 2013.07.21 |
안드로이드 Spinner(스피너) 값 전달하기
스피너를 이용하여 값을 전달한 후 값에 따른 이미지를 출력하였다.
string.xml에 스피너에 쓰일 목록을 만들어둔다.
<string name="season">시즌</string> <string name="season_prompt">시즌 선택</string> <string-array name="season_array"> <item>봄</item> <item>여름</item> <item>가을</item> <item>겨울</item> </string-array>
그 다음 send.xml
<Spinner android:id="@+id/spinner_season" <!--스피너 아이디--> android:layout_width="wrap_content" android:layout_height="wrap_content" android:prompt="@string/season_prompt"<!-- string.xml에서 작성한 목록 --> android:layout_marginRight="10dp" />
이렇게 스피너를 만들어준다.
그리고 SendActivity.java 에서 스피너 값을 보내주자 OnCreate 부분에
Spinner spinner = (Spinner)findViewById(R.id.spinner_season);//send.xml의 스피너 아이디 ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.season_array, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter);
이렇게 스피너를 선언해주고 Onclick메소드에 스피너 값을 인텐트에 태워 보낸다.
String str_season = spinner.getSelectedItem().toString(); Intent it3 = new Intent(this,ReceiveActivity.class); it3.putExtra("it3_season", str_season); //it3_season 이라는 스트링으로 str_season 값을 넘긴다. startActivity(it3);
이제 스피너 값에 따른 이미지를 출력하기 위해 receive.xml 에
이미지 뷰를 만들었다
<ImageView android:id="@+id/season_year" android:layout_width="wrap_content" android:layout_height="wrap_content" />
이제 ReceiveActivity.java 에서 받아보자.
마찬가지로 OnCreate 부분에
Intent it3=getIntent(); //인텐트를 받아오고 String str_season= it3.getStringExtra("it3_season"); //it3_season으로 보내온 값을 str_season에 저장 ImageView season = (ImageView)findViewById(R.id.season_year); //사진을 출력할 이미지뷰 if(str_season.equals("봄")){ //str_season 값이 봄이라면 BitmapDrawable img_season = (BitmapDrawable)getResources().getDrawable(R.drawable.spring); //봄 사진 가져와서 season.setImageDrawable(img_season);//봄 사진 출력 }else if(str_season.equals("여름")){ BitmapDrawable img_season = (BitmapDrawable)getResources().getDrawable(R.drawable.summer); season.setImageDrawable(img_season); }else if(str_season.equals("겨울")){ BitmapDrawable img_season = (BitmapDrawable)getResources().getDrawable(R.drawable.autumn); season.setImageDrawable(img_season); }else if(str_season.equals("가을")){ BitmapDrawable img_season = (BitmapDrawable)getResources().getDrawable(R.drawable.winter); season.setImageDrawable(img_season); }
여기서 애를 먹었던게 if 값을 그냥 평소 하던대로
if(str_season == "봄") 이런식으로 해줬는데 안되서 찾아보니까 String 값은
str_season.equals("봄")
이런식으로 해줘야 했다.
이제 스피너로 봄 값이 넘어오면 이미지뷰에 봄 사진을 넣어주고 여름이면 여름사진을 보여준다.
아 소스코드 태그 은근 귀찮네..
'지식메모 > 안드로이드 Android' 카테고리의 다른 글
안드로이드 레이아웃 버튼 보이기 숨기기 (1) | 2013.09.22 |
---|---|
안드로이드 EditText 에디트텍스트 값 남겨두기 (0) | 2013.09.09 |
안드로이드 dip px 변환하기 (0) | 2013.07.23 |
안드로이드 버튼 여러개 쓰기 (0) | 2013.07.21 |
안드로이드 공유하기 기능쓰기 (7) | 2013.07.21 |
안드로이드 dip px 변환하기
기준값
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값으로 넣어주었더니
어느 폰에서나 똑같은 크기로 나올 수 있었다.
'지식메모 > 안드로이드 Android' 카테고리의 다른 글
안드로이드 EditText 에디트텍스트 값 남겨두기 (0) | 2013.09.09 |
---|---|
안드로이드 Spinner(스피너) 값 전달하기 (11) | 2013.08.29 |
안드로이드 버튼 여러개 쓰기 (0) | 2013.07.21 |
안드로이드 공유하기 기능쓰기 (7) | 2013.07.21 |
안드로이드 숫자 키보드 띄우기 (0) | 2013.07.20 |
안드로이드 공유하기 기능쓰기
이미지를 캡쳐해서 저장한 후 공유하기를 통해 이미지를 공유하고 싶었다.
이 공유하기 기능을 사용하면 카톡 페북 미투데이 등등 메뉴가 저절로 나온다.신기방기
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(); }
'지식메모 > 안드로이드 Android' 카테고리의 다른 글
안드로이드 dip px 변환하기 (0) | 2013.07.23 |
---|---|
안드로이드 버튼 여러개 쓰기 (0) | 2013.07.21 |
안드로이드 숫자 키보드 띄우기 (0) | 2013.07.20 |
안드로이드 EditText에 텍스트 집어넣기 (0) | 2013.07.20 |
안드로이드 카메라 호출해서 이미지 크롭하기 (0) | 2013.07.20 |
안드로이드 EditText에 텍스트 집어넣기
뭔가 특별한게 있을 줄 알았는데 별 거 없었다..
그냥 텍스트 뷰에서 하는 것 처럼 xml 에서
<EditText
android:text="텍스트"
/>
이렇게 해주면 입력칸에 hint가 아닌 진짜 텍스트가 초기상태부터 들어가 있다.
'지식메모 > 안드로이드 Android' 카테고리의 다른 글
안드로이드 공유하기 기능쓰기 (7) | 2013.07.21 |
---|---|
안드로이드 숫자 키보드 띄우기 (0) | 2013.07.20 |
안드로이드 카메라 호출해서 이미지 크롭하기 (0) | 2013.07.20 |
안드로이드 이미지 캡쳐시 Out of Memory 현상 해결법 (4) | 2013.07.19 |
안드로이드 이미지버튼으로 버튼 눌림 효과 주기 (0) | 2013.07.17 |
안드로이드 이미지 캡쳐시 Out of Memory 현상 해결법
이미지를 캡쳐하는 어플을 만들었는데 저장하기 버튼을 누르면 캡쳐가 되는 기능이었다.
그런데 저장하기를 누르니까
java.lang.OutOfMemoryError
at android.graphics.Bitmap.nativeCreate(Native Method)
at android.graphics.Bitmap.createBitmap(Bitmap.java:605)
at android.graphics.Bitmap.createBitmap(Bitmap.java:585)
at com.project.app.ResultActivity.onClick(ResultActivity.java:860)
at android.view.View.performClick(View.java:3531)
at android.view.View$PerformClick.run(View.java:14125)
at android.os.Handler.handleCallback(Handler.java:605)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4449)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554)
at dalvik.system.NativeStart.main(Native Method)
이런 에러가 나타났다. 그래서 해결책을 찾고 있었는데 다 recycle()이거나 BitmapFactory등등 뭔가 복잡했다.
내 실력으로는 잘 이해가 안갔다.
그러다 되게 간단해 보이는 방법을 찾았는데
AndroidManifest.xml 파일에
<application>
....
android:largeHeap="true"
....
</application>
어플리케이션 부분에 이 옵션을 주는 것이었다. 어플리케이션에 메모리할당을 더 크게 늘려주는 옵션이라나...
아무튼 적용해보니 에러가 발생하지 않았다.
감격 ㅠㅠ
물론 이게 100%해결책은 아니지만 가장 간단한 해결책이 되지 않을까 싶다.
'지식메모 > 안드로이드 Android' 카테고리의 다른 글
안드로이드 EditText에 텍스트 집어넣기 (0) | 2013.07.20 |
---|---|
안드로이드 카메라 호출해서 이미지 크롭하기 (0) | 2013.07.20 |
안드로이드 이미지버튼으로 버튼 눌림 효과 주기 (0) | 2013.07.17 |
안드로이드 뒤로가기 버튼으로 종료하기 (0) | 2013.07.17 |
안드로이드 EdtiText 입력 숫자 검사하기 (0) | 2013.07.14 |