iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

Android

【Android】グリッドレイアウトのスペースを均等にする

### 結論 まずはItemDecorationのサブクラスを作成。getItemOffsetsメソッドで、それぞれのItemのオフセットをポジションなどによって調整します。 class GridSpacingItemDecoration( private val spanCount: Int, private val spacing: Int, private val in…

【Android】iOSのUICollectionViewみたいなレイアウトを作りたい

iOSのUICollectionViewのようなグリッドレイアウトをAndroidでどのように作るのか分からなかったので簡単にメモを‍♀️ 結論 RecyclerViewを使って、グリッドレイアウトを構築できるようです。 ということで、早速使ってみます。 まずは、Fragment内にRecycler…

【Android】RecyclerViewのContentInsetはどこで設定する?

結論 iOSのUIScrollViewや、それを継承したクラスなどではお馴染みの、コンテンツの上下左右のスタート地点のスペースを設定するcontentInsetは、Androidではpaddingになります。 ですので、RecyclerViewのTopの開始地点を60dpずらしたいと思った場合は下記…

【Android】アスペクト比で制約を指定する

結論 まず、前提としてアスペクト比で制約を追加したいものはLinearLayoutなどではなく、ConstraintLayoutで内包する必要があります。 あとはlayout_constraintDimensionRatioでアスペクト比を設定すれば完了です。アスペクト比の指定は"幅:高さ"の順番です…

【Android】TextViewを1行表示にする

結論 レイアウトファイルにて、android:singleLine属性をtrueに設定することで、テキストを折り返さず、省略した表示になります。 android:singleLine="true" ちなみに、デフォルトだとこんな感じで、iOSのUILabelの省略形式と同じ感じになります。 省略方法…

【Android】Buttonの影を消す

結論 before after Buttonのスタイルにstyle="?android:attr/borderlessButtonStyle"を設定することで、Buttonの影を消せるようです✍️ style="?android:attr/borderlessButtonStyle" 参考 https://www.ithack.info/button-7/ その他の記事 yamato8010.hatena…

【Android】Firestoreでバッチ書き込みを行う

本日は、Firestoreの不可分操作の一つである、バッチ書き込みを使ってみたいと思います‍♀️ 不可分操作(アトミックオペレーション)は、複数の操作を一つの操作として扱うことで、全ての操作が成功、又は失敗するように処理を行うことを指します。Firestoreで…

【Firebase Authentication】KotlinでSignIn・SignUp

Android・Kotlinで、Firebase Authenticationを使った、メールアドレスによるSignIn・SignUpの実装をしたので、簡単に手順をまとめてみたいと思います‍♀️ やっていく まずはFirebase Authentication Androidライブラリを、アプリレベルのGradleファイルに記…

RxBindingでTextViewの変更を監視する

AndroidのTextViewで、インクリメンタルサーチを行う実装をRxBindingというライブラリを使って行ったので、その方法を簡単にまとめていきたいと思います‍♀️ github.com やっていく そもそもRxBindingとは?というところから調べてみると、公式レポに下記のよ…

【Android】TextInputLayoutにローディングを表示したい

結論 下記のようにContextにExtensionを生やして、システムデフォルトのローディングインジケーターを取得することができます。drawableの生成だけだと、アニメーション化されないため、(drawable as? Animatable)?.start()でアニメーションを開始させていま…

【Kotlin】Kotlin でちょろっと正規表現を行う

今回はタイトルの通り、Kotlin でちょろっと正規表現を行ったのでそのメモです。 結論 Kotlin ではこんな感じで行える見たいですね。正規表現を """ で囲むことで、エスケープが必要にならないのでシンプルに記述することができます。 val pattern = """"^[A…

【Android】ReactiveX の恩恵を受けたスレッド管理を学ぶ

RxKotlin で実行する Observable のスレッドをどのように切り替えるのか調査したので、調べた内容を簡単にまとめておこうかと思います それではやっていく まずは、Android プラットフォーム上のメインスレッドで処理を実行できるようにしてみます。Android …

【Android】Fragment のライフサイクルを理解する

RxKotlin を使用するにあたり、それぞれのクラスでライフサイクルを理解していないと、そろそろ Android 初心者という言い訳が通用しなくなりそうなので、Fragment や Activity (今回は Fragment のみ) のライフサイクルを再度しっかりと認識して良い Rx ラ…

【Android】Static interface methods are only supported starting with Android N (--min-api 24): の対処法

前回に引き続き、RxKotlin 導入中に下記のエラーが Static interface methods are only supported starting with Android N (--min-api 24): io.reactivex.rxjava3.disposables.Disposable io.reactivex.rxjava3.disposables.Disposable.disposed() Stack tr…

【Android】Cannot fit requested classes in a single dex file (# methods: 〇〇 > 65536) 対処法

絶賛個人開発中のアプリで RxKotlin をインストールし、ビルドすると下記のようなエラーが発生しました Cannot fit requested classes in a single dex file (# methods: 74679 > 65536) 調べてみると割とgeneralな問題らしく、「64K 参照制限」なんて呼ばれ…

【Android】Cannot inline bytecode built with JVM target 1.8 into bytecode that is being built with JVM target 1.6. 対処法

Text の変更を取得しようと下記のよう、Listener を追加すると謎のエラーが発生しました。 binding.accountNameInputTextField.addTextChangedListener { println(it.toString()) } // Cannot inline bytecode built with JVM target 1.8 into bytecode that…

【Kotlin】Koin で DI してみた

絶賛個人開発中のアプリで Clean Architecture を採用していて、DI(Dependency Injection) Framework の Koin を使う機会があったので、その使用方法をメモ程度に残しておきたいと思います‍♂️ github.com それではやっていく まずは、App レベルの build.gra…

【Android】View の Background をアニメーションさせる

本日はタイトルの通り、Android で View の background リソースをアニメーションさせながら変更する方法を紹介したいと思います‍ それではやっていく まずは、アニメーションの初期状態の drawable とアニメーション後の drawable をそれぞれ定義しておきま…

【Android】カスタムビューのカスタム属性を設定する

今回は、以前の「カスタムビューの作成」に引き続き、カスタムビューでカスタム属性を追加・適用する方法をメモ程度に残しておきます‍♀️ それではやっていく まずは、カスタム属性を定義するための xml を res/values 配下に attrs_account_type_select.xml …

【Android】Kotlin + XML で View のコンポーネント作成

本日はタイトルの通り、Kotlin + XML で View のコンポーネントを作成する方法を紹介したいと思います。iOS だと Swift + xib で作るカスタムビューみたいな感じのやつです‍♀️ それではやっていく まずは、view_account_type_select という名前でレイアウト…

【Android】ButtonのStateに応じてBackgroundを変更する

本日は Android の Button で State に応じて BackgroundColor を変更する方法を紹介していきたいと思います。 それではやっていく まずは、state によって切り替わる Color を xml として定義します。今回は state_background.xml という名前でファイルを作…

【Kotlin】Fragment のイベントを Activity で受け取る

本日も初歩的な内容ですが、Fragment のイベントを Activity で受け取る実装を行ったので、その方法をメモ程度に残しておきます‍♂️ それではやっていく Fragment 側の実装は下記のようになります。重要な部分は OnboardSignUpTermsOfServiceListener に関す…

【Android】Material Components の TextField でカーソルの色を変えるには

おはようございます。本日も Android Material Components 周りで調べたことをメモがわりに書いておきます‍♂️ 結論 Material Components の TextField の cursor color は、どうやら設定されている Theme の primary になるそうです。 github.com 今回僕は該…

【Android】Material Button で設定した app:cornerRadius で反映されない

下記を参考に MaterialComponents の Button で、角丸のボタンを作成しようとすると app:cornerRadius で指定した値が反映されず、角丸にならないという問題が発生していました。 stackoverflow.com 解決法 どうやら MaterialComponents を使用するには、親…

【Android】dpってなんぞや

今回は Android アプリ開発において、なんとなくなぁなぁにしていた dp の理解を深めていきたいと思います✍️ そもそもなんで px 単位じゃない? iOS アプリ開発においてもこれは言えることですが、基本的にモバイルアプリの開発はマルチデバイスでのレイアウ…

【Android】Color ResourceでAlphaを追加する

Android の colors.xml に追加する Color にAlpha を追加する方法が分からなかったので、メモ程度に残しておきます 方法 RGB 同様に16進数で、アルファ値を指定することで追加することができます。今回の場合は、(# を除いた)先頭2文字がアルファ値を示して…

【Android】Installation error: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED 対処法

絶賛開発中のアプリで、API 19 のエミュレータでテストをしようと、実行すると下記のようなエラーが発生しました。 Installation error: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED ちょっと初見のエラーだったので、ググってみると何やら怪しい回答が、、 st…

【Android】特定のActivityでStatus Barのテキストカラーを変更する

機能に引き続き今日も Android 関連の小ネタです‍♀️ 方法 Activity に仕様している style に android:windowLightStatusBar 属性を追加し、true にすることで Status bar に配置してあるアイテムの色を Gray にすることができます。逆に Status Bar のカラー…

【Android】特定のActivityのAction Barを消す方法

今日はタイトルの通り、Android で特定の Activity の Action Bar を消す方法を紹介します。 方法 やり方は簡単で、アプリの AndroidManifest に記述している Activity の設定で、android:theme に NoActionBar を追加します。下記が MainActivity で NoActi…

【Android】android.content.ActivityNotFoundException の対処法

MainActivity から異なるパッケージにある OnboardActivity に Intent を使用して画面遷移しようとしたところ下記のような Error に遭遇していました E/AndroidRuntime: FATAL EXCEPTION: main Process: YamatoOtaka.Fidee.debug, PID: 30741 java.lang.Run…