1. 한줄짜리 editview
이전에는 singleline이란 것을 사용했으나 지금은 deprecated되었음.
android:inputType="none" android:scrollHorizontally="true" 으로 해결 가능

2. 코드에서 IME 사라지게 하기 
InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0); 

3. 코드에서 IME 나타나게 하기
InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
imm.showSoftInput(e_search, InputMethodManager.SHOW_IMPLICIT); 

4. focus 주기/ 뺏기
e_serch.requestFocus();
e_earch.clearFocus(); 

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

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

[TIP] Activity  (0) 2011.11.09
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
안드로이드의 다양한 해상도 땜에 가끔 귀찮을 때가 있다.

어쨌든 이러한 해상도 문제를 해결하기 위해 몇가지 꼼수를 써서 해결해 보았습니다.
정답이 아니며, 더 좋은 방법이 있으면 공유 부탁드립니다.
이전에 쓴 관련글 : [팁] 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
안드로이드의 WebView는 WebKit/android포트를
JNI 인터페이스를 통해 java형태로 제공하는 Widget 입니다.











1. html 파일로 네트워크에 접속하려면 permission이 필요합니다. 
   AndroidManifest.xml 파일에 
<uses-permission android:name="android.permission.INTERNET"/>  
   추가

 2. HTML에 <body onload="a();"> 와 같은 자바스크립트를 썼을 때 동작하지 않는 문제는 WebView가 기본적으로 Javascript 사용이 disable 되어 있기 때문입니다.
    wv.getSettings().setJavaScriptEnabled(true);

3. WebView를 load했을 때 오른쪽에 흰 줄(흰 배경)이 보이는 것은 scrollbar 영역이 잡혀있기 때문입니다.
이것을 사라지게 하려면 아래 한줄을 추가합니다.
   wv.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);



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을 통해 스타일 주기
    몇개 적용이 되진 않지만 HTML에 스타일을 줄 수 있다.
      예) wordView.setText(Html.fromHtml("<font color=red>test</font>"));
    안타깝게 폰트 크기 변경은 잘 되지 않는다.
    하지만 유사한 방법으로 <small>이란 태그를 사용하여 글자를 줄일 수 있다.

eclipse에서 안드로이드 앱을 실행할때 용량이 커지면 아래처럼 Launch canceled라는 에러 메시지가 뜨곤 한다.


uploading하다가 에러가 난 것인데, 해결 방법은 비교적 간단하다.
아래 그림처럼 Preference의 Android 탭을 선택하고 DDMS를 선택하여 connection time out을 늘려주면 된다.



안드로이드 NDK하다 이런 에러를 만나서 검색을 해봤더니

9.04, 9.10에서는 NDK r5 로 컴파일 할수없다고 한다.

어쩔수 없이 10.10을 설치해야 했다.

설치하고 다시 환경설정을 하니 아무 문제 없이 정상동작했다.


PS> 그러나! 10.10으로 바꾸기 위해 데이터를 외장 하드에 백업하고 외장하드가 꽂힌채로 10.10을 설치했더니 이놈의 우분투가 외장하드에 설치되었다 ㅠ_ㅠ
뭐가 날라갔는지 도저히 알 수가 없다.
중요한 데이터는 백업본, 아니 원본이 남아있어서 살렸지만 이걸 찾아 해결한다고 어제 새벽한시까지 못잔걸 생각하니 눈물이 난다 ㅠㅠ
이제 3D 공부를 시작해봅니다.

FirstGLRenderer.java

Act3D1.java



관련 글1 : http://bunhere.tistory.com/140 [Widget][예제]ListView with CursorAdaptor
관련 글2 : http://bunhere.tistory.com/153 [팁]기존에 생성된 (Sqlite3) DB를 안드로이드에서 이용하기

생성된 DB를 사용하는 것과 관련된 질문들이 많아 예제 프로그램을 작성해보았습니다.

옛날 만들었던 ListView with CursorAdaptor의 코드를 거의 그대로 들고 왔으나, DB를 만드는 부분은 153번의 initialize를 사용했습니다.

1. DB를 준비하자

먼저 DB 파일이 있어야 할 것입니다.
SQLITE3을 통해 아래와 같이 만들었습니다.(리눅스에서)

필요하신 분들을 위해 해당 파일 첨부합니다.

SQLite version 3.6.16
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> create table lecture (_id integer, name);
sqlite> insert into lecture values(1, 'ryuan');
sqlite> insert into lecture values(2, 'yesum');
sqlite> insert into lecture values(3, 'mindong');
sqlite> .q

2. 새 프로젝트를 만듭니다.
생성하는 방법은 익히 아실거라 생각됩니다. 중요한 것은 Package name입니다.
com.sohon.testDB 으로 패키지명을 정한 경우
해당 안드로이드 어플리케이션은 위 패키지 경로가 지정한 곳에 생깁니다.
그리고 /data/data/com.sohon.testDB 아래에 패키지 관련 파일들이 아래 그림과 같이 생기게 됩니다.
DDMS의 일부를 캡쳐한 화면입니다. 상단에 /data/data/는 다른 프로젝트들 떄문에 같이 캡쳐하지 못한 점 양해 부탁드립니다.

일단 위와 같이 새 프로젝트 정보를 입력하고 Finish를 누릅니다.
그러면 이클립스 개발환경이 뜹니다.

3. 코딩하기
ActTestDB.java 파일에 아래와 같은 내용을 코딩합니다
아래 내용은 관련글1과 관련글2의 내용을 합쳐놓은 코드와 유사합니다.
꼭 필요한 부분만 설명드리겠습니다. 관련글1,2를 참고하시기 바랍니다.

먼저 onCreate에서 initialze(this)를 통해 DB 파일을 asset으로부터, /data/data/com.sohon.testDB/databases 아래로 복사할 것입니다.

그리고 setAdaptor를 이용해 m_listbox에 DB를 연결합니다.
이것을 위해 수정해야 할 정보는 먼저 ROOT_DIR, DATABASE_NAME, TABLE_NAME 입니다.

실행하시면 아래와 같은 결과를 얻으실 수 있습니다.
에뮬레이터 resolution이 좀 이상한 것은 제 에뮬레이터 해상도를 이상하게 맞춰놔서 그렇습니다.(테스트용)


  1. 2011.01.09 14:04 신고

    /data/data/com.mf.main/databases/***.DB 파일을
    /data/data/com.mf.util/databases/***.DB 여기에 복사하려고 할때
    위와 같이 적용할경우 수정해야 할 부분이 있나요?
    삼일동안 방법을 찾고있는대 어세트 매니져 오픈쪽에서 자꾸 파일을 못찾는다고 에러를 뱉어서요
    전혀 될수가 없는 방법인지 조차도 모르겠내요 도움 부탁드리겠습니다.

    • 소혼 2011.01.10 21:16 신고

      Asset Manager는 asset/ 아래 있는 파일을 열때 사용하는 것인데요.
      서님이 원하시는 방법은 그게 아닌것 같네요. 만약 com.mf.main이 같은 앱의 경로시면 자바의 파일 방식을 이용하셔야 할 것 같습니다.

  2. 아햐 2011.02.01 17:30 신고

    안녕하세요.
    많은 도움 됐습니다.
    소스코드 티스토리에 붙이는거 무슨 기능을 사용해서 저렇게 표시되는지 알수 있을까요?

    • 소혼 2011.02.05 22:05 신고

      SyntaxHighlighter 라는 걸 사용해서 달았습니다. 저도 제대로 쓰고 있진 못하구요. 검색해보시면 사용법을 찾으실 수 있을거에요. 새해 복 많이 받으세요.

  3. digidigiri 2013.10.28 22:17 신고

    안녕하세요 계속 sql 에러로 고생좀 하고 있습니다 ㅠ 위 예제로도 테스트를 해봤는데요, 패키지 경로도 제대로 수정했고 레이아웃 파일도 정확하게 사용했는데, 이 예제도 왜 죽어버리는지 당췌 알 수가 없네요.. DDMS에서도 확인결과 databases 폴더가 생성되고 test..db 파일도 복사가 된게 확인이 되거든요. 근데 계속 no such table lecture... 해결이 안되네요. 어떤 문가 발생한 걸까요. 위 예제에서 제가 수정한 부분이라고는 ROOT_DIR을 저에게 맞게 수정한것 밖에 없는데..

    • 소혼 2013.10.31 10:49 신고

      최근엔 안드로이드를 보고 있지 않습니다만,
      작성하신 코드를 bunhere@gmail.com으로 보내주시면 확인해보겠습니다.


화면 유지 : 
PowerManager.WakeLock



WIFI 유지 : WifiLock

WifiManager wManager = (WifiManager)mCtx.getSystemService(Context.WIFI_SERVICE);
WifiLock wLock = wManager.createWifiLock("HandsWIFILock");
wLock.acquire();

//doing something

wLock.release();
< 계속 업데이트 합니다. 질문 환영 >
10-06-18 초기 문서
10-08-28 팁 몇개 추가
10-11-30 팁 하나 추가

- Listview


말그대로 List이다. 한 개 이상의 항목을 담아 뿌려주는 것을 기본으로 한다.
ListView는 다소 복잡한 Control이나 빈번히 사용하게 될 Widget이다.
ListView의 보이는 영역은 Scrollbar, 각 Row Item들, Selector (구분자? seperator? ), Divisor 로 이루어진다.

Scrollbar
위 그림에서는 Gallery와 Grid에 걸쳐있는 회색 계통의 긴 막대를 말한다.
Scrollbar는 ScrollView를 참조하면 될 것 같다.

RowItem
각각의 Row에 저장하는 정보들을 표현한다. 여기에 저장할 수 있는 정보는 매우 다양할 수 있기 때문에 다양한 Adaptor 형태로 ListView에 제공된다.
가장 기본 적인 것은 ArrayAdaptor이고, Database를 위해 CursorAdaptor도 제공한다.
사용자가 직접 재정의해서 다양한 정보들을 넣을 수 있다.

android.R.layout.simple_list_item_1
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2006 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at
 
          http://www.apache.org/licenses/LICENSE-2.0
 
     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:gravity="center_vertical"
    android:paddingLeft="6dip"
    android:minHeight="?android:attr/listPreferredItemHeight"
/>

Selector
Selector는 위 그림에서 Grid와 같이 사용자가 선택된 것을 알려주는 역할을 수행한다. 기본은 노란색 배경이라 너무 눈에 튀기 때문에 적당히 자신만의 Selector를 쓰는게 좋다.

Divisor
Divisor는 각 RowItem을 구분하는 역할을 하는 선을 말한다.

SectionIndexer, AlphabetIndexer
http://www.androidpub.com/97392
 

1) 만드는 법
   -
2) Adaptor 정리

3) style 바꾸는 법
   - selector 바꾸는 법
     selector를 바꾸는 법은 쉽다. 함수를 사용할 경우,
     mListView.setSelector(myDrawable);
   - background, foregound 바꾸는 법


4)

5) TIP
 a] 배경이 있는 Listview를 스크롤시, 회색이 나오는 문제
   android:cacheColorHint="#00000000" 을 추가
 b) 만약, listview의 아이템을 선택할 때 한 줄이 선택되지 않고 일부만 선택된다면 (textview가 있는 영역만 선택된다면)
   ListView의 layout_width="fill_parent" 속성을 확인할 것
 c) Custom ListView에서 Selector가 안보인다면,
   Selector의 기본 옵션은 Row 아래 깔리도록 되어 있는 것 같다. ListView 속성  
   android:drawSelectorOnTop="true"을 준다.
 d) ListView 아래 라인(Divisor) 제거하기
   listview.setDivisor(null);
 e) ListView 위아래 흐림 효과 막기
   android:fadingEdge="none"

6) 문제 해결
 setOnItemClickListener 가 동작하지 않을 때
 => 커스텀 뷰를 만들어서 쓸 경우, setOnItemClickListener가 동작하지 않는 경우가 발생했다. 문제는 커스텀 뷰에서 이벤트를 소비하고 있기 때문인데, 소비하는 부분을 찾아 제거해주는 것이 필요하다. 나의 경우, TextView와 marque 때문에 이런 문제가 발생했다. 3시간 소비 -_-;

* ListView 안의 custom textview에서 Ellipsize 쓰려면
    android:scrollHorizontally="true"
    http://stackoverflow.com/questions/1424276/ellipsize-not-working-for-textview-inside-custom-listview

참고 자료
http://android-developers.blogspot.com/2009/01/why-is-my-list-black-android.html : 배경이 검게 나오는 것과 관련한 자료
http://blog.naver.com/PostView.nhn?blogId=kippee&logNo=130076565197&viewDate=&currentPage=1&listtype=0&userTopListOpen=false&userTopListCount=5&userTopListManageOpen=false&userTopListCurrentPage=undefined
http://www.androidguys.com
http://comma.byus.net/blog/2younow/trackback/6

+ Recent posts

티스토리 툴바