안드로이드의 다양한 해상도 땜에 가끔 귀찮을 때가 있다.

어쨌든 이러한 해상도 문제를 해결하기 위해 몇가지 꼼수를 써서 해결해 보았습니다.
정답이 아니며, 더 좋은 방법이 있으면 공유 부탁드립니다.
이전에 쓴 관련글 : [팁] Density를 고려한 어플리케이션 만들기.

1) onCreate에서 width, height 정보를 획득
Display display = ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int displayWidth = display.getWidth();
int displayHeight = display.getHeight(); 

2) width, height에 따라 변수 설정
if (displayWidth == 600 && displayHeight == 1024)
    isItTab = true; 

3) LayoutParams 조정하기
if (isItTab) {
LinearLayout.LayoutParams params = null;
params = (LinearLayout.LayoutParams) mylayout.getLayoutParams();
params.width = 105;
params.height = 66;
mylayout.setLayoutParams(params);
...
} else {
...
}

허접한 글이지만, 도움이 되신다면 아래 손가락 꾹 눌러주세요.


신고

'<안드로이드>개발 > 안드로이드/App' 카테고리의 다른 글

GalleryView 옵션  (0) 2011.07.14
EditView 관련 정리  (0) 2011.07.11
[팁] 소스코드에서 해상도 처리하기.  (0) 2011.07.06
[TIP] WebView  (0) 2011.03.22
[팁] TextView 관련 팁들  (0) 2011.02.21
안드로이드 gles 첫번째 예제.  (0) 2010.11.02
Posted by 소혼

Ellipsize
  텍스트가 너무 길 때, 자동 줄임 역할을 수행한다. (한줄로 보이게 하려면 maxLines="1")
    android:ellipsize="none" : 그냥 자름
    android:ellipsize="start" : 앞 부분에 ...
    android:ellipsize="middle" : 가운데 부분에 ...
    android:ellipsize="end" : 뒷 부분에 ...
    android:ellipsize="marquee" :

* ListView 안의 custom textview에서 Ellipsize 쓰려면
    android:scrollHorizontally="true"

textAppearance
   ?


코드에서 텍스트 사이즈를 바꿀 때 Unit 정보를 주는 법
예) sp를 주려고 한다면
ret.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);


HTML을 통해 스타일 주기
참고 : http://developer.android.com/reference/android/text/Html.html
참고 : http://developer.android.com/guide/appendix/faq/commontasks.html#selectingtext
    몇개 적용이 되진 않지만 HTML에 스타일을 줄 수 있다.
      예) wordView.setText(Html.fromHtml("<font color=red>test</font>"));
    안타깝게 폰트 크기 변경은 잘 되지 않는다.
    하지만 유사한 방법으로 <small>이란 태그를 사용하여 글자를 줄일 수 있다.



http://fanpro.springnote.com/pages/4801589.xhtml
http://babtingdev.tistory.com/251
http://blog.naver.com/PostView.nhn?blogId=lowmans&logNo=100118611161&redirect=Dlog&widgetTypeCall=true
신고
Posted by 소혼
os.system("cmd.exe")를 하면 될 것 같았는데 되지 않았다.

이는 커맨드창에서 cmd.exe를 실행했을 때도 새 커맨드 창이 뜨지 않는 것과 같은 이유이다.

무척 쉬운 방법이 있음을 발견했다.

os.system("start")
당연히 커맨드창에서 start를 입력해도 동일하게 동작한다.

리눅스에서 터미널을 하나 더 띄울때는 그냥
gnome-terminal (gnome을 쓴다면)
konsole (KDE를 쓴다면)
xterm (간단한 터미널)

중 하나를 입맛따라 골라 쓰면 된다.


허접한 글이지만, 도움이 되셨다면 아래 손가락 꾹 눌러주세요.

신고

'프로그래밍 언어 > <Python>' 카테고리의 다른 글

[python]XML 처리  (0) 2010.10.12
[파이썬] CSV2SQL ver 0.1  (0) 2010.08.27
[python] Windows에서 커맨드창 하나 더 띄우기  (0) 2010.08.24
[wxPython 예제] 2. layout  (0) 2010.08.18
[TkInter 예제]2. Frame과 Layout  (2) 2010.08.18
[TkInter 예제]1. Hello World  (0) 2010.08.18
Posted by 소혼
임시 프로젝트를 하나 추가하고 싶어서 복사했는데 프로젝트 명이 동일하다고 import되지 않을때 workspace를 새로 만들까 하다가 아주 쉬운 방법 발견

프로젝트 폴더 내에 .project라는 파일이 있네요.
projectDescription 에서 name만 적당한 값으로 바꾸어주니 import 오케이


신고
Posted by 소혼
이클립스에서 빌드 중간에 취소를 하거나 리소스 에러가 생겨 취소되었을 때 발생할 수 있다.

이런 경우, 이클립스의 메뉴 중프로젝트> Clean을 선택하여 CLEAN해주면 된다.

전체 프로젝트를 클린하면 시간이 오래걸릴 수 있다. 이런 경우 에러가 난 프로젝트만 선택한다.



허접한 글이지만, 도움이 되신다면 아래 손가락 꾹 눌러주세요.
신고
Posted by 소혼
LogCat에서 로그가 종종 안보일 때가 있다.

이런 경우 두가지 가능성이 있는 것 같다.

1. target이 선택되어 있지 않거나 잘못 선택되어 있을 때
이 경우, 타겟을 선택해주면 된다. Perspective가 Java인 경우 타겟을 선택할 수 없으므로 DDMS로 들어가 타겟을 선택해준다.

2. LogCat 버그로 추정되는 상황으로 지나치게 많은 로그가 올라갔을 경우 몇개의 옛날 로그만 보여주는 경우가 발생
LogCat에 보면 Clear 버튼이 있다. Clear 버튼을 클릭하여 준다.


허접한 글이지만, 도움이 되신다면 아래 손가락 꾹 눌러주세요.
신고
Posted by 소혼

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

김선운님에게 도움이 될까 싶어 정리해봅니다.

안드로이드는 sqlite3을 쓰는데 sqlite3이 리눅스에서는 정말 사용하기 편하지만 윈도우에서 사용하려면 빌드까지 해야 하는 꽤 불편할 수 있습니다.

하지만 안드로이드 에뮬레이터 안에는 이미 sqlite가 있습니다.
이것을 활용하여 내가 만든 DB가 어떤 상태에 있는지 확인해 보고자 합니다.

1. 먼저 콘솔 창을 하나 띄웁니다.
시작 => 실행(R)을 클릭하고 cmd를 입력

2. 안드로이드 SDK가 있는 경로로 이동합니다.
   (저의 경우 h:\project\android2\android-sdk-windows\tools를 사용합니다.)
> cd h:\project\android2\android-sdk-windows\tools
> h:

3. adb 쉘에 접속합니다.
h:\project\android2\android-sdk-windows\tools> adb shell
#

4. 자신이 만든 프로젝트가 있는 곳으로 이동합니다.
이 때 리눅스 명령어들을 사용해야 합니다. 몇가지 정도만 알고 쓰시면 유용합니다.
 ls : 현재 폴더의 파일, 서브 폴더 목록을 출력합니다.
      ls는 권한이 없는 곳에서 수행하면 Permission denied 에러가 날 수 있습니다.
cd [폴더명] : 폴더명으로 이동합니다.
pwd : 현재 폴더 위치를 출력합니다.

경로는 /data/data/패키지명 입니다.
이전 DB 예제에서는 이 아래에 databases라는 폴더를 하나 더 만들었으므로 한단계 더 아래에 파일이 존재합니다.

# cd /data/data/com.sohon.sample
# ls
ls
play_seq.dat
shared_prefs
databases
lib
#

5. sqlite를 통해 데이터베이스 파일을 엽니다.
# sqlite3 databases/lecture.db
sqlite3 databases
SQLite version 3.5.9
Enter ".help" for instructions
sqlite>

6. sql을 통해 정보를 확인합니다.
sqlite> select * from sqlite_master;
select * from sqlite_master;
table|lecture|lecture|2|CREATE TABLE lecture (_id integer primary key, eng_sente
... 기타 테이블 커럼 정보들)
sqlite>

허접한 글이지만, 도움이 되셨다면 아래 손가락 꾹 눌러주세요.
신고
Posted by 소혼
GalleryView는 작은 이미지를 화면에 출력하는데에는 적합할 수 있으나 화면을 채운 아이템들을 움직이는데는 부적합한 것 같다.

예를 들어 화면을 꽉 채운 GalleryView에 이미지가 5개 있고, 현재 1번 이미지를 보고 있다고 가정하자.
사용자가 화면에 flick을 통해 2번, 3번 이미지를 보고 싶을 수 있겠으나
GalleryView에서 flick을 발생하면 거의 바로 5번 이미지로 이동해버린다.
아주 천천히 스크롤하는 경우가 아니면 2,3번 이미지를 보긴 매우 어려운데

만약 flick할 때마다 한개의 이미지만을 넘기고 싶은 거라면, GalleryView로는 불가능 할 것 같다.

그래도 GalleryView를 짜기 버거워 어쩔수 없이 쓰던 GalleryView에 약간의 트릭을 해보았다.

일단 GalleryView를 상속 받고 onFling을 override한다.
onFling의 인자 가운데 새번째 인자인 velocityX의 값을 절반으로 나누어 부모 클래스의 onFling을 호출한다.

생각한 것만큼 좋은 효과를 보여주진 못하지만,
당장 써먹을 수 있는 수준인 것 같다.

궁극적으로는 GalleryView를 다시 짜야 할 것 같다 ;;

허접한 글이지만, 도움이 되셨다면 아래 손가락 꾹 눌러주세요.
신고
Posted by 소혼


최종 바이너리를 만들면서 확인하다가 큰 실수를 했다는 것을 알았습니다. density에 관한 것입니다.
에고 덕분에 완빵 고생을 하고 이 글을 적습니다. 혹시 이 글을 보시는 분은 배포 전에 꼭 resolution 독립적인지 확인하셔서 저같은 실수를 안하시길 빕니다.

일단 density를 위해 아래와 같은 점을 고려하면 될 것 같습니다.

1. 프로젝트를 만들 때, 반드시 min-sdk를 지정합시다.
프로젝트를 만들 때, min-sdk에 기본값이 없어도 프로젝트가 생성이 되지만 이렇게 만들어진 프로젝트는 hdpi 해상도에 대해 제대로 처리할 수 없습니다. 에뮬레이터가 큰 값을 갖더라도 그렇습니다.


2. px를 쓰지 말고 dp를 씁시다
최대한 레이아웃에 좌표계를 쓰지 않는 것이 좋지만 꼭 써야 한다면, dp를 쓰도록 합시다. dp는 해상도의 변경에 자유롭습니다.

3. 만약 소스코드에서 고쳐야 한다면 아래 코드처럼 DisplayMetric을 이용해 변환합니다.
DisplayMetrics metrics = new DisplayMetrics();
          getWindowManager().getDefaultDisplay().getMetrics(metrics);
metrics.density의 값은 hdpi 타겟의 경우 1.5 mdpi의 경우 1.0이 반환됩니다.
원하는 좌표계에 이 값을 곱하면 적당한 위치에 그려지는 것을 알 수 있습니다.

4. 이미지 크기에 주의합시다
이미지가 용량이 크면 메모리 오류가 발생할 수 있습니다.


허접한 글이지만, 도움이 되신다면 아래 손가락 꾹 눌러주세요.
신고
Posted by 소혼
이전버튼 1 2 이전버튼

티스토리 툴바