setBackgroundResource로 인해 Padding이 무효화됨, settextsize

setBackground를 통해 9 patch 그림을 설정하면 padding이 재설정됩니다.이 때 setBackground를 사용하기 전에 getPadding 방법을 사용해서 리셋되지 않은padding을 가져오고 setBackground를 호출한 후에 코드로Padding을 다시 설정해야 합니다.

    /**
     *      background    padding  
     * @param rl
     */
    private void setRlPadding(RelativeLayout rl) {
        int top = rl.getPaddingTop();
        int bottom = rl.getPaddingBottom();
        int left = rl.getPaddingLeft();
        int right = rl.getPaddingRight();
        rl.setBackgroundResource(R.drawable.hive_journey_bg);
        rl.setPadding(left,top,right,bottom);
    }

배경그림이 9.9일 때만 이런 상황이 나타나고 다른 때는 만나지 않는다.
그리고 작은 디테일을 여기에 기록하자면, 많은 학생들이 TextView의 setTextSize 방법을 통해 설정한 글씨체 크기가 항상 자기가 생각하는 것과 다르다는 것을 발견했다.왜냐하면 settextSize의 단위는 기본적으로 dp이기 때문이다. 이때 가장 먼저 생각한 방법은 바로 setTextSize(10)이라고 써서 죽는 것이다. 그러나 이것은 전체 응용 프로그램의 일반적인 글씨체와 설정하는 데 문제가 된다. 만약에 글씨체의 크기를 바꾸려고 한다면 이textview는 쉽게 빠질 수 있다.그래서 우리는 이 글꼴의 크기도 설정 파일에 넣고 싶어서 이 방법을 사용해야 한다
titleTv.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.hive_textsize_1));

이 방법의 첫 번째 매개 변수는 dp나 px 같은 이 사이즈의 유형을 규정하는 것이다.관건은 두 번째 매개 변수를 통과하는 데 있다.
getResources().getDimension(R.dimen.hive_textsize_1)

이 방법으로 얻은 사이즈는 사실 시스템이 변환한 것이다. 만약 우리가 설정 파일에 이렇게 썼다면
<dimen name="hive_textsize_1">16sp</dimen>
.getResources 방법을 통해 얻은 크기는 화면 밀도에 따라 환산된 것이기 때문에 글꼴이 정상적으로 보이려면 크기의 종류를 px로 설정해야 합니다.물론 그들이 정의한 단위가 px라면 이곳은 자연히 바뀌지 않을 것이다.

좋은 웹페이지 즐겨찾기