yourginieus
LinearLayout, TextView, Scroll View, dp/sp 본문
Android/Android Kotlin 기초 실습 정리
LinearLayout, TextView, Scroll View, dp/sp
EOJIN 2022. 10. 25. 18:26- LinearLayout
- UI 요소를 수직(vertical) 또는 수평(horizontal) 으로 배치함
- android:orientation 속성을 vertical 또는 horizontal 로 지정하면 됨
- TextView
- text : 텍스트뷰 안에 넣을 내용
- textAfficance > textColor : 텍스트 색
- textAfficance > textSize : 텍스트 사이즈
- textAppearance > textAlignment : 텍스트 정렬
- 문자열을 res/values/strings.xml 파일에 추가하여 사용하는 게 좋음
<string name="name">Aleks Haecky</string>
- Dimension resource
- textSize에서 지정값(20sp)에서 Alt+Enter 누르면 팝업 메뉴에서 Dmension Resource를 추출함
- res/values/dimens.xml 에서도 확인 및 추가할 수 있음
<dimen name="text_size">20sp</dimen>
**만약 dimens.xml 파일이 아직 없다면, Android Studio가 res/values 폴더 안에 만들어 줄거임!
- Padding : 뷰의 안쪽 공간
- view의 크기에 포함됨
- android:padding 뷰의 네 모서리 모두에 대한 패딩을 지정합니다.
- android:paddingTop 는 상단 모서리의 패딩을 지정합니다.
- android:paddingBottom 는 하단 모서리의 패딩을 지정합니다.
- android:paddingStart 뷰의 "시작" 가장자리에 대한 패딩을 지정합니다.
- android:paddingEnd 뷰의 "끝" 가장자리에 대한 패딩을 지정합니다.
- android:paddingLeft 왼쪽 가장자리 패딩을 지정합니다.
- android:paddingRight 오른쪽 가장자리 패딩을 지정합니다.
- Margin : 뷰의 바깥쪽 공간
- android:layout_margin 뷰의 네 변 모두에 대한 여백을 지정합니다.
- android:layout_marginTop 이 뷰의 맨 위에 여분의 공간을 지정합니다.
- android:layout_marginBottom 는 이 뷰의 아래쪽 바깥쪽에 있는 공간을 지정합니다.
- android:layout_marginStart 는, 이 뷰의 「시작」측 밖에 있는 공간을 지정합니다.
- android:layout_marginEnd 는 이 뷰의 끝에 공간을 지정합니다.
- android:layout_marginLeft 는 이 뷰의 왼쪽에 공간을 지정합니다.
- android:layout_marginRight 는 이 뷰의 오른쪽에 공간을 지정합니다.
- 글꼴 추가
- Attributes pane에서, fontFamily 검색
- font Family 필드에서 드롭다운 화살표를 클릭하여 맨 아래로 내려가, More Fontes 선택
- Resoutces 다이얼로그에서 원하ㅡㄴ 글꼴 선택
- Add font to project 옵션버튼 선택
- OK 클릭
- res 폴더에 font 폴더가 생기게 되며, 내가 선택한 폰트 파일을 포함하고 있음
- Style 추가
- style은 뷰의 모양과 형식을 지정하는 속성 모음!
- 글꼴 색상, 크기, 배경색, 패딩, 마진 및 기타 일반적인 속성이 포함될 수 있음
- 스타일을 재사용하면 여러 뷰를 사용해도 프로그램이 일관적이게 보임
- 공통 속성을 하나로 유지할 수도 있음
- Component Tree에서 TextView를 오른쪽 클릭한 후, Refactor > Extract Style 선택
- Extract Android Style 다이얼로그에서 추출을 원하는 속성에 체크함
- 스타일 이름 필드에 원하는 이름 입력한 후 확인 클릭
- res/values 폴더의 styles.xml 파일 안에 저장됨
- 이후 TextView 안에서 style="@style/스타일이름" 으로 사용하면 됨
<style name="NameStyle">
<item name="android:layout_marginTop">@dimen/layout_margin</item>
<item name="android:fontFamily">@font/roboto</item>
<item name="android:paddingTop">@dimen/small_padding</item>
<item name="android:textColor">@android:color/black</item>
<item name="android:textSize">@dimen/text_size</item>
</style>
- Scroll View
- 스크롤뷰 안에 배치된 view hierarchy를 스크롤할 수 있게 하는 View Group
- 오직 하나의 자식 뷰만 포함할 수 있음
- 보통 LinearLayout 을 사용하며, 그 LinearLayout 안에 다른 뷰들을 추가하면 됨!
- 스크롤뷰의 width와 height는 match_parent로 보통 진행함!
다양한 픽셀 밀도(dp, sp)
- 픽셀 밀도의 편차를 고려하지 않으면 시스템이 이미지를 표시할 때 잘못된 크기로 표시할 수 있음
- 픽셀로 크기 및 거리를 정의하면 화면 크기에 따라 픽셀 밀도가 달라져서 같은 개수의 픽셀이라도 기기가 다르면 실제 크기가 달라질 수 있으므로 문제가 됨
- 따라서, 밀도가 서로 다른 화면에서 UI 표시 크기를 유지하려면 밀도 독립형 픽셀(dp)를 사용해야 함
- 1dp는 중밀도화면(160dpi,'기준'밀도) 의 1픽셀과 거의 동일한 가상 픽셀 단위
- Android는 이 값을 밀도마다 적합한 실제 픽셀 수로 변환 함
- 그러나 텍스트 크기를 정의할 때는 확장 가능 픽셀(sp)를 단위로 상요해야 함
- 단, 레이아웃 크기에는 sp를 사용하지 않아야 함
- sp는 기본적으로 dp와 같은 크기이지만, 사용자가 선호하는 텍스트 크기에 따라 조절 됨
- dp단위를 픽셀 단위로 변환
- px = dp * ( dpi / 160)
- 앱에서 사용자 손가락이 16픽셀 이상 이동하면 스크롤 또는 풀링 동작이 인식된다고 할 때, 기준 화면에서는 사용자가 손가락을 16 pixels / 160 dpi 만큼 이동해야 하지만 고밀도(240dpi) 화면에서는 16 pixels / 240 dpi 만큼 이동해야 하기 때문에 더 민감해 보임
- 따라서 코드에서 동작 임계값을 dp 단위로 표시한 후 픽셀로 변환해줘야 함
// The gesture threshold expressed in dp
private const val GESTURE_THRESHOLD_DP = 16.0f
...
private var mGestureThreshold: Int = 0
...
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Get the screen's density scale
val scale: Float = resources.displayMetrics.density
// Convert the dps to pixels, based on density scale
mGestureThreshold = (GESTURE_THRESHOLD_DP * scale + 0.5f).toInt()
// Use mGestureThreshold as a distance in pixels...
}
- DisplayMetrics.density 필드에서는 현재 픽셀 밀도에 따라 dp 단위를 픽셀로 변환하는 데 사용해야 하는 배율을 지정함
- 중밀도 화면에서는 1.0, 고밀도 화면에서는 1.5, 초고밀도 2.0, 저밀도 0.75
- 이 수치는 현재 화면에 관한 실제 픽셀 수를 구하기 위해 dp 단위에 곱해야 하는 배율임
'Android > Android Kotlin 기초 실습 정리' 카테고리의 다른 글
ConstraintLayout, Chain, setBackgroundColor/Resource, 리스트의 아이템에 click handler 적용 (0) | 2022.10.25 |
---|---|
User Interactivity : 사용자와 상호작용 - 키보드 보이기, 숨기기 (0) | 2022.10.25 |
Basic Activity Architecture, Launcher Icon 변경 (0) | 2022.10.25 |
setImageResources, tools, dependencies (0) | 2022.10.25 |
Activity, setOnClickListener(), Toast, 난수 표시 (0) | 2022.10.25 |
Comments