본문 바로가기

[Android]스크롤 뷰 안에 웹뷰가 있을 경우 스크롤 뷰만 스크롤 되는 문제(Webview inside ScrollView scrolled only ScrollView) 스크롤뷰 안에 스크롤이 필요한 경우 NestedScrollView를 이용하여, 스크롤이 되게 할 수 있는데, 웹뷰의 경우는 웹페이지가 스크롤이 필요한 경우라 NestedScrollView로 해결 할 수 없다. 해당 문제를 해결하기 위해선, 웹뷰에서 발생하는 터치 이벤트를 다른 뷰에 뺏기지 않아야 원하는 결과를 얻을 수 있다. 먼저 웹뷰를 상속 받는 클래스를 하나 만든다. 상속 받은 웹뷰 클래스에 onTouchEvent 메소드를 Overriding 한다. public class RoadView extends WebView { @Override public boolean onTouchEvent(MotionEvent event) { requestDisallowInterceptTouchEvent(true); r.. 더보기
[Android] 툴바(Toolbar)와 맵뷰(MapView) 사용시 지도가 정상적으로 표시되지 않는 문제 툴바와 맵뷰를 같이 사용하게 되면 맵뷰 화면이 정상적으로 렌더링이 되지 않는다. 맵뷰 플래그먼트가 자리를 제대로 잡지 못해서 생기는 현상으로 보이는데, 아래와 같이.. 레이아웃을 잡아주면 된다. 이코드의 핵심은 android:layout_below="@+id/toolbar" 툴바의 아이디를 써주게 되면 맵이 정상적으로 표시되게 된다.. 더보기
[Android] Lollipop 버전에서 Support Fragment 화면 갱신이 안될때(ListView, Button 등) 요즘 안드로이드 개발 추세는 Activity 위에 Fragment를 올리는 형태를 많이 취한다. 그리고 많은 단말기를 지원하기 위해 Support Activity, Support Fragment를 사용한다. Activity는 FragmentController 역할을, Fragment는 뷰를 제어한다. 나도 위와 같은 형태로 안드로이드 앱 개발을 진행하는데, 가끔 생각지 못한 버그를 접하게 된다. 최근 개발 중에 Fragment의 화면이 갱신이 되지 않는 버그를 접했다. 플래그먼트에 리스트뷰, 그리고 토글 버튼들을 배치 하였는데, 이벤트는 발생을 하나, 화면이 새로 그려지지 않았다. 문제는 FragmentManager를 통해 다른 플래그먼트를 불러오는데, 애니메이션을 적용하게 되면, 새로 불려진 플래그먼트.. 더보기
[Android] 스테이터스바 컬러 변경(Change Statusbar Color)  기본으로 적용시킨 스테이터스바 컬러 이외에 특정 플래그먼트 또는 액티비티에서 스테이터스바 컬러를 변경해야할 때가 있다. 롤리팝 이상 버전부터 코드 상에서 컬러를 변경할 수 있는데 변경하기 위해선 styles.xml 에 아래 코드를 넣어 줘야 한다.( 앱 테마가 적용된 부분) 롤리팝 이상부터 동작하기 때문에 values-v23 에 적용시키면 된다. true 그리고 아래 메소드를 통해 스테이터스바의 컬러를 변경하면 된다.~ //컬러 코드로 변경(예: #373737) public static final void updateStatusBarColor (Activity context, String color) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPO.. 더보기
[Android] LinearLayout 에 View 동적 추가시 weight 주는 방법 linearlayout에 하위뷰를 추가해야 하는 경우가 있다. 여러 개가 추가될 경우 좌우 또는 상하 간격을 동일하게 주기 위해 weight 를 줘야 하는데, ViewGroup을 만들어 Parent 뷰로 묶지 않는 이상 xml 단에서 아무리 weight를 줘도, 제대로 동작하지 않는다. 이 문제를 해결하기 위해서는 뷰를 추가할 때 아래와 같이 LayoutParams를 함께 적용 시켜 주면 된다. LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); layoutParams.weight = 1.. 더보기
[Android] 안드로이드 버튼 음영 제거(Remove button shadow on Android) 안드로이드 버튼의 음영을 제거할 필요가 있을 때가 있다. xml 파일의 button 속성 값을 추가하게 되면 간단하게 해결 된다.. android:stateListAnimator="@null" 더보기
[Android] TextSize, 텍스트 사이즈 DIP, DP 코드로 적용 방법 안드로이드에서 텍스트뷰의 텍스트 크기를 코드로 조절해야될 때가 있다. 여러가지 방법이 있지만 아래 방법을 가장 많이 쓰는 것 같다. textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 22) 더보기
[Android] 키보드 위에 레이아웃, 버튼 올리기 자주 작업할 때는 적용 시키기가 쉽지만,, 한동안 작업을 하지 않다가, 막상 버튼을 키보드 위에 올리려고 하면, 가물가물... 먼저 적용하려고 하는 Activity의 Manifest 정보에 android:windowSoftInputMode="adjustResize" 를 추가한다. 이 옵션은 키보드가 화면을 가렸을 때 현재 보여지는 화면의 크기로 리사이징을 할 것인지에 대한 값이다. 따라서 위의 옵션을 주게 되면 Activity 화면 크기 자체가 줄어들게 된다. 그리고 적용시킬 레이아웃 또는 버튼에 아래와 같이 추가하면 된다. RelativeLayout에서 alignParentBottom을 주면 키보드 위로 올라오게 배치할 수 있었지만.. 가끔 안먹을 때가 있어서...고민을 많이 하게 되는데. 위와 같이 .. 더보기
[Android] 클릭 이벤트를 뒤에 배치된 레이아웃에 전달되지 않게 하기 느낌은 아는데 제목을 정하기가 쉽지 않군요. 레이아웃을 작업할 때 뒤에 배치된 버튼이나 레이아웃에 대한 클릭이벤트를 무시하고 싶을 때가 있습니다. 화면 전체를 덮는 레이아웃을 만들어서 하위에 있는 이벤트를 막는 경우도 있구요. 아래의 코드를 화면 전체를 덮는 최 상단 레이아웃에 적용 시키면, 하위에 있는 레이아웃에 클릭이벤트가 전달되지 않습니다. mTopLayout.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return true; } }); 위의 코드에서 핵심은 return 값을 true 주는 것인데 Developer 에는 아래 와 같이 적혀 있습니다... 더보기
[Android] 앱 캐시 제거(Webview 등) 오랜만에 글쓰네요.. 프로젝트가 안정화 단계에 접어들다보니 포스팅할만한 내용이 없었네요. 하이브리드 앱을 제작하다보면 앱캐시로 인해 변경된 화면이 표시가 안되는 경우가 종종 있었는데요. 앱캐시를 확실하게 날릴 수 있는 코드입니다. /** * 앱 캐시를 가차없이 지운다. */ public static void clearApplicationCache(Context context, File file) { File dir = null; if (file == null) { dir = context.getCacheDir(); } else { dir = file; } if (dir == null) return; File[] children = dir.listFiles(); try { for (int i = 0; i .. 더보기