본문 바로가기

전체 글310

OkHttp Authenticator 보호되어 있는 글 입니다. 2024. 9. 5.
OkHttp Interceptor란 무엇일까? 어떻게 사용할 수 있지? 글로 들어가기 앞서이 글은 Square에서 제공하는 Interceptor 아티클을 번역한 것이며, 개인적인 주관에 의해 해석되고 살이 조금 덧붙여질 수 있습니다. Interceptor란?Interceptor는 네트워크 호출을 모니터링하거나, 고쳐쓰거나, 재시도할 수 있는 강력한 매커니즘입니다.예를 들어 공통적으로 보내줘야할 헤더가 있을 경우 Interceptor를 통해 모든 네트워크 호출에 포함시킬 수 있습니다. (링크) class LoggingInterceptor implements Interceptor { @Override public Response intercept(Interceptor.Chain chain) throws IOException { // 서버로 보내는 Request R.. 2024. 9. 3.
[Android Compose] enableEdgeToEdge()로 인한 시스템 영역 패딩 설정 방법 (WindowInsets) 현재 프로젝트를 새롭게 생성하면 기본적으로 enableEdgeToEdge()가 적용되어 있습니다.xml 기반으로 생성될 때는 다음 코드로 인해 기본적으로 패딩이 설정됩니다.ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -> val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) insets} 하지만 Compose는 별다른 패딩을 설정해주지 않기 때문에 UI가 시스템 영역을 침범하는 모습을.. 2024. 6. 30.
[Android] Compose onGloballyPositioned - bounds 속성들 bounds 속성들 boundsInParent이름만 봤을 때 부모 컴포저블을 기준으로 위치가 잡힐 것으로 예상되는데 한번 확인해보겠습니다.자식 composable의 부모 content 영역에서의 경계 상자를 반환합니다. 여기에는 부모에 의해 수행된 모든 클리핑이 포함됩니다. 루트의 경우 경계 상자는 (0, 0) 위치에 배치되고 루트의 크기와 동일한 크기를 가집니다. boundsInRoot이 레이아웃의 루트 composable 내에서의 경계를 뜻합니다. boundsInWindowwindow의 기준점을 기준으로 해당 layout의 경계 이렇게 설명만 보면 Root랑 Window랑 크게 차이가 없는거 아니야? 라고 느껴질 수 있습니다.그래서 예제코드를 통해 값이 어떻게 변경되는지 확인해보고자 합니다.컴포넌트 .. 2024. 6. 30.
[Android] Material3 Color 속성 정리 배경디자인 시스템을 학습하다보니 ColorScheme에서 각 속성이 어떤 역할을 하는지 정확히 알고자 정리하게 되었습니다.  기본 개념Surface: 카드나 시트 같은 요소에 적용되는 배경색Primary, Secondary, Tertiary: 전경 요소들을 강조하거나 저감하기 위해 사용되는 강조 색상 역할Container: 버튼과 같은 전경 요소들을 채우는 색으로서 사용On: 이 용어로 시작하는 색상들은 페어를 이루는 부모 색상 위에 표시된 텍스트나 아이콘의 색상예를 들어 on primary는 primary fill color와 반대되는 색상으로 아이콘과 텍스트에 사용Variant: 이 용어로 끝나는 역할은 non-variant 쌍에 대한 더 낮은 강조 대안을 제공예를 들어 윤곽선 varient은 윤곽선.. 2024. 6. 29.
[Android] Compose 키보드 영역에 따른 패딩 적용 방법 (imePadding) imePadding이란?Compose에서 키보드 영역에 따라 패딩이 설정되도록 도와주는 설정입니다. 방법정답부터 빠르게 알려드리자면 다음 순서대로 적용해주시면 됩니다. 1. 먼저 키보드에 따라 화면이 반응하도록 변경하려면 windowSoftInputMode를 변경 2. 해당 UI에 imePadding() 붙이기Column( modifier = Modifier .fillMaxSize() .imePadding()) 3. Activity에 enableEdgeToEdge() 메소드가 붙어있는지 확인 만약 없다면 style에서 설정해줘야하기 때문에 편리하게 enableEdgeToEdge()를 붙여주는 것이 좋습니다 예제 코드상하단에 TextField와 버튼을 놓고 키보드가 올라왔을 .. 2024. 6. 27.
[Android] enableEdgeToEdge는 뭐하는 녀석이지? 배경언제부턴가 프로젝트를 생성하면 enableEdgeToEdge가 붙어있는 것을 확인할 수 있습니다.이 메소드와 최근 이슈가 있었기에 하나씩 정리해보려고 합니다!enableEdgeToEdge가 해주는 역할이전에는 더 넓은 화면 디스플레이를 사용하기 위해 WindowCompat.setDecorFitsSystemWindows(window, false)를 사용해줘야 했습니다. 또한 앱의 콘텐츠가 보이도록 시스템 표시줄의 색상을 변경해주는 작업도 필요했습니다. (공식 홈페이지)하지만 이제는 enableEdgeToEdge가 처음부터 설정해줍니다. enableEdgeToEdge 내부 동작주석엔 다음과 같이 설명되어 있습니다.기본 스타일은 시스템에서 대비를 강제 적용할 수 있는 경우 시스템 바를 투명 배경으로 설정합.. 2024. 6. 25.
[Android Compose] CompositionLocalOf는 언제 쓰는거지? Android Compose CompositionLocalCompositionLocalCompose에서 각 Composable 함수의 매개변수는 UI 트리를 통해 아래로 흐르는 구조입니다.이런 구조는 색상이나 유형 스타일과 같이 매우 자주 널리 사용되는 데이터의 경우에는 번거로울 수 있습니다.@Composablefun MyApp() { val colors = colors()}@Composablefun SomeTextLabel( labelText: String, colors: Color) { Text( text = labelText, color = colors.onPrimary )} 색상을 대부분의 컴포저블에 명시적 매개변수 종속 항목으로 전달할 필요가 .. 2024. 6. 23.
[Android] Compose PreviewParameter 어디에 쓰는거지? Compose에서는 PreviewParameter라는 Annotation이 존재합니다. (안드로이드 공식홈페이지) 내용은 공식 홈페이지에 자세히 나와있으니 간략하게 요약하자면 다음과 같습니다.제공된 데이터 요소당 하나의 미리보기가 렌더링되도록 해주는 기능 간단한 예제 코드로 사용법을 보여드리겠습니다 1. 우선 data class 혹은 원하시는 class를 작성합니다.data class BoxColor(val value: Color) 2. PreviewParameterProvider를 생성합니다.internal class BoxColorPreviewParameterProvider : PreviewParameterProvider { override val values = sequenceOf( .. 2024. 6. 20.