私たちは Android 13 の正式リリースに向けて着実に開発を進めています。Android 13 では、アプリごとの言語設定をはじめとする多言語サポートの改善が重要なテーマです。日本語に関連する機能も 2 つ含まれています。
Android 13 では TextView に新しい機能が追加され、文節を保ったまま改行することができるようになりました。これにより、より洗練された日本語テキスト表示が実現できます。
対象の TextView の lineBreakWordStyle 属性を "phrase" にすることで、文節による改行を設定できます。
lineBreakWordStyle
"phrase"
<TextView android:id="@+id/message_phrase" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:lineBreakWordStyle="phrase" android:text="@string/message" />
<TextView
android:id="@+id/message_phrase"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:lineBreakWordStyle="phrase"
android:text="@string/message" />
この動作を確認できるデモが Text サンプルに含まれています。
アプリ側から IME の未確定の変換候補を取得できるようになりました。例えば、「かた」と入力している途中では以下のように 5 つの候補を取得できます。
※ この機能の動作には最新の GBoard が必要です。
テキスト変換候補をアプリから取得する
アプリで検索機能を提供するとき、英語などのアルファベットで表記される言語においては「インクリメンタル サーチ(逐語検索)」または「Search as you type」と呼ばれる動作を提供するのが一般的です。例えば "Shoulder" という検索語句を入力するとき、一文字入力するごとに検索が行われ、単語をすべて入力しなくても目的の検索対象を見つけることができます。
日本語で逐語検索を提供しようとすると工夫が必要になります。IME で「かた」とひらがなを入力している間はアプリ内の漢字の「肩」を含むデータを検索しても一致せず、IME 上で漢字への変換を行って初めて意図した検索ができるからです。これに対応するために例えば連絡帳アプリであれば、あらかじめ読み仮名を登録しておき、ひらがな入力中はそちらから検索することで実現できるでしょう。しかし、漢字のデータしか存在しない場合、逐語検索を実現するのは困難だったのではないでしょうか。
Android 13 のテキスト変換候補 (Text Conversion Suggestions) API を使えば、逐語検索を実現できます。
まず、EditText (またはその小クラスである AppCompatEditText や TextInputEditText) を継承します。このカスタム EditText で onCreateInputConnection をオーバーライドして、カスタムの InputConnection を返します。このカスタム InputConnection の実装については後ほど述べます。
EditText
AppCompatEditText
TextInputEditText
onCreateInputConnection
InputConnection
class MyEditText @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = com.google.android.material.R.attr.editTextStyle) : TextInputEditText(context, attrs, defStyleAttr) { override fun onCreateInputConnection(outAttrs: EditorInfo): InputConnection { return MyInputConnection(super.onCreateInputConnection(outAttrs)) }}
class MyEditText @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = com.google.android.material.R.attr.editTextStyle
) : TextInputEditText(context, attrs, defStyleAttr) {
override fun onCreateInputConnection(outAttrs: EditorInfo): InputConnection {
return MyInputConnection(super.onCreateInputConnection(outAttrs))
}
レイアウト XML で対象の EditText の android:inputType 属性を textEnableTextConversionSuggestion に設定します。
android:inputType
textEnableTextConversionSuggestion
<com.example.android.tiramisudemo.ui.conversion.MyEditText android:id="@+id/edit" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="text|textEnableTextConversionSuggestions" />
<com.example.android.tiramisudemo.ui.conversion.MyEditText
android:id="@+id/edit"
android:inputType="text|textEnableTextConversionSuggestions" />
カスタムの InputConnection を実装します。このために Android には InputConnectionWrapper というクラスが用意されています。setComposingText(CharSequence, int, TextAttribute) をオーバーライドして、実行中の変換候補にアクセスします。TextAttribute.getTextConversionSuggestions メソッドを使えば文字列のリストとして変換候補を取得できます。
InputConnectionWrapper
setComposingText(CharSequence, int, TextAttribute)
TextAttribute.getTextConversionSuggestions
class MyInputConnection( inputConnection: InputConnection?) : InputConnectionWrapper(inputConnection, false) { override fun setComposingText( text: CharSequence, newCursorPosition: Int, textAttribute: TextAttribute? ): Boolean { if (textAttribute != null) { val suggestions: List<String> = textAttribute.textConversionSuggestions // ここで suggestions (変換候補) から検索文字列を作る } return super.setComposingText(text, newCursorPosition, textAttribute) }}
class MyInputConnection(
inputConnection: InputConnection?
) : InputConnectionWrapper(inputConnection, false) {
override fun setComposingText(
text: CharSequence,
newCursorPosition: Int,
textAttribute: TextAttribute?
): Boolean {
if (textAttribute != null) {
val suggestions: List<String> = textAttribute.textConversionSuggestions
// ここで suggestions (変換候補) から検索文字列を作る
return super.setComposingText(text, newCursorPosition, textAttribute)
これで未確定の変換候補が取得できました。後はこの変換候補からそれぞれのアプリに即した検索クエリーを作って検索してください。注意する点として、この setComposingText で取得できるのはあくまで変換動作中のテキストです。EditText に確定済みのテキストが既に含まれる場合、連結する必要があります。それらの動作を含んだ詳細なコードは Text サンプルを参照してください。
setComposingText
Posted by Yuichi Araki - Developer Relations Team
この記事は Maru Ahues Bouza による Android Developers Blog の記事 " 13 Things to know for Android developers at Google I/O!" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
何かを作ってすぐ、スマートフォンだけでなく、テレビ、自動車、タブレット、スマートウォッチを含め、世界の数十億の人々に届けることができるプラットフォームは多くはありません。今年の Google I/O では、このチャンスを最大限に活用していただけるように、Android がたくさんの方法で皆さんをサポートしていることを説明しました。また、最新の Android 開発が、可能な限り多くの共通性をもたせることで、日常生活で使用するあらゆる場面に適したエクスペリエンスを短時間で、かつ簡単に作成できるようになっていることにも触れました。
ここでは、Android デベロッパーが知っておくべきことの上位 13 をまとめています。Jetpack Compose やタブレット、Wear OS、そしてもちろん Android 13 も含まれています! Android の I/O プログラムには、26 のテクニカル セッションと 4 つのワークショップが含まれています。さらに、もう 1 つの #TheAndroidShow (動画/英語) のエピソードとして、Android ライブ Q&A も開催しました。#AskAndroid を使って質問されたツイートはエキスパート チームがライブ配信 (動画/英語) で回答しました。
Android の最新 UI ツールキットである Jetpack Compose は、ダウンロード可能フォント、LazyGrids、ウィンドウ インセット、ネストされたスクロールの相互運用性など、さらに高度なユースケースを実現する API を提供し続けています。また、Live Edit、再コンポーズのデバッグ、アニメーション プレビューといった機能を搭載したツールもサポートします。詳細はブログ投稿をご覧ください。
Android Studio Dolphin ベータ版と Electric Eel Canary を使うと、より多くのことを短時間で行うことができます。Android Studio Dolphin には、Jetpack Compose や Wear OS 開発向けの新機能や機能改善が搭載されています。また、Logcat の操作も新しくなっています。Android Studio Electric Eel には、新しい Google Play SDK Index や Firebase Crashlytics との連携機能が追加されます。さらに、大画面でアプリをテストするための新しいサイズ変更可能なエミュレータや、コンポーズ可能な関数内のコードの変更を即座にデプロイできる新機能 Live Edit も提供されます。Android 開発ツールの新機能 (動画/英語) に関するセッションを視聴し、こちらの Android Studio I/O ブログ投稿をお読みください。
インストール直後のアプリのスピードは、ユーザーの維持率に大きく影響します。そのスピードを高めるために、ベースライン プロファイルを作成しました。ベースライン プロファイルを使うと、アプリやライブラリが Android ランタイムにコードパスの使用方法に関するメタデータを提供できます。ランタイムは、それを使って Ahead-Of-Time コンパイルの優先順位を判断します。コードを一切変更せず、ベースライン プロファイルを追加するだけで、アプリの起動時間が最大 30% 短縮されます!ベースライン プロファイルは、すでに Jetpack の内部で使われています。私たちは、Fragments や Compose といった人気のライブラリにベースラインを追加して、エンドユーザーのエクスペリエンスを向上させています。アプリ フレームワークの新機能 (動画/英語) を視聴し、こちら (英語) の Jetpack ブログ投稿をお読みください。
Google は全力を挙げてタブレットに対応しています。前回の I/O 以降、大画面の最適化に注力した Android 12L をリリースしました。Android 13 にはその機能改善がすべて含まれているだけでなく、さらなる機能追加も行われています。また、来年登場する Pixel タブレットについてもお知らせしました。すばらしい新ハードウェア、アップデートされたオペレーティング システムと Google アプリ、改善されたガイドラインとライブラリ、そして刺激的な Google Play ストアの変更がそろった今こそ、アプリを見直して大画面と Android 13 に対応する絶好のタイミングです。今年の I/O で 4 つのセッションと 1 つのワークショップ (動画/英語) を開催し、大画面のデザイン (動画/英語) から実装 (動画/英語) まで、詳しく説明しているのはそのためです。
Wear OS の最新アップデートが行われた今、ウェアラブルの開発でできることを再考できます。Jetpack Compose for Wear OS は現在ベータ版です。これを使うと、これまでよりも少ないコードで、美しい Wear OS アプリを作成できます。健康とフィットネス関連のデベロッパー コミュニティに大きなイノベーションをもたらすヘルスサービスも、現在ベータ版になっています。そして今回は、Google Pixel Watch を発表しました。Fitbit と Wear OS の長所を合わせ持つもので、今秋発売予定です。ウェアラブルの期待のアップデートの詳細については、Wear OS テクニカル セッション (動画/英語) をご覧いただくか、Jetpack Compose for Wear OS のお知らせ (英語) をお読みください。
Health Connect は、Google と Samsung が密接に連携して作り上げた新しいプラットフォームです。これを使うと、簡単にアプリ同士を接続して、ユーザーの健康とフィットネスに関するデータに安全にアクセスしたり、それらのデータをすべてのアプリとデバイスで共有したりできるようになり、少ない作業で多くのユーザーに簡単にアプローチできます。5 月 11 日より、Jetpack Health から Health Connect にアクセスできるようになりました。詳しくは、お知らせ (英語) を確認するか、I/O のセッション (動画/英語) をご覧ください。
Android for Cars と Android TV OS が、米国やその他の国で拡大を続けています。ネットワークに接続しながら運転したりテレビを見たりするユーザーが増える中、今年は自動車やテレビ向けの開発がさらに簡単になる新機能を導入します。詳しくは、2 日目 (5 月 12 日) に開催された、Android for Cars の新機能 (動画/英語) や Google TV と Android TV の新機能 (動画/英語) に関するセッションをご覧ください。
Android for Cars の Shortcuts API にアクセスできるデベロッパーを拡大することにより、Google アシスタントを搭載したさまざまなデバイスで、音声を使って簡単にアプリにアクセスできるようにしています。この機能は、Wear OS (英語) アプリでも今年中にサポートされる予定です。また、Smarter Custom Intents (英語) を使ってこのようなエクスペリエンスを簡単に開発できるようにしています。具体的には、手間がかかる NLU トレーニングなしに、アシスタントが ML を通してさまざまな形態のユーザークエリを検出できるようにします。加えて、モバイルで音声を使ってアプリを見つけやすくする改善もしています。まずは、Brandless Queries によって、ユーザーが明示的にアプリの名前を話さなくてもアプリを使用できるようにします。また、まだアプリをインストールしていない場合には、App Install Suggestions が表示されてインストールを提案します。こちらの機能 (動画/英語) は、5 月 11 日より既存の App Actions で自動的に有効になりました。
Google Play を活用して皆さんのビジネスを拡大する新しい方法について、Google Play の最新情報をご覧ください。特に重要なのは、ディープリンクや最大 50 個のカスタム掲載情報を作成できる機能、Google Play ストアに掲載したいコンテンツを送信できるデベロッパーを拡大する LiveOps ベータ版、そして柔軟性が増したサブスクリプション販売などです。以上の最新情報の詳細は、ブログ投稿 (英語) をご覧ください。
新しい Google Play SDK Index で、SDK がアプリに適切かどうかを評価しましょう。この新しいパブリックポータルは、特によく使われている 100 以上の商用 SDK が登録されており、SDK がアプリのどんなパーミッションを要求するのか、SDK を使っているアプリの統計、どのバージョンの SDK が最もよく使われているのかといった情報が公開されています。ブログ (英語) 記事を確認し、Google Play の新機能 (動画/日本語字幕付き) や Android 開発ツールの新機能 (動画/英語) についてのセッションを視聴しましょう。
Android のプライバシー サンドボックス (英語) は、無料のコンテンツやサービスへのアクセスを危険にさらすことなく、ユーザーのプライバシーを強化した新しい広告ソリューションを実現する仕組みです。先日、Android のプライバシー サンドボックスの初めてのデベロッパー プレビュー版 (英語) を公開したので、SDK ランタイムと Topics API をいち早く確認できます。これら新技術を予備テストし、どのようにソリューションに採用できるかを評価し、フィードバックを提供してください。
新しい Google Wallet を使うと、Android や Wear OS から日常的に使用する機能に高速で安全にアクセスできます。私たちは、以前 Google Pay Passes API と呼ばれていた Google Wallet API を強化し、汎用パスやパスのグループ化とミックス(イベント チケットとバウチャーをまとめるなど)のサポート、そしてバックエンド統合なしにアプリからパスを直接保存できる新しい Android SDK のリリースしました。詳細については、詳細なブログ記事 (英語) を読むか、セッション (動画/英語) をご覧ください。また、developers.google.com/wallet のドキュメントを確認することもできます。
Android 13 の 2 回目のベータ版が 5 月 11 日にリリースされました。新しい通知パーミッション、プライバシーを保護する写真ピッカー、近くのデバイスとペア設定したり、メディア ファイルにアクセスしたりするパーミッションの改善など、アプリをプライバシーとセキュリティの最新機能に対応しましょう。また、アプリ別の言語設定やテーマ対応アプリ アイコンなどの機能で、アプリを強化しましょう。HDR 動画や Bluetooth LE オーディオなど、最新の標準を使って開発することもできます。こちらから Pixel デバイスを登録すると、すぐに試してみることができます。Android 13 ベータ版は、パートナー製の一部のスマートフォンやタブレット、折りたたみ式デバイスでも利用できます。詳細は、developer.android.com/13 をご覧ください。
ここで紹介した内容は、今年の Google I/O の Android デベロッパー向けハイライトの一部にすぎません。ぜひ Android の新機能 (動画/日本語字幕付き) セッションを視聴して、Google I/O での Android テクニカル トラックの全容を把握してください。全部で 26 のセッションと 4 つのワークショップがあります。ぜひご利用ください!