안드로이드 스튜디오 48

[안드로이드] 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)를 해주면 된다. 단, 주의..

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

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

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

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

Preference item 클릭 효과 만들기

안드로이드 리스트의 경우에는 간단히 list.setSelector를 해주면 아이템 클릭 효과를 줄 수 있다. 뿐만 아니라 Preference에서도 비슷하게 사용 할 수 있는데, getListView를 한 뒤 리스트처럼 사용하면 아이템 클릭시 효과를 얻을 수 있다. 하지만 언제나 어려운 문제는 발생하는 법. 만약 Preference를 오버라이드(Override)한 다면 어떻게 처리 해야 할까? 오버라이드를 했으니 메인 프리퍼런스 액티비티가 어찌 손을 쓸 수도 없고... 오버라이드한 프리퍼런스에서 getListView를 하기도 그렇고... 그럼 도데체 이 리스트 아이템을 어떻게 가져 올 거냐? 여기 저기 검색을 해봐도 오버라이드 되지 않은 프리퍼런스의 아이템에 대한 얘기 밖에 없다. 그럼... 어차피 새로 ..

안드로이드 Edittext 엔터 인식 및 event null 처리

안드로이드 에디터 텍스트(edit text)에서 엔터키나 Done키를 받기 위해서는 아래와 같이 리스너(setOnEditorActionListener) 를 등록 하면 된다. @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if ( actionId == EditorInfo.IME_ACTION_DONE || event.getKeyCode() == KeyEvent.KEYCODE_ENTER){ 그런데 여기서 문제가 있다. event가 null 이 들어 오는 것이다. 죽음이란 거다. 이럴 경우 null 처리(event != null &&)를 해주면 그만이겠거니 하고 생각 하겠지만... 그렇다면 엔터에 대한 반응 ..

비동기 작업은 아버지가 살아있을 때 해라!

일반적으로 뷰 속에 버튼등을 넣을 수 있다. 그리고 이 뷰를 오버라이드 하면 새로운 커스텀 뷰를 만들수도 있다. 그러나 조심해야 할 점이 있으니... 뷰는 닫히면 사라진다. 만약 닫을 때 제거 하지 않으면 다음에 열 때 '니 자식의 애비가 살아 있으니 애비를 저리 치우고 다시 나와라'라는 말을 듣게 될 것이다. 즉, 무조건 제거를 해주어야 하는데 여기서 문제가 발생한다. 비동기 태스크가 문제다... 얘는 뷰가 닫혀도 언제든 갑자기 툭하고 나와서 실행 될 수 있다. 해당 클래스에 있다고 무심결에 이 뷰를 불러다 쓰면 죽느다. 이건 문제가 참 쉽다. 하지만 뷰 속에 있는 아이템을 불러다 쓰면 살아 있을 수도 있다. 뷰만 제거 하고 속 살은 제거 하지 않았기 때문에 아직 가비지 청소가 되지 않았다면 속살은 살..

당신은 반드시 아이의 부모를 먼저 제거 해야 합니다?

오버라이드를 하다 보면... 또는 여러가지 뷰 작업등을 하다 보면 저런 경고 아니... 죽여 놓고 내 뱉는 문장을 만나게 된다. 유아이가 정말 복잡하게 되어있자면... 정말 난감하기 따름이 없을 것이다. 이번엔 Preference Override 에서 발생하는 문구에 대해 보겠다. 그냥 답만 내 놓자. onCreateView를 통해 1개만 만든다면 문제 없지만, 여기에다가 onCreateDialogView까지 만들게 되면 다음에 뷰를 띄울 때는 반드시 죽여야 한다. 그러지 않으면 아래 뻘건 문구와 함께 앱이 죽어 있을 것이다. java.lang.IllegalStateException: The specified child already has a parent. You must call removeView(..

불면증은 보내고 숙면이를 부르는 취침시계 1.1.1

잠잘(취침) 때 시간은 알고 싶은데 휴대폰(스마트폰)을 찾느라 손을 이리저리 움직이는 것도 모자라, 눈 뜨고 빛나는 시간을 확인 해야 한 적이 많으신가요? 이렇게 시간을 확인 했다면 이미 잠은 깨버린거죠. '잠이 오지 않을 때 잠깐만 시간 확인 하면 잘 잘것 같은데....' 자다가 잠깐 깨어났는데 시간만 확인 하고 싶은데....' '알람이 울릴 때가 되었는데 지금은 몇시인지... 확인 하면 잠 다 깰 것 같고...' 이런적이 많으신가요? 그렇다면 숙면 시계 어플을 만나보세요. 주무시던 잠 그대로 반 수면 상태에서 확인 하고 깊은 수면 상태로 다시 보내드립니다. 또한, 불면증으로 시달리는데... 시간을 확인하면 눈 부신 상태에서 또 다시 잠이 드는데 오래 걸리시는 분들께도 조용히 시간만 확인 시켜드리고 수..

EditeText 키보드 내리고 포커스 내보내기

EditText를 여러개 사용하다보면 포커스 때문에 불편한 점이 생길 때가 많다. 이럴 때는 필요할 때만 포커스를 넣고 그외에는 포커스를 기본적으로 죽여야 한다. 그렇지 않으면 시도 때도 없이 키보드가 올라가고 사라지지 않기 때문이다. 키보드 강제로 내리기 private void hideKeyBoard(){ InputMethodManager iM= (InputMethodManager)mContext.getSystemService(Context.INPUT_METHOD_SERVICE); iM.hideSoftInputFromWindow(mEditText.getWindowToken(), 0); } 키보드의 포커스를 기본으로 다른 곳으로 보내기아래 코드를 다른 레이아웃등에 넣어 주면 수동으로 포커스를 줄 수 있다..