[안드로이드 공부] 201

[안드로이드] EditText 여러개 포커스, 커서 변경

안드로이드 EditText가 여러개 있거나, 다른 곳으로 포커스를 옮겨야 할 경우가 있다. 어떻게 해야 할까? 1. 현재 에디트텍스트의 커서를 지운다.setCursorVisible(false) 2. 다른 에디트텍스트나 아이템에 커서를 살린다. setCursorVisible(true) 3. 죽이고, 살리면 살아난 애는 깜빡일까? 그냥 자고 있다. 포커스를 요청 해야 한다. 4. 포커스 좀 주세요... mEditText.requestFocus(); 이러면 끝났나? 그럼 혼난다. 1. 왠만하면 setCursorVisible(false)를 쓰지 마라. 2. 다시 살려야 하고 복잡해진다. 3. 그리고 setForcusable, setForcusableInTouchMode 는 기본으로 True 4. editable..

[안드로이드] Listener Return false, true 의미

안드로이드에는 수 많은 리스너(Listener)가 있다. 기다렸다가 처리하라는 의미다. 그런데 return false, return true가 항상 따라 다닌다. 이게 뭐가 중요할까? 1. true- 일 다했으니 해당 이벤트에 대해서는 다음에 쌓인일은 지워. 2. false- 아직 일 다 못했다.. 다음에 쌓여 있는 같은 일 또 보내줘.. 처리 하게... 그렇다.true는 깔끔하게 처리 하고 끝낸다.false는 일 덜 처리 했다... 즉, event 값에 원하는 값이 안 오거나, null이 오거나... 등 만족 스럽지 못했을 경우에 사용 하면 된다.

[안드로이드] EditText 맨 뒤에 커서 위치 시키기 -java.lang.indexoutofboundsexception setspan ends beyond length

안드로이드 에디트 텍스트의 맨 뒤에 커서를 위치 시키는 방법을 알아 보자. 이게 기본이 아니라는 것이 그렇지만... 공부 하라는 선생님의 말씀이라는 것 같아서... 숙제를 해본다. 1. 길이의 맨 뒤에 붙여 보자 editText.setSelection(editText.length()); 2. 선생님을 만나라java.lang.indexoutofboundsexception setspan ends beyond length 3. 선생님의 충고를 들어라. Editable editable = mFrontEditText.getText(); Selection.setSelection(editable, editable.length()); 4. 짐싸라. 5. 하산 하라. 6. 뒤통수 맞고 다시 책상에 앉아라.

[안드로이드] TextView 글자 흐르기 marquee 효과

글자가 흘러간다? HTML에서 많이 봐왔던 흘러가는 글자를 안드로이드에서도 할 수 있다? 당연히 코드 친구들인데 안 될리가 없다. 이 친구들끼리 흘러가는 세월의 이름은 marquee로 통한다. 간단히.... XML에서 아래와 같이 하고, android:ellipsize="marquee" android:focusable="true" android:marqueeRepeatLimit="marquee_forever" android:singleLine="true" marquee_forever 는 기본 값이 -1이다. 즉, 몇 번 반복 할 것인가 라고 유추 할 수 있다.1을 넣으면 1번만 100을 넣으면 100 번 흐른 뒤 멈춘다. 코드에서 textView.setSelected(true)를 해주면 된다. 단, 주의..

[안드로이드] 위젯 이벤트 연결

안드로이드 스튜디오에서 만들어진 위젯 에 이벤트를 연결해 보자 위젯에 버튼을 하나 추가하고, 버튼 클릭 시 내 앱으로 이동하게 만드는 루틴이다. [my_app_widget.xml]에 이미지 버튼을 하나 추가하고 [MyAppWidget.java]를 다음과 같이 수정하였다. static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) { CharSequence widgetText = context.getString(R.string.appwidget_text); // Construct the RemoteViews object RemoteViews views = new RemoteViews(conte..

[안드로이드] setText 업데이트 적용 안되는 현상

UI에서 setText를 적용하기는 참 귀찮다. 이 놈이 현재 UI 스레드에서 돌고 있는지 등에 대한 고려를 해야 하기 때문이다. 즉, 팝업에 갔다 오거나... 여기 저기 갔다와서 적용사항을 변경해야 하는데 이때 setText를 하면 먹히지 않는다. 즉, 그 때와 지금의 주인이 다르기 때문이다. 이럴 때에 사용하라는 방법이 핸들러를 돌려라... 스레드를 돌려라... 등의 추천이 많은데... 그냥 다시 찾아서 넣어주면 된다. LayoutInflater layoutInFlater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View rootView = layoutInFlater.inflate(R.layout.fr..

안드로이드 롤리팝 이상에서만 죽는 것

안드로이드가 세상사람들과 친해지기 시작한지 5년 정도 된 것 같다. 그래서 처음 부터 만나왔던 사람들에게도 잘해주려고 안드로이드는 v4, v7등과 같은 라이브러리를 제공하여 최신 API 및 UI를 사용할 수 있게 해주고 있다. 하지만, 이런 라이브러리를 사용할 때는 에러를 쉽게 만난다. 싼게 비지떡? 공짜가 어디있냐? 1. 최신 라이브러리를 이용하여 seekbar, switch 등을 가져와서 레이아웃에도 정확히 만들었고, 코드에서도 ID를 정확히 불러왔다. 2. 그런데 사망하셨다. (롤리팝 이상에서만 죽는다.)java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.SwitchCompat...

안드로이드 프래그먼트 탭 생성하기 -viewpager

호랑이가 담배 피우지 않던 시절에는 안드로이드는 탭 호스트라는 것을 사용하여 멀티 화면을 정의해서 썼다고 한다. 그럼 호랑이가 골초가 되어버린 요즘에는 어떻게 탭 효과를 낼까? 방법은 간단한데, 요즘 방식으로 되어있는 글이 없어서 남겨 보도록 한다. 1. 안드로이드 스튜디오에서 새 프로젝트 만들기를 한 뒤 Fragment Tab을 선택한다. 2. 일단 메인 액티비티 하나와 레이아웃이 생성 된다. 3. 메인 액티비티는 탭 안에 담을 프래그먼트를 조정할 수 있고, 레이아웃은 타이틀 및 탭 제목등의 효과를 담당한다. 4. 메인 액티비티는 탭을 조정 하기 때문에 탭에 담길 프래그먼트(Fragment)를 넣어주는 작업을 해야 한다.- File에서 New를 한 뒤 Fragment를 하나 생성한다.- Layout도 ..

안드로이드 error activity class does not exist

안드로이드에서 액티비티를 매니패스트에 추가를 해줬지만 아래와 같은 에러가 나는 경우가 있다. error activity class does not exist 액티비티는 분명히 존재 한다. 파일도 존재 한다. 패키지명도 올바르다. 도데체 뭐가 문제인가? 이럴때 시도 해볼 수 있는 방법 1. Clean Android Studio Project2. 빌드 디렉토리 지우기.3. 안드로이드 스튜디오 재 시작4. 리빌드/실행 안드로이드 스튜디오가 꼬이는 경우 재시작만 해도 되는 경우가 있다. 하지만, 이래도 안된다면? 철자를 잘 살펴 보라! 분명 오타가 있을 지다. 만약 액티비티가 com.comostudio.a.b.activty 인데 android:name="b.activity"라고 적으면? 문제가 없어 보인다? 점..