20220119のAndroidに関する記事は5件です。

android 通知 Kotlin

はじめに アプリ画面のボタンを押下すると通知が届く様にする ※コード以外省略 実装 MainActivity class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val channelId = "channel_id" val channelName = "channel_name" val channelDescription = "channel_description " val notificationButton = findViewById<Button>(R.id.button) ///APIレベルに応じてチャネル作成 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val name = channelName val descriptionText = channelDescription val importance = NotificationManager.IMPORTANCE_DEFAULT val channel = NotificationChannel(channelId , name , importance).apply { description = descriptionText } /// チャネル登録 val notificationManager: NotificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager notificationManager.createNotificationChannel(channel) } /// 通知の中身 val builder = NotificationCompat.Builder(this , channelId) .setSmallIcon(R.drawable.ic_launcher_background) /// アイコン .setContentTitle("肉まん") /// タイトル .setContentText("美味しい") /// コンテンツ .setPriority(NotificationCompat.PRIORITY_DEFAULT) /// 通知の優先度 var notificationId = 0 /// notificationID notificationButton.setOnClickListener { /// ボタンを押して通知を表示 with(NotificationManagerCompat.from(this)) { notify(notificationId , builder.build()) notificationId += 1 } } } } これだけ、、、 画像が通知の表示部分
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Kotlinデビューしたくて環境構築してみた

はじめに Kotlinを触ってみたくなったので、環境構築をしてみました。 実際に動かすのは、今後になる予定です。 環境構築(Windows) JDKのインストールをする 1.公式サイトからJDKをダウンロードする https://www.oracle.com/java/technologies/downloads/#jdk17-windows 2.インストールする 3.環境変数の設定をする 「スタートメニュー」>「設定」>「システム」>「詳細情報」>「システムの詳細設定」>「環境変数」 「JAVA_HOME」を追加する インストールが完了したことを確認する C:\Users\XXX>java -version java version "17.0.1" 2021-10-19 LTS Java(TM) SE Runtime Environment (build 17.0.1+12-LTS-39) Java HotSpot(TM) 64-Bit Server VM (build 17.0.1+12-LTS-39, mixed mode, sharing) Android Studioをインストールする(統合開発環境) 1. 公式サイトからAndroid Studioをダウンロードする 特に変更がないのでどんどん進めていきます。 初回起動時に上記画面が出てきましたが、特にインポートせずに進めます。 セットアップを行いますので、好みの設定を行いました。 セットアップが完了しました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

全画面表示時のview崩れ対策

はじめに 今回、自分はStatusBarを透過させた状態でViewをStatusBarに被せて表示をさせる際に、単一Activity複数Fragmentで実装していたため、動的にStatusBarの状態を変更していたところ、被せて表示させていない画面から被せて表示させたい画面に遷移し、その後被せて表示させていない画面に戻ったとき、BottomNavigationのViewが大幅に崩れてしまっていたため、その解決策を備忘録として置いておきます。 実装状態 まず、自分の場合に行っていたStatusBarの透過処理とViewの被せて表示する方法を記述しておきます。 // 画面全体表示設定trueの場合被らず表示、falseの場合被せて表示 WindowCompat.setDecorFitsSystemWindows(window, true) // StatusBarの文字色を変更trueの場合白、falseの場合グレー val wic = WindowInsetsControllerCompat(window, window.decorView) wic.isAppearanceLightStatusBars = true // 透過させたいのはStatusBarだけなのでNavigationBarは透過させていない // しかしWindowCompat.setDecorFitsSystemWindows(window, true)は問答無用で全画面表示に適応させるため // bottomにmarginを入れてあげないとViewが崩れてしまうので、下記の設定によりView崩れを阻止 binding.root.setOnApplyWindowInsetsListener { rootView, windowInsets -> val insets = windowInsets.getInsets(WindowInsetsCompat.Type.navigationBars()) rootView.updateLayoutParams<ViewGroup.MarginLayoutParams> { bottomMargin = insets.bottom } WindowInsets.CONSUMED } 解決方法 さて、ここからが本題です。 最初は、BottomNavigationが崩れてしまうのはsetOnApplyWindowInsetsListenerへの設定が残ってしまっているからだと思い、onDestroyViewでマージンを上書きする様にコードを書きましたが、それでもViewは崩れたままでした。 そこで解決策となるのが下記のコードです。 binding.bottomNavigation.setOnApplyWindowInsetsListener(null) こちらを設定してあげることによりBottomNavigationにも設定されてしまっていた下部へのマージンを上書きし、View崩れを直すことができました。 最後に Android30からSystemBar関連に色々と調整が入り、今まで設定していたものができなくなっていってしまう中、公式から出されているhideとshowは従来の実装とは大幅に変わってしまうものでした。 なので、従来の実装とは変わらずにできる方法を探したところ今回の様な内容になりました。 何かの手助けになれたら幸いです
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Jetpack Composeの基礎

目次 Column, Row, Box サンプルコード まとめ 1.Column, Row, Box Column‥アイテムを画面上の垂直方向に配置するために使用する。 Row‥アイテムを画面上の水平方向に配置するために使用する。 Box‥アイテムをアイテムの上に配置するために使用する。 2.サンプルコード Column @Composable fun UnderstandColumn() { Column( modifier = Modifier .fillMaxSize() ) { Surface( modifier = Modifier .width(150.dp) .height(100.dp), color = Color.Green ) { Text(text = "Item1", color = TextBlack, textAlign = TextAlign.Center) } Surface( modifier = Modifier .width(150.dp) .height(100.dp), color = Color.Red ) { Text(text = "Item2", color = TextBlack, textAlign = TextAlign.Center) } Surface( modifier = Modifier .width(150.dp) .height(100.dp), color = Color.Gray ) { Text(text = "Item2", color = TextBlack, textAlign = TextAlign.Center) } } } このサンプルコードは、以下のようになります。 ここで、UIの要素を任意の場所に動かすために以下の引数を考えます。 verticalArrangementは、テキストで示しているような配置をとることができます。 horizontalAlignmentは、テキストで示しているような配置をとることができます。 Row Row( modifier = Modifier .fillMaxSize(), verticalAlignment = Alignment.Top ) { Surface( modifier = Modifier .weight(1f) .height(100.dp), color = Color.Green ) { Column( horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center ) { Text(text = "Item1", color = TextBlack) } } Surface( modifier = Modifier .weight(1f) .height(100.dp), color = Color.Red ) { Column( horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center ) { Text(text = "item2", color = TextBlack) } } Surface( modifier = Modifier .weight(1f) .height(100.dp), color = Color.Gray ) { Column( horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center ) { Text(text = "item3", color = TextBlack) } } } このサンプルコードは、以下のようになります。 Columnと同様に、任意の場所に要素を配置したいときはに次の2つの引数に値を与えることで配置することができますが、Columnのときと混同しないように注意が必要です。 horizontalArrangementは、テキストで示しているような配置をとることができます。 verticalAlignmentは、テキストで示しているような配置をとることができます。 Box Image上に、チェックマークを以下のコードに示す。 Box( modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center ) { Image( painter = painterResource(id = R.drawable.ic_launcher_foreground), contentDescription = null, contentScale = ContentScale.Crop, modifier = Modifier .size(60.dp) .clip(CircleShape) .background(BackgroundBlack) ) Icon( painter = painterResource(id = R.drawable.ic_check), contentDescription = null, tint = ButtonBackgroundRed, modifier = Modifier.offset(2.dp,15.dp), ) } アイテムをアイテムの上に配置するためにBoxを使用し、Image上にIconを上記のように表示することができた。 3.まとめ Jetpack Composeで、UIを構成するための基礎をまとめました。Animation, Scaffold, Modifier(修飾詞)などを別の記事で紹介したいと思います。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Android/kotlin】LiveDataについて雰囲気おさらい(自分用メモ)

はじめに LiveDataとかLifecycleOwnerとかよく聞くけどいまいちなんなのかが分からないので、めちゃくちゃふんわりまとめていきます。 理解が進み次第追記予定 LiveDataとは データを保持してくれる箱みたいなやつ LiveDataと言いつつ、大体MutableLiveDataかObservableFieldを使う MutableLiveData→必要な時のみ監視し、別途LifeCycleOwnerを設定する必要がある ObservableField→常に変更を監視し続ける val count = MutableLiveData<Int>("0")みたいな感じで使う MutableLiveDataで必要になってくるLifecycleOwnerとは? 大体ActivityやFragmentをLifecycleOwnerに設定する ActivityやFragmentのライフサイクルに応じて変更を監視したりしなかったりする ActivityやFragmentがstopした時などは変更を監視する必要がないので効率がいい Activity/Fragmentにいる状態でbinding.lifecycleOwner = thisとかで設定する
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む