Jetpack Compose 시작 단계

독자 대상


안드로이드 개발을 조금 배웠지만, 제팩 컴포즈를 거의 시도하지 않은 엔지니어를 대상으로 한 글입니다.입문도 입문이야, 정말 첫걸음이야.
!
그나저나 젠은 이번이 처음이야.나는 앞으로 Compose 주위의 보도를 조금씩 쓰고 싶다.

컨텐트

  • 구축 환경, Android Studio 템플릿 응용 프로그램 만들기
  • 미리 보기 표시 방법
  • Color, Shape, Type 등을 관리하는 방법(Theme 함수)
  • Compose의 기본
  • Surface 함수에 대한 간단한 설명
  • Modifier의 간단한 설명
  • 환경 구조


    아래를 보는 것이 가장 좋다.
    https://developer.android.com/jetpack/compose/setup
    그럼에도 불구하고 나는 이번에 쓸 것들을 좀 더 간단하게 쓸 것이다.
    Android Studio 메뉴 File -> New Project -> Enpty Compose Activity 를 선택하고 Next 를 누릅니다.
    Enpty Compose Activity
    프로젝트를 만들기 위해 적당한 값을 입력하십시오.
    プロジェクト作成

    만들어진 소스


    이런 소스를 만들 수 있다.
    class MainActivity : ComponentActivity() {
      override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
          SampleComposeTheme {
            // A surface container using the 'background' color from the theme
            Surface(modifier = Modifier.fillMaxSize(), color = MaterialTheme.colors.background) {
              Greeting("Android")
            }
          }
        }
      }
    }
    
    @Composable
    fun Greeting(name: String) {
      Text(text = "Hello $name!")
    }
    
    @Preview(showBackground = true)
    @Composable
    fun DefaultPreview() {
      SampleComposeTheme {
        Greeting("Android")
      }
    }
    

    뷰 미리 보기


    Jetpack Compose에서는 애플리케이션을 장치에 설치하지 않더라도 Android Studio 미리 보기 화면에서 UI를 확인할 수 있습니다.여러 미리보기를 동시에 볼 수 있습니다.
    MainActivity.kt 파일을 열고 스플릿을 마우스 오른쪽 버튼으로 클릭하면 미리보기 화면이 표시됩니다.여기서 Build & Refresh를 누르면 미리보기 화면을 볼 수 있습니다.

    이것은 @Preview의 변형 함수의 결과를 보여 준다.현재의 미리보기는'Hello Android'와 같은 Text 보기만 보일 뿐, 전체적인 화면을 볼 수 있도록 다음과 같은 내용을 바꾸어 보세요.SampleComposeThemeGreeting() 함수로 이동합니다.
    class MainActivity : ComponentActivity() {
      override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
          Greeting("Android")
        }
      }
    }
    
    @Composable
    fun Greeting(name: String) {
      SampleComposeTheme {
        Surface(modifier = Modifier.fillMaxSize(), color = MaterialTheme.colors.background) {
          Text(text = "Hello $name!")
        }
      }
    }
    
    @Preview(showBackground = true)
    @Composable
    fun DefaultPreview() {
      Greeting("Android")
    }
    
    소스를 변경한 후 ① 버튼을 누르면 미리보기 화면에 반영됩니다.참고로 ②를 누르면 장치에 설치됩니다.①속도가 빠르기 때문에 기본적으로 디자인은 이렇게 설치하는 것이 좋다.

    참고로 ②왼쪽 아이콘은 상호작용 모드입니다.
    이 글은 처리하지 않지만 상호작용 모드는
    샌드박스 환경(다른 미리보기와 분리된 상태)에서 실행됩니다.요소를 클릭하거나 사용자를 입력하거나 미리보기에서 애니메이션을 재생할 수 있습니다.이 모드를 사용하면 여러 가지 호환 가능한 상태와 조작을 간단하게 테스트할 수 있습니다. 예를 들어 복선상자를 열고 닫는 것입니다.
    !
    상호작용 모드의 제한 사항
  • 네트워크에 접속할 수 없음
  • 파일에 액세스할 수 없음
  • 일부 Context API
  • 를 사용할 수 없습니다.
    여러 미리보기를 설명할 수 있습니다.
    예를 들어, 어두운 모드의 ON/OFF를 동시에 확인할 수 있습니다.
    @Preview(
      uiMode = Configuration.UI_MODE_NIGHT_NO,
      showBackground = true
    )
    @Composable
    fun DefaultPreview() {
      Greeting("Android")
    }
    
    @Preview(
      uiMode = Configuration.UI_MODE_NIGHT_YES,
      showBackground = true
    )
    @Composable
    fun DarkPreview() {
      Greeting("Android")
    }
    

    소스 설명


    기본적

  • @Composable 초대장이 있는 함수를 UI로 변환합니다.
  • onCreate() 내의 매개 변수setContent에서 반드시 @Composable의 함수를 지정해야 한다.
  • @Composable 초대장이 있는 함수에 매개 변수를 전달할 수 있습니다.
  • @Composable 초대장이 있는 함수에서 초대장이 있는 함수를 호출하여 UI의 수준을 구성합니다.이 계층 구조를 사용하면 복잡한 UI를 구현할 수 있습니다.
  • @Composable 초대가 있는 함수는 멱이다.같은 매개 변수를 가진 함수가 같은 결과를 되돌려줍니다.
  • @Composable 초대된 함수는 부작용이 없습니다.이 함수는 글로벌 변수와 Instan 변수 등을 변경할 수 없습니다.
  • SampleComposieTheeme 함수 정보


    이것도 단지 @Composable 함수일 뿐이다.@Composable 함수MaterialTheme.
    Compose에서 이러한 함수를 만드는 것은 Color, Shape, Type 등을 관리하는 것이 일반적인 수단이다.
    private val DarkColorPalette = darkColors(
      primary = Purple200,
      primaryVariant = Purple700,
      secondary = Teal200
    )
    
    private val LightColorPalette = lightColors(
      primary = Purple500,
      primaryVariant = Purple700,
      secondary = Teal200
    
      /* Other default colors to override
        background = Color.White,
        surface = Color.White,
        onPrimary = Color.White,
        onSecondary = Color.Black,
        onBackground = Color.Black,
        onSurface = Color.Black,
        */
    )
    
    @Composable
    fun SampleComposeTheme(
      darkTheme: Boolean = isSystemInDarkTheme(),
      content: @Composable () -> Unit
    ) {
      val colors = if (darkTheme) {
        DarkColorPalette
      } else {
        LightColorPalette
      }
    
      MaterialTheme(
        colors = colors,
        typography = Typography,
        shapes = Shapes,
        content = content
      )
    }
    

    서피스 함수 について


    는 재료 설계에서 서피스를 나타내는 함수입니다.
    재료 디자인의 중심 은유.Surface는 높이가 있어 다른 Surface와의 시각적 관계, 그리고 Surface의 그림자를 관리한다.
    재료 설계에서 Surface의 자세한 내용은 다음 URL에 기재되어 있습니다.
    https://material.io/design/environment/surfaces.html#material-environment
    Surface의 역할은 문서에서 다음과 같습니다.
  • Clipping: Surface clips its children to the shape specified by shape
  • Elevation: Surface draws a shadow to represent depth, where elevation represents the depth of this surface. If the passed shape is concave the shadow will not be drawn on Android versions less than 10.
  • Borders: If shape has a border, then it will also be drawn.
  • Background: Surface fills the shape specified by shape with the color. If color is Colors.surface, the ElevationOverlay from LocalElevationOverlay will be used to apply an overlay - by default this will only occur in dark theme. The color of the overlay depends on the elevation of this Surface, and the LocalAbsoluteElevation set by any parent surfaces. This ensures that a Surface never appears to have a lower elevation overlay than its ancestors, by summing the elevation of all previous Surfaces.
  • Content color: Surface uses contentColor to specify a preferred color for the content of this surface - this is used by the Text and Icon components as a default color.
  • Blocking touch propagation behind the surface.
  • modifier 정보

    @Composable 함수 (= 이후 가용성) 는 거의 모두modifier 파라미터를 가지고 있다.
    일본어로 쓰면 수식자.코리페 장식이 가능합니다.
    아래와 같이 할 수 있다.
  • 크기 조절, 배치, 작업 및 모양 변경
  • 사용자 보조 태그 등 추가 정보
  • 사용자 입력 처리
  • 클릭, 스크롤, 드래그, 줌 등 높은 수준의 작업 추가
  • 컴포넌트
    이번에는 @Composable로 기술되어 있기 때문에 Surface(modifier = Modifier.fillMaxSize(), color = MaterialTheme.colors.background)에 따라 모든 종횡용 서브레이아웃을 매립한다.
    !
    modifier의 순서를 지정하는 것이 중요합니다.예컨대fillMaxSize()패딩도 클릭 구역에 있습니다.Modifier.clickable(onClick = onClick).padding(padding) 클립 영역에는 패딩이 포함되지 않습니다.

    총결산


    간단한 소스지만 하나하나 읽어보면 많은 걸 배울 수 있을 거예요.
    우선 기본을 간단하게 기억하고 각 요소에 조금씩 깊이 들어가면 더욱 잘 기억할 수 있다.
    이 보도의 코드에서 본 장점은
  • UI는 코드로 작성할 수도 있음(XML 불필요)
  • 여러 미리보기가 표시됩니다.디바이스에 설치할 필요 없이 빠른 속도
  • 간단한 암흑 모드 및 Theme 설정 지원
  • 그리고 경험을 통해 알게 된 장점으로
  • UI는 함수로 분할할 수 있습니다.작게 고려하여 층층이 조립
  • UI는 부작용이 없는 幂 등이기 때문에 간단하게 고려할 수 있다
  • 내 생각엔 그렇지?
    이 보도를 나는 모른다. 이외에
  • UI에 임의로 값 변경 사항 반영
    이러한 선언적 UI는 매우 큰 이점을 제공합니다.
  • 그나저나 Flutter와 SwiftUI 등 선언적인 UI 제품의 특징이다.
    이 기사를 계기로 Jetpack Compose에 사람이 늘었으면 좋겠다.
    다음에도 초보자를 위한 기사를 쓰고 싶어요.

    좋은 웹페이지 즐겨찾기