Уроки по Kotlin Android Studio

Internal Storage | Jetpack Compose

MainActivity.kt import android.content.Contextimport android.os.Bundleimport androidx.activity.ComponentActivityimport androidx.activity.compose.setContentimport androidx.compose.foundation.layout.Arrangementimport androidx.compose.foundation.layout.Columnimport androidx.compose.foundation.layout.Spacerimport androidx.compose.foundation.layout.fillMaxSizeimport androidx.compose.foundation.layout.heightimport androidx.compose.material3.Buttonimport androidx.compose.material3.MaterialThemeimport androidx.compose.material3.Surfaceimport androidx.compose.material3.Textimport androidx.compose.runtime.Composableimport androidx.compose.runtime.mutableStateOfimport androidx.compose.runtime.rememberimport androidx.compose.runtime.rememberCoroutineScopeimport androidx.compose.ui.Alignmentimport androidx.compose.ui.Modifierimport androidx.compose.ui.platform.LocalContextimport androidx.compose.ui.tooling.preview.Previewimport androidx.compose.ui.unit.dpimport com.neco_desarrollo.internalstoragelesson.ui.theme.InternalStorageLessonThemeimport kotlinx.coroutines.Dispatchersimport kotlinx.coroutines.launchimport kotlinx.coroutines.withContextimport java.io.IOExceptionclass MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { InternalStorageLessonTheme { val textState = remember { mutableStateOf(“”) } val context = LocalContext.current val scope = rememberCoroutineScope() Column( modifier = Modifier.fillMaxSize(), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center ) {… Подробнее »Internal Storage | Jetpack Compose

Proto DataStore | Jetpack Compose

MainActivity.kt import android.os.Bundleimport androidx.activity.ComponentActivityimport androidx.activity.compose.setContentimport androidx.compose.foundation.layout.Arrangementimport androidx.compose.foundation.layout.Boximport androidx.compose.foundation.layout.Columnimport androidx.compose.foundation.layout.Spacerimport androidx.compose.foundation.layout.fillMaxSizeimport androidx.compose.foundation.layout.heightimport androidx.compose.foundation.layout.wrapContentHeightimport androidx.compose.foundation.layout.wrapContentWidthimport androidx.compose.material3.Buttonimport androidx.compose.material3.Surfaceimport androidx.compose.material3.Textimport androidx.compose.runtime.Composableimport androidx.compose.runtime.LaunchedEffectimport androidx.compose.runtime.MutableStateimport androidx.compose.runtime.collectAsStateimport androidx.compose.runtime.mutableStateOfimport androidx.compose.runtime.rememberimport androidx.compose.runtime.rememberCoroutineScopeimport androidx.compose.ui.Alignmentimport androidx.compose.ui.Modifierimport androidx.compose.ui.graphics.Colorimport androidx.compose.ui.unit.dpimport androidx.compose.ui.unit.spimport com.neco_desarrollo.datastorelesson.ui.theme.Blueimport com.neco_desarrollo.datastorelesson.ui.theme.DataStoreLessonThemeimport com.neco_desarrollo.datastorelesson.ui.theme.Greenimport com.neco_desarrollo.datastorelesson.ui.theme.Redimport kotlinx.coroutines.launchclass MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val dataStoreManager = ProtoDataStoreManager(this) setContent { DataStoreLessonTheme { val settingState = dataStoreManager.getSettings().collectAsState(initial = SettingsData()) Surface( modifier = Modifier.fillMaxSize(), color = Color(settingState.value.bgColor.toULong()) ) { MainScreen(dataStoreManager, settingState.value.textSize) } }… Подробнее »Proto DataStore | Jetpack Compose

Preference DataStore | Jetpack Compose

MainActivity.kt import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.foundation.layout.wrapContentWidth import androidx.compose.material3.Button import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.neco_desarrollo.datastorelesson.ui.theme.Blue import com.neco_desarrollo.datastorelesson.ui.theme.DataStoreLessonTheme import com.neco_desarrollo.datastorelesson.ui.theme.Green import com.neco_desarrollo.datastorelesson.ui.theme.Red import kotlinx.coroutines.launch class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?)… Подробнее »Preference DataStore | Jetpack Compose

RewardedAd | XML

MainActivity.kt import androidx.appcompat.app.AppCompatActivityimport android.os.Bundleimport android.widget.Buttonimport android.widget.Toastimport com.google.android.gms.ads.AdErrorimport com.google.android.gms.ads.AdRequestimport com.google.android.gms.ads.FullScreenContentCallbackimport com.google.android.gms.ads.LoadAdErrorimport com.google.android.gms.ads.MobileAdsimport com.google.android.gms.ads.rewarded.RewardedAdimport com.google.android.gms.ads.rewarded.RewardedAdLoadCallbackconst val AD_ID = “ca-app-pub-3940256099942544/5224354917″class MainActivity : AppCompatActivity() { private var rewardedAd: RewardedAd? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val showAd = findViewById<Button>(R.id.showAd) MobileAds.initialize(this){} loadAd() showAd.setOnClickListener { rewardedAd?.show(this){ rewardItem -> Toast.makeText(this, “Reward: ${rewardItem.amount}”, Toast.LENGTH_SHORT).show() } } } private fun loadAd(){ val adRequest = AdRequest.Builder().build() RewardedAd.load(this, AD_ID, adRequest, object : RewardedAdLoadCallback(){ override fun onAdFailedToLoad(p0: LoadAdError) {… Подробнее »RewardedAd | XML

InfoApp Jetpack Compose | #4

MainActivity.kt import android.os.Bundleimport androidx.activity.ComponentActivityimport androidx.activity.compose.setContentimport androidx.navigation.compose.NavHostimport androidx.navigation.compose.composableimport androidx.navigation.compose.rememberNavControllerimport com.example.infoapp.ui.theme.InfoAppThemeimport com.example.infoapp.ui_components.InfoScreenimport com.example.infoapp.ui_components.MainScreenimport com.example.infoapp.utils.ListItemimport com.example.infoapp.utils.Routesclass MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { val navController = rememberNavController() var item: ListItem? = null InfoAppTheme { NavHost( navController = navController, startDestination = Routes.MAIN_SCREEN ){ composable(Routes.MAIN_SCREEN){ MainScreen(context = this@MainActivity){ listItem -> item = listItem navController.navigate(Routes.INFO_SCREEN) } } composable(Routes.INFO_SCREEN){ InfoScreen(item = item!!) } } } } }} InfoScreen.kt import android.webkit.WebViewimport android.webkit.WebViewClientimport androidx.compose.foundation.layout.Columnimport… Подробнее »InfoApp Jetpack Compose | #4

Retrofit2 | #9

https://youtu.be/WPS9qwySwF0 MainActivity.kt import android.os.Bundleimport com.google.android.material.snackbar.Snackbarimport androidx.appcompat.app.AppCompatActivityimport androidx.core.view.WindowCompatimport androidx.navigation.findNavControllerimport androidx.navigation.ui.AppBarConfigurationimport androidx.navigation.ui.navigateUpimport androidx.navigation.ui.setupActionBarWithNavControllerimport android.view.Menuimport android.view.MenuItemimport com.neco_desarrollo.retrofitdataclasslesson.databinding.ActivityMainBindingimport com.neco_desarrollo.retrofitdataclasslesson.retrofit.MainApiimport kotlinx.coroutines.CoroutineScopeimport kotlinx.coroutines.Dispatchersimport kotlinx.coroutines.launchimport retrofit2.Retrofitimport retrofit2.converter.gson.GsonConverterFactoryclass MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { WindowCompat.setDecorFitsSystemWindows(window, false) super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) val retrofit = Retrofit.Builder() .baseUrl(“https://api.weatherapi.com/v1/”) .addConverterFactory(GsonConverterFactory.create()) .build() binding.request.setOnClickListener { CoroutineScope(Dispatchers.Main).launch { val api = retrofit.create(MainApi::class.java) val model = api.getWeatherData( “ВАШ КЛЮЧ”, “London”, “3”, “no”, “no” ) binding.temp.text = model.current.temp_c.toString()… Подробнее »Retrofit2 | #9

Jetpack Compose: Navigation

MainActivity.kt import android.os.Bundleimport androidx.activity.ComponentActivityimport androidx.activity.compose.setContentimport androidx.compose.foundation.layout.fillMaxSizeimport androidx.compose.material3.MaterialThemeimport androidx.compose.material3.Surfaceimport androidx.compose.material3.Textimport androidx.compose.runtime.Composableimport androidx.compose.ui.Modifierimport androidx.compose.ui.tooling.preview.Previewimport androidx.navigation.compose.NavHostimport androidx.navigation.compose.composableimport androidx.navigation.compose.rememberNavControllerimport com.neco_desarrollo.navigationcompose.ui.theme.NavigationComposeThemeclass MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { val navController = rememberNavController() NavigationComposeTheme { NavHost( navController = navController, startDestination = “screen_1” ) { composable(“screen_1”){ Screen1 { navController.navigate(“screen_2”) } } composable(“screen_2”){ Screen2 { navController.navigate(“screen_3”) } } composable(“screen_3”){ Screen3 { navController.navigate(“screen_1”){ popUpTo(“screen_1”){ inclusive = true } } } } } } }… Подробнее »Jetpack Compose: Navigation

Bluetooth module | #20

MainActivity.kt import android.os.Bundleimport androidx.appcompat.app.AppCompatActivityimport androidx.core.view.WindowCompatclass MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.content_main) }} MainFragment.kt import android.bluetooth.BluetoothAdapterimport android.bluetooth.BluetoothManagerimport android.content.Contextimport android.os.Bundleimport android.view.LayoutInflaterimport android.view.Viewimport android.view.ViewGroupimport androidx.fragment.app.Fragmentimport androidx.navigation.fragment.findNavControllerimport com.neco_desarrollo.bluetoothmoduletest.databinding.FragmentMainBindingimport com.neco_dev.bt_def.BluetoothConstantsimport com.neco_dev.bt_def.bluetooth.BluetoothControllerclass MainFragment : Fragment(), BluetoothController.Listener { private lateinit var bluetoothController: BluetoothController private lateinit var btAdapter: BluetoothAdapter private lateinit var binding: FragmentMainBinding override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { binding = FragmentMainBinding.inflate(inflater, container, false) return binding.root… Подробнее »Bluetooth module | #20

InfoApp Jetpack Compose | #3

https://youtu.be/QOF4yBl3uuc MainActivity.kt import android.annotation.SuppressLintimport android.content.Contextimport android.os.Bundleimport androidx.activity.ComponentActivityimport androidx.activity.compose.setContentimport androidx.compose.foundation.layout.fillMaxSizeimport androidx.compose.foundation.lazy.LazyColumnimport androidx.compose.foundation.lazy.itemsimport androidx.compose.material.*import androidx.compose.runtime.mutableStateOfimport androidx.compose.runtime.rememberimport androidx.compose.runtime.rememberCoroutineScopeimport androidx.compose.ui.Modifierimport com.example.infoapp.ui.theme.InfoAppThemeimport com.example.infoapp.ui_components.DrawerMenuimport com.example.infoapp.ui_components.MainListItemimport com.example.infoapp.ui_components.MainTopBarimport com.example.infoapp.utils.DrawerEventsimport com.example.infoapp.utils.IdArrayListimport com.example.infoapp.utils.ListItemimport kotlinx.coroutines.launchclass MainActivity : ComponentActivity() { @SuppressLint(“UnusedMaterialScaffoldPaddingParameter”) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { val scaffoldState = rememberScaffoldState() val coroutineScope = rememberCoroutineScope() val mainList = remember { mutableStateOf(getListItemsByIndex(0, this)) } val topBarTitle = remember { mutableStateOf(“Грибы”) } InfoAppTheme { Scaffold( scaffoldState = scaffoldState, topBar = { MainTopBar(… Подробнее »InfoApp Jetpack Compose | #3

InfoApp Jetpack Compose | #2

MainActivity.kt import android.annotation.SuppressLintimport android.os.Bundleimport androidx.activity.ComponentActivityimport androidx.activity.compose.setContentimport androidx.compose.material.*import androidx.compose.runtime.mutableStateOfimport androidx.compose.runtime.rememberimport androidx.compose.runtime.rememberCoroutineScopeimport com.example.infoapp.ui.theme.InfoAppThemeimport com.example.infoapp.ui_components.DrawerMenuimport com.example.infoapp.ui_components.MainTopBarimport com.example.infoapp.utils.DrawerEventsimport kotlinx.coroutines.launchclass MainActivity : ComponentActivity() { @SuppressLint(“UnusedMaterialScaffoldPaddingParameter”) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { val scaffoldState = rememberScaffoldState() val coroutineScope = rememberCoroutineScope() val topBarTitle = remember { mutableStateOf(“Грибы”) } InfoAppTheme { Scaffold( scaffoldState = scaffoldState, topBar = { MainTopBar( title = topBarTitle.value, scaffoldState ) }, drawerContent = { DrawerMenu(){ event -> when(event){ is DrawerEvents.OnItemClick -> {… Подробнее »InfoApp Jetpack Compose | #2