달력

1

« 2021/1 »

  •  
  •  
  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  
  •  
  •  
  •  
2013. 3. 25. 20:12

Android 의 WebView pinch zoom 없애기 Android2013. 3. 25. 20:12

까먹을까봐 올린다;;

웹뷰의 onTouchEvent 를 Overriding 해서 처리한다.

@Override
 public boolean onTouchEvent(MotionEvent event) {

if (event.getPointerCount() > 1) {
   getSettings().setBuiltInZoomControls(true);
   getSettings().setSupportZoom(true);
  } else {
   getSettings().setBuiltInZoomControls(false);
   getSettings().setSupportZoom(false);
 }
  return super.onTouchEvent(event);
 }

Posted by maruldy

댓글을 달아 주세요

strings.xml 에 html tag 를 넣어서 리소스를 작성하다 보면, &lt &gt 등을 이용해서 처리하던 <. > 등 때문에

가독성이 심각하게 떨어져 보일 수 있다.

 

이를 위해서 CDATA 를 사용하면 가독성을 확보할 수 있다.


<string name="string_hello">&lt;/font&gt;&lt;font color="#535353"&gt;안녕하세요&lt;/font&gt;</string>

 

로 사용되던 작성법은 아래와 같은 방법으로 작성될 수도 있다.

 

<string name="string_hello"><![CDATA[

<font color="#535353">안녕하세요 %1$s</font>

]]></string>

 

들여쓰기는 팀의 convention 에 맞춰도 되고 딱히 없다면 본인이 보기 편한대로 하면 될 것이다.

 

Java 에서 위 resource 를 사용하는 법은 아래와 같다.

 

String string = getResources().getString(R.string.string_hello, "대영님"); 

helloTextView.setText(Html.fromHtml(string));

Posted by maruldy

댓글을 달아 주세요

2013. 2. 1. 16:36

Android 메모리 관리 링크 Android2013. 2. 1. 16:36

http://aroundck.tistory.com/378

 

까먹을까봐 ;;

Posted by maruldy

댓글을 달아 주세요

  1. 2013.04.16 05:04  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

2012. 9. 25. 11:32

Android WebView 속도 향상 Android2012. 9. 25. 11:32

LOAD_NO_CACHE 나 기타 많이 알려진 다른 방법으로도 속도 개선이 안된다면

webview.getSettings().setRenderPriority(RenderPriority.HIGH);

를 사용해봅시다.

Posted by maruldy

댓글을 달아 주세요

그동안 잘 써왔던, 하지만 메소드가 @hide 되어있어서 reflection 을 이용해서 사용해 왔던 WebView.SetEmbeddedTitleBar 메소드가 Jelly Bean 에서는 사라지고 없다.

하지만 Android Developer 사이트에 기고된 컬럼처럼 Backward Compatibility 가 되도록 구현해주자.

public void setEmbeddedTitleBar(WebView webView, View titlebar) {
    try {
        Method method = WebView.class.getMethod("setEmbeddedTitleBar", new Class[] {View.class});
        method.invoke(webView, titlebar);
    } catch (Exception ex) {
      webView.addView(titlebar,new AbsoluteLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT, 0, 0));

        ex.printStackTrace();
    }
}

Posted by maruldy

댓글을 달아 주세요

  1. lee 2013.03.07 10:57  댓글주소  수정/삭제  댓글쓰기

    덕분에 젤리빈에서 타이틀을 넣었습니다. 근데... 웹뷰와 겹쳐서 들어가네요... 이걸 해결할 방법이 없을 까요... 웹뷰 위에다 그려버리니... 음....

    • maruldy 2013.03.11 17:39 신고  댓글주소  수정/삭제

      안녕하세요, 혹시 본문 코드에 문제점이 있다면 Apache License 2.0 으로 공개된 아래 코드에서 한번 확인해 보시기 바랍니다.
      직접 테스트 해보고 수정해서 올리고 싶은데 업무시간이라 여의치가 않네요.. ^^; 양해 바랍니다.

      url 은 아래와 같습니다
      http://code.google.com/p/android-titlebar-webview/source/browse/trunk/TitleBarWebView.java?r=2

      private void setEmbeddedTitleBarJellyBean(View) 메소드를 확인해 보시면 됩니다.

삼성 런처에서만 된다.. -_-

 

Intent intent = new Intent("android.intent.action.BADGE_COUNT_UPDATE");

intent.putExtra("badge_count", 10);

intent.putExtra("badge_count_package_name", 패키지명);

intent.putExtra("badge_count_class_name", 클래스명);


sendBroadcast(intent);

 

Posted by maruldy

댓글을 달아 주세요

  1. 행인 2012.10.09 11:23  댓글주소  수정/삭제  댓글쓰기

    정보 감사합니다 ㅎ

ViewTreeObserver vto = view.getViewTreeObserver();

vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {

    @Override

    public boolean onPreDraw() {

        int width = view.getWidth();

        int height = view.getHeight();

        ViewTreeObserver vto = mImageView.getViewTreeObserver();

        vto.removeOnPreDrawListener(this);

        return false;

    }

});

Posted by maruldy

댓글을 달아 주세요

일전에, 공개되지 않은 WebView 의 Method 인 setEmbeddedTitleBar() 메소드를 사용하는 법을 알아다.

 

두가지 정도 내용을 더 추가하자면,

1. 화면 하단에 (-/+) 같은 줌 버튼이 생기는데, 이게 미관상 좋지 않다.

이 부분을 없애려면 Webiew 를 상속받아서 onTouchEvent 를 Overriding 하면 된다.

@Override
 public boolean onTouchEvent(MotionEvent motionEvent) {
  final int eventAction = motionEvent.getAction();
  if (eventAction == MotionEvent.ACTION_DOWN ||
   eventAction == MotionEvent.ACTION_POINTER_DOWN ||
   eventAction == MotionEvent.ACTION_POINTER_1_DOWN ||
   eventAction == MotionEvent.ACTION_POINTER_2_DOWN ||
   eventAction == MotionEvent.ACTION_POINTER_3_DOWN ||
   eventAction == MotionEvent.ACTION_MOVE) {
   if (motionEvent.getPointerCount() > 1) {
    getSettings().setBuiltInZoomControls(true);
    getSettings().setSupportZoom(true);
   } else {
    getSettings().setBuiltInZoomControls(false);
    getSettings().setSupportZoom(false);
   }
  }
  return super.onTouchEvent(motionEvent);
 }

 

2. TitleBar 를 포함한 WebView 의 영역과 별개의 영역에 Layout 을 구성하면, 해당 WebView 의 Zoom 등에 영향을 받지 않는다

 

이정도를 적용 시키니 한층 화면 보기가 좋아졌다.

 

Posted by maruldy

댓글을 달아 주세요

2012. 1. 17. 18:40

ScrollView 와 ListView 같이 쓰기. Android2012. 1. 17. 18:40


일반적으로 ListView 는 그 안에 들어가는 item 들의 갯수에 따라 크기가 결정된다.
그런데 ScrollView 가 그려지는 그 시점에 ListView 의 길이를 정확히 알수가 없다.
예를들면 아래와 같이 두개를 같이 쓰게 될 때, ScrollView 가 ListView 를 다 표현하지 못한다.

<ScrollView  .... attrs..>
    <LinearLayout ...attrs..>
        <기타등등 >
        <기타등등 >
        <ListView ... attrs />
    .....
</ ..... >


하지만 ListView 의 height 를 ListView 안에 Item 갯수 * 각 Item 높이 만큼 다시 그려준다면

ListView 안에 Scroll 이 들어가지 않고 ListView 자체가 늘어나므로,

ScrollView 안에 ListView 를 다 보여줄 수 있으며 이런 어려움을 매우 훌륭하게 극복할 수 있다.

Posted by maruldy

댓글을 달아 주세요

처음엔 처음엔 Adapter 를 만들어서 CheckBox 에 click listener 를 달아놓는 방식으로 접근 했는데

deleteItemCheckBox.setChecked(((ListView)parent).isItemChecked(position));
deleteItemCheckBox.setFocusable(false);
deleteItemCheckBox.setClickable(false);

를 이용해서 CheckBox 의 Checked 여부를 ListView 에서 관리하도록 처리 하니까 완전히 편하다.

단점(이라고불려야 하는지 맞나?)은, CheckBox 에 click listener 를 달았을 때에는
ListView 의 item 전 영역이 아닌, 정확히 CheckBox 를 클릭했을 때 Check 시키는 이벤트가 발생한 반면에,

ListView 가 Checked 여부를 관리하게 되었을 때에는 item 어느 영역을 클릭해도 CheckBox 가 클릭된다.
Posted by maruldy

댓글을 달아 주세요