Android Tips
画面回転固定方法
AndroidManifest.xml
<!-- activityタグ内に追記 -->
<!-- 縦画面固定 -->
android:screenOrientation="portrait"
<!-- 横画面固定 -->
android:screenOrientation="landscape"
Activity
Java
// 縦画面固定
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
// 横画面固定
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Kotlin
// 縦画面固定
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
// 横画面固定
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
ConstraintLayoutをスクロールさせる
AAC Android Architecture Components
Android KTX
Android KTX は、Android Jetpack およびその他のAndroidライブラリに含まれるKotlinの拡張機能セット。KTXの拡張機能により、Jetpack、Androidプラットフォーム、その他のAPIで、Kotlinが簡潔になる。そうした簡素化のため、KTMの拡張機能は、次のKotlinの言語機能を活用する。
- 拡張関数
- 拡張プロパティ
- ラムダ
- 名前付きパラメータ
- パラメータのデフォルト値
- コルーチン
startActivityForResultのDeprecated対応
スクリーショット
Service
Foreground Service
Background Service
MediaStore
Viewのレイアウト
Viewの角を丸める
参考サイト
res>drawableフォルダ内に下記xmlファイルを作成する
drawable/shape_rounded_corners_10dp.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<corners
android:topRightRadius="10dp"
android:bottomRightRadius="10dp"
android:bottomLeftRadius="10dp"
android:topLeftRadius="10dp"
/>
<solid
android:color="@color/button_material_light"
/>
</shape>
</item>
</selector>
4角のどれかを丸めたい場合は下記の丸めたい部分を選択する。
<corners
android:topRightRadius="10dp"
android:bottomRightRadius="10dp"
android:bottomLeftRadius="10dp"
android:topLeftRadius="10dp" />
背景色の透過
背景色をグラデーションで透過させたい場合は下記のように記載する。
参考サイト:Androidの画像に黒を透明にする方法
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<gradient
android:angle="90"
android:centerColor="#59000000"
android:endColor="@android:color/transparent"
android:startColor="#000000" />
</shape>
ARGBのカラーコード透明度
透明度 | 最初の2桁 |
---|---|
100% | FF |
95% | F2 |
90% | E6 |
85% | D9 |
80% | CC |
75% | BF |
70% | B3 |
65% | A6 |
60% | 99 |
55% | 8C |
50% | 80 |
45% | 73 |
40% | 66 |
35% | 59 |
30% | 4D |
25% | 40 |
20% | 33 |
15% | 26 |
10% | 1A |
5% | 0D |
0% | 00 |
透明度 | 最初の2桁 |
---|---|
100% | FF |
87% | DE |
70% | B3 |
54% | 8A |
30% | 4D |
26% | 42 |
12% | 1F |
ブロードキャスト
Androidアプリは、パブリッシュ/サブスクライブのデザインパターンと同様に、Androidシステムや他のAndroidアプリからブロードキャストメッセージを送受信できる。
これらのブロードキャストは、対象となるイベントが発生したときに送信される。例えば、システムの起動、デバイスの充電の開始など、さまざまなシステムイベントが発生したときに、
Androidシステムがブロードキャストを送信する。また、アプリからカスタムブロードキャストが送信されることもある。新しいデータのダウンロードなどの他のアプリに関係する可能背のある情報の通知などが行われる。
アプリは特定のブロードキャストを受信するように登録できる。ブロードキャストが送信されると、特定の種類のブロードキャストを受信するように登録されたアプリにシステムから自動的にブロードキャストが送信される。
ブロードキャストは、アプリ間のメッセージシステムとして使用されたり、通常のユーザーフローの外部のメッセージシステムとして使用されるのが一般的。ただし、頻繁にブロードキャストに応答してバックグラウンドでジョブを実行しすぎないように注意する必要がある。
システムブロードキャスト
システムで機内モードのオンとオフが切り替えられるなど、さまざまなシステムイベントが発生するとシステムが自動的にブロードキャストを送信する。システムブロードキャストは、イベントを受信すうりるように登録されているすべてのアプリに送信される。
ブロードキャストメッセージ自体はIntent
オブジェクトで囲まれており、そのオブジェクトのアクション文字列(android.intent.action.AIRPLANE_MODE など)で発生するイベントを指定する。追加フィールドに追加の情報をバンドルして、インテントに含めることもできる。例えば、機内モードのインテントには。機内モードがオンかどうか示す追加のブール値が含まれる。
インテントを読み取って、インテントから
ブロードキャストレシーバー
Androidアプリの終了処理
finish()
現在のActivityを閉じる。
実行すると、onPause()→onDestroy()の順番にイベントが発生する。
復帰時は、onCreate()→onStart()→onResume()の順番にイベントが発生する。
moveTaskToBack()
アプリケーション全体が中断状態になる。ホームボタンを押下した時と同じ動作になる。
実行するとonPause()イベントが発生する。
次の再開までバックグラウンドで待機状態になり、メモリ不足になった時はOSによって自動で
onDestroy()イベントが発生してアプリケーションすべてにタスクが終了する。
onDestroy()が呼ばれる前に復帰したときは最後のアクティビティから再開し、
onRestart()→onStart()→onResume()の順でイベントが発生する。
xmlで現在日時の表示する
TextClock
を利用する
<TextClock
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:textSize="60sp"
android:timeZone="Asia/Tokyo"
android:format24Hour="yyyy/MM/dd"
android:format12Hour="yyyy/MM/dd" />
RecyclerView
依存関係(バージョンはドキュメントを確認)
dependencies {
implementation 'androidx.recyclerview:recyclerview:1.1.0'
}
参考
Androidアプリ開発時の初期設定
navigationGraphの作成と追加
-
resフォルダ
で新規作成でnavigationフォルダ
を新規作成する -
navigationフォルダ
内でNavigation Resource File
を新規作成する-
Navigation Resource File
の名前は自由だが、navigation_graph
とする
-
-
activity_main.xml
に※1
を追加する - 上記1~3により、
Navigationによる画面遷移
の初期設定完了
※1
<fragment
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:navGraph="@navigation/navigation_graph"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
Handlerを用いた遅延処理
非推奨記述
companion object {
const val DELAY_TIME = 1000
}
fun delayDelay() {
Handler().postDelayed({
// 遅延させたい処理
}, DELAY_TIME)
}
推奨記述
companion object {
const val DELAY_TIME = 1000
}
fun delayDelay() {
// Looperを明示的に指定する
Handler(Looper.getMainLooper()).postDelayed({
// 遅延させたい処理
}, DELAY_TIME)
}
Androidのメインスレッド(UIスレッド)には、もともとLooper
がある。
// メイン(UI)スレッドのLooperを取得
Looper looper = Looper.getMainLooper();
Looper
内にはMessage Queue
で処理を管理している。
ここでHandler
の引数をしていしないと、暗黙的にLooper
が指定される。もしAndroidのメインスレッドのLooper
以外が指定された場合クラッシュの原因になる。だからAndroidのメインスレッドのLooper
を明示的に指定する。
Queue(キュー):「先入れ先出し」方式(FIFO : First In First Out)
Stack(スタック):「後入れ先出し」方式(LIFO : Last In First Out)
Androidの非同期処理の方法
参考サイト:Androidでの非同期処理の8つの方法
目次
- AsyncTask
- IntentService
- Loader
- JobScheduler and GcmNetworkManager
- CountDownTimer
- Java Threads or Android HandlerThread
- FutuerTask
- Java Timer / ScheduledThreadpoolExecutor
AsyncTask
おそらく最もよく知られている非同期API。メインスレッドで結果を返す。
AsyncTaskの問題点がActivityやFragmentのライフサイクルを認識しないため、Activityが破棄された時AsyncTaskの動作を処理するのはプログラマの責任。つまり、長時間実行する操作に最適なオプションではない。アプリがバックグラウンド状態にあり、Androidによって終了された場合、バックグラウンド処理も終了する。
companion object
companion object
とは?
クラス内に作成されるSingletonのこと。
companion object
の宣言方法
Kotlinでは、class
の代わりにobject
キーワードを使用するとSingletonが作成できる。
記述場所についてのメモ
- クラス上部または下部のどちらに書くか悩ましいな
- 自動生成で作ったFragmentではクラス内の下部に生成されるので、下部に書くほうがGoogleの書き方なのかな?
- Javaではクラス記述の直下に書いてたから下に書くのは変な感じ
参考
Java
のバージョン確認
Android開発でappフォルダ
内にあるbuild.gradle
を確認する
RecyclerViewの使い方
FragmentにRecyclerViewを実装する
Kotlin coroutine
Github:https://github.com/Kotlin/kotlinx.coroutines
app/buildgradle
def coroutines_version = '1.5.0' //kotlinコルーチン用ライブラリ(async, await)のバージョン
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:coroutines_version '
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:coroutines_version '
gradle.properties
//Kotlin coroutineを使うのに必要
kotlin.coroutines=enable
WebView
"@id"と"@+id"の違い
@id/hoge
:R.javaにあるhoge
を利用する。
@+id/hoge
:hoge
をR.java`に追加して使用する。
Android Studio Plugins
Lombok
Android Studio
File >Invalidate Caches/Restart : キャッシュを削除して再起動
Android LifeCycle
Activity LifeCycle
Fragment LifeCycle
遅延実行処理
Java
// 3秒遅延して実行する
Handler handler = new Handler(getMainLooper());
handler.postDelayed(new Runnable() {
@Override
public void run() {
// 実行したい処理
}
}, 3000);
Singleton
AndroidStudio Update
20211006(水) Update実施
data class
- Kotlin特有の仕様で、データを保持するためのクラス
- data classの作り方:
data calss hoge()
- プライマリコンストラクタに引数をひとつはもたせる
-
val
orvar
でイミュータブルか否かを明示する - 抽象クラス、openクラス、sealedクラス、インナークラスでないこと
普通のクラスとの違い
- データを扱うのに便利なメソッドが自動で実装される
- Anyクラスが持つ下記3つに加えてさらに下記2つのメソッドを持つ
toString()
hashCode()
equals()
-
copy()
:コピーできる -
componentN()
:N番目のプロパティを返す
参考
Kotlinのミュータブルとイミュータブル
Kotlinは下記の概念がある言語
- イミュータビリティ -Immutability- (変更不可能性)
- ミュータビリティ-Mutability- (変更可能性)
イミュータブル -Immutable- (変更不可能)なオブジェクト、ミュータブル -Mutable- (変更可能)なオブジェクトと呼んだりし、プログラムの中に出てくるオブジェクトを呼び分けたりする。
記述方法としてはミュータブルはvar
、イミュータブルはval
で記載する。
参考
RecyclerView
参考サイト
- RecyclerView:アイテムの装飾(ItemDecoration