월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결모던 안드로이드 - Jetpack Compose 입문
구글맵강의중에서 ..
설날을 맞이하신 강사님 새해에도늘 건강하시고 부자되세요 ^^ 프로젝트폴더에서 New >> Fragment >> Google Map Fragment 를 선택하고 Fragment Name 을 MapsFragment 로 해서 Finish 버튼을 누르면프로젝트폴더내에 MapsFragment.kt 파일과res/layout 폴더내에 fragment_maps.xml 파일은 생성이 되나res/values 폴더내에 google_maps_api.xml 파일은 생성되지 않습니다 그리고 관련파일들을 실행하여도 오류는 없으나구글맵이 나타나지 않고 빈화면만 뜹니다 git 에 파일들을 올려두었습니다https://github.com/dongguntechnology/GoogleMap
- 미해결모던 안드로이드 - Jetpack Compose 입문
drawCircle( color = Color.... 부분에서 빨간줄이 ...
강사님의 노고에 다시한번 감사드리며질문드립니다 TiltScreen 부분의 Color.BlackColor.Green부분에 빨간줄이 생기는데 이유가 뭘까요 import android.app.Application import android.content.Context import android.graphics.Color import android.hardware.Sensor import android.hardware.SensorEvent import android.hardware.SensorEventListener import android.hardware.SensorManager import android.os.Bundle import android.util.Log import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.Canvas import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.runtime.Composable import androidx.compose.runtime.State import androidx.compose.runtime.mutableStateOf import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.drawscope.Stroke import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.LifecycleOwner import com.dongguntech.copose_tiltsensor.ui.theme.Copose_TiltSensorTheme class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { Copose_TiltSensorTheme { TiltScreen() } } } } class MainViewModel(application: Application) : AndroidViewModel(application), SensorEventListener, LifecycleEventObserver { private val _value0 = mutableStateOf(0f) val x: State<Float> = _value0 private val _value1 = mutableStateOf(0f) val y: State<Float> = _value1 private val sensorManager by lazy { application.getSystemService(Context.SENSOR_SERVICE) as SensorManager } fun registerSensor() { sensorManager.registerListener( this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL // 센서의 작동주기 ) } private fun unregisterSensor() { sensorManager.unregisterListener(this) } override fun onSensorChanged(event: SensorEvent?) { event?.let { Log.d( "MainViewModel", "onSensorChanged x: ${event.values[0]}, y: ${event.values[1]}, z: ${event.values[2]}" ) _value0.value = event.values[0] // x 값 _value1.value = event.values[1] // y 값 } } override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) { } override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) { if (event == Lifecycle.Event.ON_RESUME) { registerSensor() } else if (event == Lifecycle.Event.ON_PAUSE) { unregisterSensor() } } } @Composable fun TiltScreen(x: Float, y: Float) { val yCoord = x * 20 val xCoord = y * 20 Canvas(modifier = Modifier.fillMaxSize()) { // 원의 중심 val centerX = size.width / 2 val centerY = size.height / 2 // 바깥 원 drawCircle( color = Color.Black, radius = 100f, center = Offset(centerX, centerY), style = Stroke() ) // 녹색 원 drawCircle( color = Color.Green, radius = 100f, center = Offset(xCoord + centerX, yCoord + centerY), ) // 가운데 십자가 drawLine( color = Color.Black, start = Offset(centerX - 20, centerY), end = Offset(centerX + 20, centerY) ) drawLine( color = Color.Black, start = Offset(centerX, centerY - 20), end = Offset(centerX, centerY + 20) ) } }
- 미해결모던 안드로이드 - Jetpack Compose 입문
val scaffoldState = rememberScaffoldState() 에서 빨간줄이 생기네요
늘 수고많으신 강사님의 노고에 감사드립니다아래 코드중 val scaffoldState = rememberScaffoldState() 에서 빨간줄이 생기네요 class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { val viewModel = viewModel<MainViewModel>() HomeScreen(viewModel = viewModel) } } } @OptIn(ExperimentalMaterial3Api::class) @Composable fun HomeScreen(viewModel: MainViewModel) { val focusManager = LocalFocusManager.current val (inputUrl, setUrl) = rememberSaveable { mutableStateOf("https://www.google.com") } val scaffoldState = rememberScaffoldState() Scaffold ( topBar = { TopAppBar( title = { Text("나의 웹브라우져")}, actions = { IconButton(onClick = { viewModel.undo() }){ Icon( imageVector = Icons.Default.ArrowBack, contentDescription = "back", tint = Color.Black ) } IconButton(onClick = { viewModel.redo() }){ Icon( imageVector = Icons.Default.ArrowForward, contentDescription = "forward", tint = Color.Black ) } } ) } ) { paddingValues -> Column( modifier = Modifier .padding(16.dp) .fillMaxSize() ) { OutlinedTextField( value = inputUrl, onValueChange = setUrl, label = { Text("https://")}, modifier = Modifier .padding(paddingValues) .fillMaxWidth(), keyboardOptions = KeyboardOptions(imeAction = ImeAction.Search), keyboardActions = KeyboardActions(onSearch = { viewModel.url.value = inputUrl focusManager.clearFocus() }), ) Spacer(modifier = Modifier.height(16.dp)) MyWebView(viewModel = viewModel) } } } @Composable fun MyWebView(viewModel: MainViewModel) { val scope = rememberCoroutineScope() AndroidView( modifier = Modifier.fillMaxSize(), factory = { WebView(it).apply { settings.javaScriptEnabled = true webViewClient = WebViewClient() loadUrl("https://google.com") } }, update = { webView -> webView.loadUrl(viewModel.url.value) scope.launch{ viewModel.undoSharedFlow.collectLatest { if(webView.canGoBack()) { webView.goBack() } } } scope.launch{ viewModel.redoSharedFlow.collectLatest { if(webView.canGoForward()) { webView.goForward() } } } }, )
- 미해결모던 안드로이드 - Jetpack Compose 입문
나만의 웹브라우져 02 코드실행시 에뮬레이터에 따라
Galaxy Nexus API 34 일 경우는 정상적으로 실행되나Pixel 7 Pro APi 34 일 경우는 실행중에 에뮬레이터가 사라집니다 class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { HomeScreen() } } } @OptIn(ExperimentalMaterial3Api::class) @Composable fun HomeScreen() { Scaffold ( topBar = { TopAppBar( title = { Text("")}, actions = { IconButton(onClick = { }){ Icon( imageVector = Icons.Default.ArrowBack, contentDescription = "back", tint = Color.White ) } IconButton(onClick = { }){ Icon( imageVector = Icons.Default.ArrowForward, contentDescription = "forward", tint = Color.White ) } } ) } ) { paddingValues -> Column( modifier = Modifier .padding(16.dp) .fillMaxSize() ) { OutlinedTextField( value = "", onValueChange = {}, label = { Text("https://")}, modifier = Modifier .padding(paddingValues) .fillMaxWidth(), keyboardOptions = KeyboardOptions(imeAction = ImeAction.Search), keyboardActions = KeyboardActions(onSearch = {}), ) Spacer(modifier = Modifier.height(16.dp)) MyWebView() } } } @Composable fun MyWebView() { AndroidView( modifier = Modifier.fillMaxSize(), factory = { WebView(it).apply { settings.javaScriptEnabled = true webViewClient = WebViewClient() loadUrl("https://google.com") } }, update = {}, ) }
- 미해결모던 안드로이드 - Jetpack Compose 입문
나만의 웹브라우져 01 코딩 후 실행하면 아래와 같은 오류가 뜨네요
We recommend using a newer Android Gradle plugin to use compileSdk = 34 This Android Gradle plugin (8.0.2) was tested up to compileSdk = 33. You are strongly encouraged to update your project to use a newer Android Gradle plugin that has been tested with compileSdk = 34. If you are already using the latest version of the Android Gradle plugin, you may need to wait until a newer version with support for compileSdk = 34 is available. To suppress this warning, add/update android.suppressUnsupportedCompileSdk=34 to this project's gradle.properties. 안드로이드 스튜디오버젼이 강사님과 달라 아직 헤메고 있습니다MainActivity.ktimport android.os.Bundle import android.webkit.WebView import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ArrowBack import androidx.compose.material.icons.filled.ArrowForward import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.unit.dp import androidx.compose.ui.viewinterop.AndroidView class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { HomeScreen() } } } @OptIn(ExperimentalMaterial3Api::class) @Composable fun HomeScreen() { Scaffold ( topBar = { TopAppBar( title = { Text("")}, actions = { IconButton(onClick = { }){ Icon( imageVector = Icons.Default.ArrowBack, contentDescription = "back", tint = Color.White ) } IconButton(onClick = { }){ Icon( imageVector = Icons.Default.ArrowForward, contentDescription = "forward", tint = Color.White ) } } ) } ) { paddingValues -> OutlinedTextField( value = "", onValueChange = {}, label = { Text("https://")}, modifier = Modifier .padding(paddingValues) .fillMaxWidth(), keyboardOptions = KeyboardOptions(imeAction = ImeAction.Search), keyboardActions = KeyboardActions(onSearch = {}), ) Spacer(modifier = Modifier.height(16.dp)) MyWebView() } } @Composable fun MyWebView() { AndroidView( modifier = Modifier.fillMaxSize(), factory = { WebView(it).apply { loadUrl("https://google.com") } }, update = {}, ) } build.gradle(Project)plugins { id 'com.android.application' version '8.0.2' apply false id 'com.android.library' version '8.0.2' apply false id 'org.jetbrains.kotlin.android' version '1.7.20' apply false } build.gradle(Module :app)plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android' } android { namespace 'com.dongguntech.compose_mywebbrowser' compileSdk 34 defaultConfig { applicationId "com.dongguntech.compose_mywebbrowser" minSdk 26 targetSdk 34 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { useSupportLibrary true } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = '1.8.10' } buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion '1.4.3' } packagingOptions { resources { excludes += '/META-INF/{AL2.0,LGPL2.1}' } } } dependencies { var lifecycle_version = "2.5.1" // 2.6.2 버젼은 오류가 남 var arch_version = "2.1.0" // ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version") // ViewModel utilities for Compose implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycle_version") // LiveData implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version") // Lifecycles only (without ViewModel or LiveData) implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version") // Saved state module for ViewModel implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version") // alternately - if using Java8, use the following instead of lifecycle-compiler implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version") // optional - helpers for implementing LifecycleOwner in a Service implementation("androidx.lifecycle:lifecycle-service:$lifecycle_version") // optional - ProcessLifecycleOwner provides a lifecycle for the whole application process implementation("androidx.lifecycle:lifecycle-process:$lifecycle_version") // optional - ReactiveStreams support for LiveData implementation("androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version") // optional - Test helpers for LiveData testImplementation("androidx.arch.core:core-testing:2.2.0:78") // optional - Test helpers for Lifecycle runtime testImplementation ("androidx.lifecycle:lifecycle-runtime-testing:$lifecycle_version") implementation "androidx.compose.animation:animation:1.5.4" implementation "androidx.compose.foundation:foundation:1.5.4" implementation "androidx.compose.material:material:1.5.4" implementation "androidx.compose.material3:material3:1.1.2" implementation "androidx.compose.runtime:runtime:1.5.4" implementation "androidx.compose.ui:ui:1.5.4" implementation 'androidx.compose.ui:ui-graphics' implementation 'androidx.compose.ui:ui-tooling-preview' implementation 'androidx.core:core-ktx:1.12.0' implementation platform('org.jetbrains.kotlin:kotlin-bom:1.8.0') implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.6.2' implementation 'androidx.activity:activity-compose:1.8.1' implementation "androidx.wear.compose:compose-foundation:1.2.1" implementation "androidx.wear.compose:compose-material:1.2.1" implementation "androidx.wear.compose:compose-navigation:1.2.1" debugImplementation 'androidx.compose.ui:ui-tooling' debugImplementation 'androidx.compose.ui:ui-test-manifest' implementation platform('androidx.compose:compose-bom:2022.10.00') testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' androidTestImplementation platform('androidx.compose:compose-bom:2022.10.00') androidTestImplementation 'androidx.compose.ui:ui-test-junit4' } 참고로 제가 사용중인 안드로이드 스튜디오버젼은Android Studio Flamingo | 2022.2.1 Patch 2입니다
- 미해결모던 안드로이드 - Jetpack Compose 입문
비만도계산기 로직작성 에서 문제가 발생했어요 ^^
강사님 해당 프로젝트를 실행하니 에뮬화면이 검게 변하면서아무것도 보이지 않습니다제가 어떤 부분이 잘못 코딩하였는지 ..... 구글드라이브에 해당 프로젝트를 올려두었습니다 https://drive.google.com/file/d/15GTTot8jci11xvK1OFpTiOVw2HYTKOZ4/view?usp=drive_link
- 미해결모던 안드로이드 - Jetpack Compose 입문
viewModel() 오류 추가질문입니다
dependencies { implementation("androidx.core:core-ktx:1.9.0") implementation("androidx.lifecycle:lifecycle-viewmodel-compose-ktx:2.6.2") implementation("androidx.lifecycle:lifecycle-runtime-compose:2.6.2") implementation("androidx.activity:activity-compose:1.8.0") implementation(platform("androidx.compose:compose-bom:2023.03.00")) implementation("androidx.compose.ui:ui") implementation("androidx.compose.ui:ui-graphics") implementation("androidx.compose.ui:ui-tooling-preview") implementation("androidx.compose.material3:material3") testImplementation("junit:junit:4.13.2") androidTestImplementation("androidx.test.ext:junit:1.1.5") androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") androidTestImplementation(platform("androidx.compose:compose-bom:2023.03.00")) androidTestImplementation("androidx.compose.ui:ui-test-junit4") debugImplementation("androidx.compose.ui:ui-tooling") debugImplementation("androidx.compose.ui:ui-test-manifest") }위와 같이 build.gradle.kts 파일내용을 변경한 후 아래아 같이 코드를 작성하면 34번줄 viewModel() 에서 오류가 발생합니다 또 viewModel() 에서 Alt+Enter 키를 누르면 아래처럼여러개의 항목을 선택하는 창이 뜨는데 이중 어느것을 선택해야 하는지 ...
- 미해결모던 안드로이드 - Jetpack Compose 입문
viewModel: MainViewModel = viewModel() 에 오류있습니다
39번줄 = viewModel() 와 48번줄 .observeAsState("LiveData") 에서 빨간줄이 생기고 실행하면 아래 오류가 발생합니다수고많으신 강사님 늘 건강하시고 부자되세요
- 미해결모던 안드로이드 - Jetpack Compose 입문
AAR metadata 관련오류발생
class MainViewModel : ViewModel() { val data = mutableStateOf("Hello") } class MainActivity : ComponentActivity() { private val viewModel by viewModels<MainViewModel>() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { Column( modifier = Modifier.fillMaxSize(), verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally ) { Text( viewModel.data.value, fontSize = 30.sp ) Button(onClick = { viewModel.data.value = "World" }) { Text("변경") } } } } }강사님 늘 건강하시고 부자되세요 위 코드를 실행하니 아래오류가 발생하네요 3 issues were found when checking AAR metadata:
- 미해결모던 안드로이드 - Jetpack Compose 입문
모바일화면에 키보드가 사라지지 않아
class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { val navController = rememberNavController() // Composable 의 backstack 추적 & 각 Screen 들의 state을 관리함 NavHost( // navigation grpah 를 생성 navController = navController, startDestination = "first" ) { composable(route = "first") { FirstScreen(navController) } composable(route = "second") { SecondScreen(navController) } composable(route = "third/{value}") { backStackEntry -> ThirdScreen( navController, value = backStackEntry.arguments?.getString("value") ?: "", ) } } } } } @OptIn(ExperimentalMaterial3Api::class) @Composable fun FirstScreen(navController: NavController) { val(value, setValue) = remember { mutableStateOf("") } Column( modifier = Modifier.fillMaxSize(), verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally ) { Text("첫화면") Spacer(modifier = Modifier.height(16.dp)) Button(onClick = { navController.navigate("second") }) { Text("두번째화면으로") } Spacer(modifier = Modifier.height(16.dp)) TextField(value=value, onValueChange = setValue) Button(onClick = { if(value.isNotEmpty()) { navController.navigate("third/$value") } }) { Text("세번째화면으로") } } } @Composable fun SecondScreen(navController: NavController) { Column( modifier = Modifier.fillMaxSize(), verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally ) { Text("두번째화면") Spacer(modifier = Modifier.height(16.dp)) Button(onClick = { navController.navigateUp() // navController.popBackStack() 도 가능함 }) { Text("뒤로가기") } } } @Composable fun ThirdScreen(navController: NavController, value:String) { Column( modifier = Modifier.fillMaxSize(), verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally ) { Text("세번째화면") Spacer(modifier = Modifier.height(16.dp)) Text(value) Button(onClick = { navController.navigateUp() }) { Text("뒤로가기") } } }위 코드실행 후 란에 문자열입력하면 모바일화면에 키보드가 사라지지 않아세번째화면 버튼이 안보여 누를 수 없는데 실력이 초보라 어찌할 바를 보르겠네요 *.^
- 미해결모던 안드로이드 - Jetpack Compose 입문
빨간줄 너무많아요 ******
너무 많아서 ㅎ
- 미해결모던 안드로이드 - Jetpack Compose 입문
Scaffold 쪽에 오류가 있습니다
Scaffold() { 내부에 Column () { ... } 을 넣으니 빨간줄 오류가 나네요 }
- 미해결모던 안드로이드 - Jetpack Compose 입문
TextField 에서 오류가 납니다
36 번라인이구요 This material API is experimental and is likely to change or to be removed in the future.위와 같은 경고메세지가 뜨네요 ...
- 해결됨모던 안드로이드 - Jetpack Compose 입문
mutableStateOf에 초기값을 안 넣을 수는 없을까요?
강사님 강의 덕분에 쉽고 빠르게 Compose를 학습하고 있습니다. 강의를 레퍼런스 삼아서 Compose로만 앱을 제작하고 있는데요 ViewModel에서 State를 사용해서 여러 작업을 하는 도중초기값이 필요 없는 경우가 생겼습니다. 하지만 State에 초기값을 넣어주지 않으면 에러가 발생해 private val allItem = mutableStateOf<List<ItemEntity>?>(null) val allItem: State<List<ItemEntity>?> = allItem이렇게 null을 넣어서 사용 중인데이러다 보니 매번 null 체크를 해줘야하는 번거로움이 발생하고 코틀린의 장점을 잘 활용 못하고 있다는 생각이 들었습니다. 당연히 State에 초기값을 안 넣어주고 사용하는 법도 찾아봤는데 일단 원하는 답은 찾지 못했습니다. 혹시 어떻게 하면 좋을까요?
- 해결됨모던 안드로이드 - Jetpack Compose 입문
'키' 텍스트 필드가 Appbar에 가려지는 현상
강사님 코드 그대로 작성했는데 키 텍스트 필드가 안 보입니다.padding을 좀 줬더니 Appbar 밑으로 텍스트 필드가 일부 나오는 걸 확인했습니다.padding값을 주는 걸로 이 문제를 해결하는 건 좋은 방법이 아닌 것 같은데 이 문제를 어떻게 해결하면 될까요?패딩 주기 전 패딩 준 후
- 미해결모던 안드로이드 - Jetpack Compose 입문
전자액자 READ_EXTERNAL_STORAGE 권한 deprecated
Andoid 13 이상부터 READ_EXTERNAL_STORAGE 권한이 deprecated 되었습니다. 전자액자 권한 화면에서 권한요청 버튼 눌러도 반응 없는 분들은 참고하세요. Manifest 포함 READ_EXTERNAL_STORAGE 적용된 부분 전체 READ_MEDIA_IMAGES로 적용해보세요.<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>if (ContextCompat.checkSelfPermission( this, Manifest.permission.READ_MEDIA_IMAGES ) == PackageManager.PERMISSION_GRANTED ) { granted = true }PermissionRequestScreen { launcher.launch(Manifest.permission.READ_MEDIA_IMAGES) }
- 미해결모던 안드로이드 - Jetpack Compose 입문
Todo List 05 'TodoItem' 함수 관련
Todo List 05 - UI 작성 24:04 초 에서 @Composable TodoItem 파라미터 중 onClick 이 사용되지 않고 넘어가고 있습니다.영상이 누락된 것 같아보여서요.[누락화면][해결화면]Github 소스코드는 onClick 내용을 반영하고 있는걸 확인했습니다.
- 해결됨모던 안드로이드 - Jetpack Compose 입문
함수 Tooltip 관련
안녕하세요.강의 실습 중 위 이미지를 보듯 함수 Tooltip을 보여주시면서 설명해주셨는데요.함수 Android Studio Flamingo 버전의 Tooltip 확인하는 방법을 알 수 있을까요?검색을 해보았지만 "Show quick doc on mouse move"설정이 안보이네요 ㅠㅠ
- 해결됨모던 안드로이드 - Jetpack Compose 입문
코드 완성 후 갤러리 이미지 안보임
전체 코드 작성 후 빌드하면 볼 수 있는 에뮬레이터 화면입니다. 아무것도 노출이 안되는 텅 빈 화면만 보입니다. 어떤 문제가 있어 그런지 알 수 가 없어 문의 남깁니다!
- 미해결모던 안드로이드 - Jetpack Compose 입문
뷰 모델에 관련하여 질문합니다!
안녕하세요~ 오준석 선생님 강의는 잘 듣고 클론하면서 공부하고 있습니다. 지금 현재 저희가 하고 있는 앱 클론들은 매우 간단한 예제들인데, viewModel을 사용해서 상태관리를 하시던데, 특별히, viewModel을 사용해서 상태관리하시는 이유가 있으신가요?