【Android】ステータスバーの色を変更する
ステータスバーの色を変更するのは下記で実施できます。
window.statusBarColor = Color.CYAN
- 反映後
テキストやアイコンの色も変更したい場合
背景色を白とした場合、テキストやアイコンの色も白の為表示されません。 テキストの色を変更する為のプロパティや関数は用意されておりませんので、 SystemUiVisibilityを用いてビット操作する必要があります。
val state = StatusBarState.Dark // ステータスバーの色変更 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { window.apply { var newUiVisibility = decorView.systemUiVisibility if (state == StatusBarState.Light) { // 白背景 statusBarColor = Color.WHITE // 黒のアイコン・テキスト newUiVisibility = newUiVisibility or SYSTEM_UI_FLAG_LIGHT_STATUS_BAR } else if (state == StatusBarState.Dark) { // 黒背景 statusBarColor = Color.BLACK // 白のアイコン・テキスト newUiVisibility = newUiVisibility and SYSTEM_UI_FLAG_LIGHT_STATUS_BAR.inv() } when (state) { StatusBarState.Light -> { // 白背景 statusBarColor = Color.WHITE // 黒のアイコン・テキスト newUiVisibility = newUiVisibility or SYSTEM_UI_FLAG_LIGHT_STATUS_BAR } StatusBarState.Dark -> { // 黒背景 statusBarColor = Color.BLACK // 白のアイコン・テキスト newUiVisibility = newUiVisibility and SYSTEM_UI_FLAG_LIGHT_STATUS_BAR.inv() } } decorView.systemUiVisibility = newUiVisibility } }
背景:白、テキスト:黒 | 背景:黒、テキスト:白 |
---|---|
JavaとKotlinの比較
これからKotlinを始めるJavaプログラマ向けの記事です。 説明は最小限としています。 JavaをKotlinに置換する場合、どう記述するのかを 見ながら覚えていきましょう。
基本構文
変数
public static void main(String args[]) { int a; a = 1; final int b = 2; System.out.println("a = " + a + "b = " + b); }
- kotlin
fun main(args: Array<String>) { var a: Int // varは後から変更可能。 a = 1 val b = 2 // valは後から変更不可。型推論で型省略可。 println("a = $a, b = $b") }
変数 - Optional
public static void main(String args[]) { String s = null; if (s != null) { System.out.println(s); } s = "not null" // Optionalを使った場合 Optional.ofNullable(s).ifPresent(System.out::println); }
- kotlin
fun main(args: Array<String>) { var s: String? = null if (s != null) { println(s) } s = "not null" // sがnullで無い時にprintlnを実行。 // ラムダ式の引数が一つ場合、省略した形式の「it」で参照できる s?.let { println(it) } }
if式
public static void main(String args[]) { int a = 1; int b = 2; String result; if (a < b) { result = "結果:aはbより小さい"; } else { result = "結果:aはbより大きい"; } System.out.println(result); }
int a = 1; int b = 2; String result = a < b ? "結果:aはbより小さい" : "結果:aはbより大きい"
- Kotlin
fun main(args: Array<String>) { val a = 1 val b = 2 val result = if (a < b) "結果:aはbより小さい" else "結果: aはbより大きい" println(result) }
[Point!] Kotlinには三項演算子がないので、以下のようにif式で代用する。
[Point!] String Templates ( $a の形式で変数 a の値を文字列に埋め込み可能)
when式
public static void main(String args[]) { int value = 1; String result = null; switch (value) { case 0: result = "0 です"; break; case 1: result = "1 です"; break; default: result = "その他 です"; break; } System.out.println(result); }
- Kotlin
fun main(args: Array<String>) { val value = 1 val result = when(value) { 0 -> "0 です" 1 -> "1 です" else -> "その他 です" } println(result) }
when式 - Javaでswitch+if文を用いるケース
*Java
public static void main(String args[]) { String value1 = "grape"; String value2 = "cake"; String result = null; switch (value1) { case "apple": result = "appleです"; break; case "banana": result = "bananaです"; break; default: if (value2.equals("cake") { result = "cakeです"; } else { result = "その他の食べ物です"; } break; } System.out.println(result) }
- Kotlin
fun main(args: Array<String>) { val value1 = "grape"; val value2 = "cake"; val result = when { value1 == "apple" -> "appleです" value1 == "banana" -> "bananaです" value2 == "cake" -> "cakeです" else -> "その他の食べ物です" } println(result) }
method
引数なし、戻り値なし
private void print() { System.out.println("print"); } public static void main(String args[]) { print() }
- Kotlin
private fun print() { println("print") } fun main(args: Array<String>) { print() }
[Point!] 式が1つだけの場合は{}を省略可能。戻り値の型も省略できます。
- Kotlin
private fun print(): Unit = println("print") fun main(args: Array<String>) { print() }
引数2つ、戻り値なし
private void addition(int a, int b) { int result = a + b; System.out.println("答え:" + result); } public static void main(String args[]) { addition(1, 2) }
- Kotlin
private fun addition(a: Int, b: Int) { val result = a + b println(result) } fun main(args: Array<String>) { addition(1, 2) }
引数2つ、戻り値あり
private void multiplication(int a, int b) { return a * b; } public static void main(String args[]) { int result = multiplication(2, 3) System.out.println(result); }
- Kotlin
private fun multiplication(a: Int, b: Int): Int { return a * b } fun main(args: Array<String>) { val result = multiplication(2, 3) println(result) }
[Point!] 式が1つだけの場合は{}を省略可能。
- Kotlin
private fun multiplication(a: Int, b: Int): Int = a * b fun main(args: Array<String>) { println(multiplication(2, 3)) }
[Point!] さらに戻り値の型も型推論によって省略可能。
- Kotlin
private fun multiplication(a: Int, b: Int) = a * b fun main(args: Array<String>) { println(multiplication(3, 4)) }
戻り値複数
class Pair { private String key; private int value; Pair(String key, int value) { this.key = key; this.value = value; } String getKey() { return key; } int getValue() { return key; } } class Main { private Pair getPairValue() { // 2つ以上の値は返却できないので自作のクラス型で返す Pair pair = new Pair("age", 30); return pair; } public static void main(String args[]) { Pair pair = getPairValue(); System.out.println(pair.getKey() + ":" pair.getValue()); } }
- Kotlin
// KotlinのPairクラスを使用 private fun getPairValue(): Pair<String, Int> = Pair("age", 30) fun main(args: Array<String>) { val pair = getPairValue() println("${pair.first} : ${pair.second}") // このように変数として受け取ることも可能 var (key, value) = pair println("key=$key, value=$value") }
Android Studio 環境構築
Android Studio のインストールとセットアップ
WindowsもMacも基本的には一緒ですが、 ここではMacをベースに説明していきます。
①DevelopersサイトからAndroid Studioをダウンロードする
↓↓↓ ダウンロードはこちらから ↓↓↓
②Android Studioをインストールする
Android Studio のセットアップ
SDK の追加インストール
以上でAndroid Studioのインストールとセットアップが完了です。
日付表示の多言語対応
端末の言語設定に合わせて、日付の表示を切り分ける
import android.databinding.DataBindingUtil import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.text.format.DateFormat import world.xenos.myapplication.databinding.ActivityMainBinding import java.util.* class MainActivity : AppCompatActivity() { private val binding by lazy { DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main) } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) binding.textLanguage.text = "Language : ${Locale.getDefault().displayLanguage}" val dateText = DateFormat.getLongDateFormat(applicationContext).format(Calendar.getInstance().time) binding.textDate.text = "Date : $dateText" } }
初めてのAndroid Studio プロジェクト作成と実行
①プロジェクトの作成
locationは書類配下にAndroidProjectなどのディレクトリを作成し管理するのが良いでしょう。
package nameはcompany domainから自動的入力されますが、Editから変更可能です。
(Dotで区切られた形でディレクトリ階層となります : world/xenos/myapplication/...)
また、Javaでは無くKotlinで開発する場合は、 ☑️ Include Kotlin support を選択します。
[Next]をClickし次へ進みます。
後からも変更可能です。上記ではAPI26: Android 8.0を選択しています。
(上記設定では、およそ6%の人が実行可能なようですね)