このサイト。

👉 App Mockup Builder for App Store & Play Store | AppMockUp
ブラウザ上でPlayStoreにアップロードするための画像が簡単に作成できます。
まずテンプレートを選んで、

スクリーンショットをアップロードして、テキストやカラーなどを設定していきます。

すぐにそれらしくできちゃいます!!

便利なツールです。
このサイト。

👉 App Mockup Builder for App Store & Play Store | AppMockUp
ブラウザ上でPlayStoreにアップロードするための画像が簡単に作成できます。
まずテンプレートを選んで、

スクリーンショットをアップロードして、テキストやカラーなどを設定していきます。

すぐにそれらしくできちゃいます!!

便利なツールです。
前回の2018年10月からひさびさの更新となります公式 Android Developers のこのページ。
Android Pie の割合が10%を超えたようです。
しかし、更新日付が以前のままです。

英語版を見てみます。

Distribution dashboard | Android Developers
「日本語版の更新日付部分」のみが古いまま。
このページに関しては、どうやら英語版のページを確認したほうがよさそうです。
Android OS version market share https://t.co/TDes5Jki1F #android #pixel7 #Android13 #TIRAMISU
— chanzmao (@maochanz) October 4, 2022
Fields cannot be declared directly in Kotlin classes.
Kotlin クラスでは、直接にフィールドを宣言することはできません。
// Kotlin
class Human {
val age = 20
}
// Java
public final class Human {
private final int age = 20;
public final int getAge() {
return this.age;
}
}
ゲッターやセッターにカスタムロジックを入れたい場合は、「バッキング・フィールド」を使うことができます。
カスタムゲッターやセッターのスコープ内で「field」にアクセスできます。
// Kotlin
var counter = 0
set(value) {
if (value >= 0) field = value
}
// Kotlin
class Human {
val age = 20
get() {
println("Age is: $field")
return field
}
}
// Java
public final class Human {
private final int age = 20;
public final int getAge() {
String var1 = "Age is: " + this.age;
System.out.println(var1);
return this.age;
}
}
ゲッターやセッターの外でフィールドに直接アクセスしたいときなどに使います。
private なフィールドに_を付けて明示します。
// Kotlin
private var _table: Map<String, Int>? = null
public val table: Map<String, Int>
get() {
if (_table == null) {
_table = HashMap() // Type parameters are inferred
}
return _table ?: throw AssertionError("Set to null by another thread")
}
// Kotlin
class Human {
private val _age: Int = 20
val age: Int
get() {
return _age
}
val printAge = {
println("Age is: $_age")
}
}
// Java
public final class Human {
private final int _age = 20;
@NotNull
private final Function0 printAge = (Function0)(new Function0() {
public Object invoke() {
this.invoke();
return Unit.INSTANCE;
}
public final void invoke() {
String var1 = "Age is: " + Human.this._age;
System.out.println(var1);
}
});
public final int getAge() {
return this._age;
}
@NotNull
public final Function0 getPrintAge() {
return this.printAge;
}
}
Java にデコンパイルした状況を確認しながら進むと理解しやすいように思います。
👉【Kotlin】Properties and Fields: Getters, Setters
👉 Properties and Fields: Getters, Setters, const, lateinit - Kotlin Programming Language
👉 Backing properties in Kotlin – ProAndroidDev
👉【MVVM】 ViewModel の_プロパティ記述
以下の記述ですが、
private val viewModel: MainViewModel by lazy {
ViewModelProviders.of(this).get<MainViewModel>()
}
Activityで にしろ、Fragmentで にしろ、
private val viewModel: MainViewModel by viewModels()
でいける。
Fragment内で呼び出す場合は、
dependencies {
implementation 'androidx.fragment:fragment-ktx:1.1.0-alpha08'
}
で、今現在。
コードをみてみる。
@MainThread
inline fun <reified VM : ViewModel> Fragment.viewModels(
noinline ownerProducer: () -> ViewModelStoreOwner = { this },
noinline factoryProducer: (() -> Factory)? = null
) = createViewModelLazy(VM::class, { ownerProducer().viewModelStore }, factoryProducer)
@MainThread
inline fun <reified VM : ViewModel> Fragment.activityViewModels(
noinline factoryProducer: (() -> Factory)? = null
) = createViewModelLazy(VM::class, { requireActivity().viewModelStore }, factoryProducer)
@MainThread
fun <VM : ViewModel> Fragment.createViewModelLazy(
viewModelClass: KClass<VM>,
storeProducer: () -> ViewModelStore,
factoryProducer: (() -> Factory)? = null
): Lazy<VM> {
val factoryPromise = factoryProducer ?: {
val application = activity?.application ?: throw IllegalStateException(
"ViewModel can be accessed only when Fragment is attached"
)
AndroidViewModelFactory.getInstance(application)
}
return ViewModelLazy(viewModelClass, storeProducer, factoryPromise)
}
使ったほうが良いですよね。
はまらなくてすむ。
Android端末で、ナビゲーションバーが担当する操作は、以下の5つです。
- ホームへ (Home)
- アプリドロワー表示 (App drawer)
- アプリ切り替え (App switcher)
- 戻る (Back)
- アシスタントアプリ起動 (Assistant)
2019-05-05付で公開された Android Q beta3 では、

「設定」
|
「システム」
|
「操作」
|
「System Navigation」
3タイプに分かれています。

それぞれ試してみましょう。
これまでの、馴染みやすいレガシーなスタイルと言えるでしょう。

これが一番使いやすいと思う私は固執しすぎの保守な人間ですかね?
実はこれが慣れると一番使えるのでは?

現在普及割合を増やしてる「Android P」 とはボタン数は同じだが、アプリ切り替えが少し違う。それがすごく良い。
問題なのはこれ。

今回、最新版の操作として登場してます。
「画面両端からの中向きスワイプ」が「戻る(バック)ボタン」という直感的でない操作に。
それ、各アプリ内ナビゲーションメニューやホームアプリなどと衝突しますし。
「薄っぺらい一つのボタン」を採用することにより、コンテンツスペースを縦方向最大限に確保できてるとはいえどうなんでしょうか。
フルジェスチャーな1ボタンは辛くねえですか?
Which type do you use for Android bottom navigation bar buttons?
— ちゃんずまお (@maochanz) May 16, 2019
スペース空いてるんだし、2ボタンか3ボタンが馴染みやすいように思いますが、果たしてどうなるのか。
👉Android Pie から始まる「ナビゲーションバー」の混乱と操作の覚え方
👉Android Q Beta 3 hands-on: Dark theme, new gestures, and more! - Android Authority