안드로이드에서 동적 컨트롤을 추가할 때는 'addView'를 이용합니다. View.addView([추가할 뷰]); View.addView([추가할 뷰], [위치 인덱스]); 버튼을 추가하려면 이런 식으로 하면 됩니다. Button btnTemp; ViewGroup.LayoutParams params; Button btnTemp = new Button(this); btnTemp.setText("Button 2"); ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(600, 300); btnTemp.setLayoutParams(params); this.m_flContainer.addView(btnTemp, 1); 여기서 조심해야 할 것은 추가하려는 뷰에..
안드로이드의 웹뷰에서 Url이벤트를 사용하려면 웹뷰클라이언트(WebViewClient)를 상속받아 오버라이(Override)하여 사용해야 합니다. 웹뷰클라이언트(WebViewClient) 상속받기 일반적인 방법으로 상속받으면 됩니다. 'claWebClient'클래스를 생성하여 웹뷰클라이언트를 상속받아 봅시다. public class claWebClient extends WebViewClient { private Context m_context; //여기서는 토스트 메시지를 사용하기 위하여 컨텍스트를 매개변수로 받습니다. public claWebClient(Context context) { super(); this.m_context = context; } } 메서드 오버라이드(Override)하기 사용 가..
가끔 안드로이드 프로젝트를 하다 보면 타켓 API를 바꿔야 할 때가 있습니다. 사실 이럴 때는 프로젝트를 다시 생성하는 편이 좋습니다 ㅡ,.ㅡ;;; 하지만! 코드를 수정해서 타켓을 바꿀 수도 있긴 합니다. Grable Scripts > build.gradle (Module: app) 를 엽니다. 아래와 같은 코드가 나오는데 여기서 minSdkVersion : 최소 SDK 버전 targetSdkVersion : 타겟 SDK 버전 을 설정 할 수 있습니다.
1. 문제 발견 안드로이드에서 '.sleep'나 'wait'와 같은 스래드를 대기시키는 메소드를 사용하면 발생하는 에러입니다. Error:(116, 25) error: unreported exception InterruptedException; must be caught or declared to be thrown 2. 해결 방법 예외처리 해주라는 소리인 거 같네요. try { Thread.sleep(100L); } catch(InterruptedException ex) { //인터럽트 플래그 재설정 Thread.currentThread().interrupt(); } 이렇게 해도 되고 일반적인 예외처리 방식인 'Exception'을 사용해도 됩니다. try { Thread.sleep(100L); } ca..
1. 기본값 안드로이드 스튜디오는 기본값이 '현재 창에 프로젝트 열기(Open project in the same window)'입니다. 새 프로젝트를 만들거나 열었을 때 다른 창에서 열리게 옵션을 설정해 봅시다. 2. 설정 File > Settings 으로 들어가서 Appearance & Behavior > System Settings > Project Opening 에 들어가면 다음과 같은 옵션이 보입니다. Open project in new window : 프로젝트를 새 창에서 열기 Open project in the same window : 같은 창에서 프로젝트 열기 Confirm window to open project in : 프로젝트 열고 확인하기 여기서 'Open project in new..
안드로이드 스튜디오에서 에뮬로 실행하면 가끔 이런 오류를 볼 수 있습니다. pkg: /data/local/tmp/패키지 내임 Failure : [INSTALL_FALED_UPDATE_INCOMPATIBLE] 이 에러가 나는 가장 흔한 이유는 이전에 테스트하던 프로그램이 지워지지 않았기 때문입니다. 보통은 IDE에서 자동으로 프로그램을 지우거나 덮어 씌우는 과정을 거치게 되는데 이럴때 나는 에러입니다. 디바이스에서 직접 프로그램을 지운 후 다시 시도하면 해결 됩니다.
롤리팝에서 메뉴버튼이 사라져서 인터페이스에 메뉴버튼을 넣었습니다. 숨겨진 메뉴를 사용하기 위해서는 'openOptionsMenu()'를 호출하면 됩니다. 그런데 안뜰 때가 있네? 1. 일반적인 방법 프로젝트를 생성하고 메인엑티비티를 'Blank Activity'로 생성합니다. 버튼을 하나 생성하고 다음 코드를 버튼에 연결합니다. 그러고 나서 실행해보면.... 반응이 없습니다! 보통은 잘되는데 안될 때가 있습니다. 2. 해결방법 이제 'onCreate()'안에 을 다음과 같이 작성합니다. protected void onCreate(Bundle savedInstanceState) { //타이틀바 숨기기 requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCrea..
별생각 없이 만들다 보니 타이틀바가 있는 것도 몰랐네요 ㅎㅎㅎ 거기다 롤리팝에서 메뉴버튼이 삭제되면서 인터페이스가 타이틀바로 올라갔군요. 풀스크린은 상단의 상태줄과 소프트웨어 키가 숨겨집니다. 풀스크린 사용과 타이틀바를 없애는 방법을 알아봅시다. 1. 테마 수정하기 코드로 직접 수정하려면 매니페스트에서 수정해야 합니다. 매니페스트를 열어서 타이트바를 없앨 액티비티에 다음 코드를 추가하여 테마를 변경합니다. android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 이제 실행해 봅니다. 에러가 난다면 만약 여기서 에러가 난다면 보통은 상속받은 엑티비티가 잘못된 경우입니다. 그냥 액티비티를 생성하면 'ActionBarActivity'와 같은 기본 액티비티가 아닌..
안드로이드에서 커스텀 한 리스트를 표현하고 싶다면 리스트 뷰를 이용해야 합니다. 리스트뷰를 생성하고 데이터를 추가 삭제하여 활용하는 방법을 알아보겠습니다. 0. 테스트 환경 만들기 메인 액티비티의 레이아웃을 다음과 같이 만듭니다. 각 위젯은 내부에 아래와 같이 생성되어 있습니다. this.txtData1 = (EditText)findViewById(R.id.txtData1); this.txtData2 = (EditText)findViewById(R.id.txtData2); this.txtData3 = (EditText)findViewById(R.id.txtData3); this.btnDataAdd = (Button)findViewById(R.id.btnDataAdd); this.lvTest = (List..
사실 안드로이드에서 루트권한을 확인해야 하는 일이 발생하는 건 그리 좋은 경우는 아닙니다 ㅎㅎㅎ 그래도 필요할 때가 있으니 정리해 봅니다. 1. 일반적인 방법 시스템에 'su'권한을 요청해보는 것이 가장 간단한 방법입니다. 이 방법을 쓰면 슈퍼유저 권한을 줄 거냐고 묻는 알림창이 뜨고 이후 결과에 따라 메시지가 표시됩니다. 이 방법의 단점은 루팅된사람들은 권한 요청 창이 뜨고 사용자가 루트권한을 부여하지 않으면 동작하지 않을 수 있다는 점입니다. 1-1. 간단한 방법 그냥 무작정 요청하는 겁니다! 애초에 루팅을 하지 않으면 권한을 달라는 요청 자체가 되지 않습니다. try { //관리자 권한 요청 Runtime.getRuntime().exec("su"); //루트 } catch ( Exception ex..