안드로이드 체크박스 가운데 정렬 - andeuloideu chekeubagseu gaunde jeonglyeol

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

안드로이드에서 checkbox를 사용할 때 주의점이 있다. Check 이미지와 text의 간격을 조정하기 위해서는 paddingLeft를 사용하는데, XML에서 사용하면 API 16 이하에서는 동작하지 않는다. ( API 17 : 젤리빈 에서 수정되었다. )

<CheckBox

android:id="@+id/twitter_connect_checkbox"

android:button="@drawable/ selector_common_checkbox"

android:layout_alignParentLeft="true"

android:layout_marginLeft="10dp"

android:paddingLeft="5dp"

android:text="@string/some_text "/>

android의 버전별로 호환성을 유지하기 위해서는, 위의 paddingLeft XML에서는 빼고 코드로 처리하는 것이 바람직하다.

finalfloat scale = getResources().getDisplayMetrics().density;

checkBox.setPadding(checkBox.getPaddingLeft() + (int)(30.0f * scale + 0.5f),

checkBox.getPaddingTop(),

checkBox.getPaddingRight(),

checkBox.getPaddingBottom());

다른 방법으로는 drawableLeft 사용하여 이미지를 표시하고, 이미지의 간격 조정은 drawablePadding으로, 텍스트의 간격 조정은 paddingLeft 등으로 처리하는 것이다.

아래는 checkbox 대신 ToggleButton으로 변경하여 처리한 방법이다.

<ToggleButton

android:id="@+id/twitter_connect_checkbox"

android:drawableLeft="@drawable/ selector_common_checkbox"

android:drawablePadding="5dp"

android:layout_alignParentLeft="true"

android:layout_marginLeft="10dp"

android:paddingLeft="5dp"

android:text="@string/some_text "/>

drawableLeft, drawableRight, drawableTop, drawableBottom 등으로 component의 원하는 위치에 이미지를 설정할수 있다.  drawablePadding 값은 컨트롤 내부에서 이미지의 간격을 조정하는 값이다. paddingLeft는 이미지와 텍스트사이의 간격을 설정한다.

drawableXXX 기능은 TextView에 있는 기능으로 TextView parent로 하는 Button 계열의 컨트롤에서는 모두 사용가능한 방법이다. CheckBox의 상속 구조는 아래와 같다.

CheckBox -> CompoundButton -> Button -> TextView -> View

CheckBox ToggleButton interface가 상당히 유사해서 대부분 서로 대체해서 사용할수 있으므로 checkBox의 에러가 android 4.2에서 수정되었으므로 imagetext를 표시해야 하는 부분에서 checkbox 대신에 ToggleButton을 사용하길 권장한다.

( 안드로이드는 TextView에 참 많은 기능이 들어 있다. )

일반적인 프로그래밍 언어에서 화면에 컨트롤을 배치할 때 제공하는 정렬 기능을 안드로이드에서도 그대로 사용할 수 있습니다. 이 때 사용하는 용어가 안드로이드에서는 조금 다른 것을 볼 수 있는데 일반적인 정렬(align)은 순서대로 놓여 지다는 의미로 이해할 수 있으며, 안드로이드에서 사용하는 배치(gravity)는 어느 쪽에 무게 중심을 놓은 것인가의 의미로 이해할 수 있습니다. 하지만 똑같이 생각해도 상관없습니다. 레이아웃에서 정렬 기능이 필요한 경우는 다음과 같이 두 가지로 나눌 수 있습니다.

정렬 속성 

설명 

 layout_gravity

부모 컨테이너의 여유 공간에 뷰가 모두 채워지지 않아 여유 공간 안에서 뷰를 정렬할 때 

 gravity

뷰에서 화면에 표시하는 내용물을 정렬할 때(텍스트뷰의 경우, 내용물은 글자가 되고 이미지뷰의 경우 내용물은 이미지가 됨) 

먼저 부모 컨테이너의 여유 공간에 뷰가 모두 채워지지 않을 경우에 사용하는 layout_gravity는 뷰의 layout_width 나 layout_height 속성을 wrap_content로 할 경우에 같이 사용할 수 있습니다. 예를 들어, 세로 방향으로 설정된 리니어 레이아웃에 추가된 버튼들의 layout_width 속성을 wrap_content로 하게 되면 각각의 버튼들은 한 줄에 한 개씩 추가되면서 글자가 보이는 만큼의 크기로만 보이므로 나머지 가로 공간은 여유 공간으로 남게 됩니다. 안드로이드는 이렇게 여유 공간이 있을 경우 디폴트로 왼쪽 정렬을 하게되는데 layout_gravity 속성을 직접 설정하게 되면 중앙 또는 오른쪽 정렬을 할 수 있습니다.

예제를 보도록 하겠습니다.

gravity.xml 

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:orientation="vertical"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context=".MainActivity" >

    <Button

        android:id="@+id/button01"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_gravity="left"

        android:text="버튼1" />

    <Button

        android:id="@+id/button02"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_gravity="center"

        android:text="버튼2" />

    <Button

        android:id="@+id/button03"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_gravity="right"

        android:text="버튼3" />

</LinearLayout>

실행을 해보면 결과는 다음과 같습니다.

뷰에 보이는 내용물을 정렬하는 경우에는 gravity 속성을 사용합니다. gravity 속성은 뷰가 화면에서 차지하는 영역이 충분히 큰 경우에 생기는 여유 공간 안에서 어떻게 정렬할 것인지를 결정합니다. gravity가 적용될 수 있는 대표적인 내용물로는 텍스트뷰 안에 표시되는 텍스트나 이미지뷰에 표시되는 이미지를 들 수 있습니다. gravity 속성에 넣을 수 있는 값들은 layout_gravity와 같으며, 필요한 경우에는 '|' 연산자를 이용해 여러 개의 값을 같이 설정할 수도 있습니다. 이 때 주의할 점은 '|' 연산자 양쪽에 공백이 없어야 한다는 점입니다.

다음은 하나의 텍스트뷰를 화면 전체에 채운 후 그 안에 표시되는 텍스트를 왼쪽 상단, 중앙, 그리고 오른쪽 하단에 표시할 경우에 사용되는 XML 레이아웃으로 각각 'left|top', 'center', 'right|bottom' 값이 설정되었습니다. 예제를 보도록 하겠습니다.

<TextView

        android:id="@+id/button01"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:gravity="left|top"

        android:text="left|top" /> 

안드로이드 체크박스 가운데 정렬 - andeuloideu chekeubagseu gaunde jeonglyeol


 <TextView

        android:id="@+id/button02"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:gravity="center_horizontal|center_vertical"

        android:text="center" />

<TextView

        android:id="@+id/button03"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:gravity="right|bottom"

        android:text="right|bottom" /> 

gravity 속성으로 지정할 수 있는 값으로는 위와 같이 대표적인 경우 이외에도 여러 가지가 있으며 각각의 값에 대한 설명은 다음과 같습니다.

정렬 속성값 

설 명 

 top

 대상 객체를 위쪽 끝에 배치하기 

 bottom

대상 객체를 아래쪽 끝에 배치하기하기 

 left

대상 객체를 왼쪽 끝에 배치하기 

 right

대상 객체를 오른쪽 끝에 배치하기 

 center_vertical

대상 객체를 수직 방향의 중앙에 배치하기 

 center_horizontal

대상 객체를 수평 방향의 중앙에 배치하기 

 fill_vertical

대상 객체를 수직 방향으로 여유 공간만큼 확대하여 채우기 

 fill_horizontal

대상 객체를 수평 방향으로 여유 공간만큼 확대하여 채우기 

 center

대상 객체를 수직 방향과 수평 방향의 중앙아 배치하기 

 fill

대상 객체를 수직 방향과 수평 방향으로 여유 공간만큼 확대하여 채우기 

 clip_vertical

-대상 객체의 상하 길이가 여유 공간보다 클 경우에 남는 부분을 잘라내기

-top|clip_vertical 로 설정한 경우 아래쪽에 남는 부분 잘라내기

-bottom|clip_vertical 로 설정한 경우 위쪽에 남는 부분 잘라내기

-center_vertical|clip_vertical로 설정한 경우 위쪽과 아래쪽에 남는 부분 잘라내기 

 clip_horizontal

-대상 객체의 좌우 길이가 여유 공간보다 클 경우에 남는 부분을 잘라내기

-right|clip_horizontal 로 설정한 경우 왼쪽에 남는 부분 잘라내기

-left|clip_horizontal 로 설정한 경우 오른쪽에 남는 부분 잘라내기

-center_horizontal|clip_horizontal로 설정한 경우 왼쪽과 오른쪽에 남는 부분 잘라내기 

이것으로 gravity, layout_gravity 설명을 마치도록 하겠습니다.

도움이 되셨다면 손가락 한번 꾸~욱 눌러주시면 감사하겠습니다.^^