Notice
Recent Posts
Recent Comments
Link
«   2024/04   »
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
Tags
more
Archives
Today
Total
관리 메뉴

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 폴더 안에 만들어 줄거임!



  • 글꼴 추가
    • 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 단위에 곱해야 하는 배율임

 

https://developer.android.com/codelabs/kotlin-android-training-linear-layout?index=..%2F..android-kotlin-fundamentals&hl=ko#0 

 

Comments