投稿

ラベル(AndroidStudio)が付いた投稿を表示しています

AlertDialogのボタンをカスタマイズする【AndroidStudio】

イメージ
 今回やること。 何かとメッセージ表示に使う、AlertDialogのボタンの色を変えてみます。 ※themes.xmlを使った変更をやっていきます。 ■MainActivity.java new AlertDialog.Builder( this, R.style. CustomAlertDialog ) .setTitle( "Title" ) .setMessage( "Message...." ) .setPositiveButton(android.R.string. ok , null ) .setNegativeButton(android.R.string. cancel , null ) .show() ;  ・ダイアログ作成時に、第2引数にスタイルをしてしてあげます。 ■themes.xml <style name ="CustomAlertDialog" parent ="ThemeOverlay.AppCompat.Dialog.Alert" > <item name ="buttonBarPositiveButtonStyle" > @style/AlertDialog.PositiveBtn </item> <item name ="buttonBarNegativeButtonStyle" > @style/AlertDialog.NegativeBtn </item> </style> <style name ="AlertDialog.PositiveBtn" parent ="Widget.AppCompat.Button.ButtonBar.AlertDialog" > <item name ="android:textColor" > #FFFF5050 </item> </style> <style name =...

Theme.xmlからToolbarの表示色(背景、文字)の変更をしてみる【AndroidStudio】

イメージ
Toolbarの色を変えたいよー 下の画像はテンプレートからBasicActivityを作成した時のToolbarです。 (まぁ青い。藍い。) BasicActivityではToolbarの色をThemeで指定しています。 そのため色を変更するためにはTheme.xmlを編集することで色の編集が可能です。 ■Theme.xml :itemを追加する。 <style name ="Theme.ActivitySample.AppBarOverlay" parent ="ThemeOverlay.AppCompat.Dark.ActionBar" > <item name ="colorPrimary" > @color/teal_200 </item> <!-- 追加:水色 --> <item name ="colorPrimaryVariant" > @color/teal_700 </item> <!-- 追加:濃い水色 --> <item name ="colorOnPrimary" > @color/black </item> <!-- 追加:黒 --> </style> 色を変えるだけなのであれば上記の理解で問題ないかと。 以下はちょっとした解説を記載します。 色を変える方法は、activity内の<android:theme>に指定を参照しTheme.xmlより色を取得していることはわかるかと思います。 ■activity_main.xml <com.google.android.material.appbar.AppBarLayout android :layout_width ="match_parent" android :layout_height ="wrap_content" android :theme ="@style/Theme.ActivitySampl...

Navigationを使用した簡単なFragment間の引数の受け渡し【AdnroidStduio】

Navigationを使用した遷移時の引数の受け渡し方法 って調べてみるとなんだか複雑そうだったのですが シンプルに引数を受け渡すだけならBundleを使用した方法が可能でした。 ※NavigationでのFragment遷移(BasicActivity)をベースにまとめてみます。 まず、Fragmentの遷移にNavigationControllerのnavigate()を使用していると思いますが このメソッド、Bundleをパラメータとして受け渡しができます。   参考: NavController.navigate(int resId, Bundle args) つまり、コードで記載するとこんな感じになります。 ■FirstFragment.java (navigateにBundleを追加する。) public void onViewCreated ( @NonNull View view , Bundle savedInstanceState) { super .onViewCreated(view , savedInstanceState) ; view.findViewById(R.id. button_first ).setOnClickListener( new View.OnClickListener() { @Override public void onClick (View view) { String strParam = "" ; // Bundle Bundle bundle = new Bundle() ; bundle.putString( "param1" , strParam) ; // Navigate NavHostFragment. findNavController (FirstFragment. this ) .navigate(R.id. action_FirstFragment_to_SecondFragment , bundle) ; ...

Toolbarのカスタマイズ、メニュー、アイコンの表示【AndroidStudio】

イメージ
Activityのテンプレート、BasciActivityをもとに画面上のToolbarのカスタマイズ方法をまとめました。 まずは、Toolbarの設定方法 ■MainActivity.xml (ツールバーを配置) <? xml version ="1.0" encoding ="utf-8" ?> <androidx.coordinatorlayout.widget.CoordinatorLayout ……略…… tools :context =".MainActivity" > <com.google.android.material.appbar.AppBarLayout android :layout_width ="match_parent" android :layout_height ="wrap_content" android :theme ="@style/Theme.ActivitySample.AppBarOverlay" > <androidx.appcompat.widget.Toolbar android :id ="@+id/toolbar" android :layout_width ="match_parent" android :layout_height ="?attr/actionBarSize" android :background ="?attr/colorPrimary" app :popupTheme ="@style/Theme.ActivitySample.PopupOverlay" /> </com.google.android.material.appbar.AppBarLayout> </androidx.coo...

ViewPager2をRecyclerView.Adapterで実装した場合のページ切り替えイベント処理実装【AndroidStudio】

ViewPager2を使っていると、ページ切替時に表示しているページ番号の切り替えなど、 PagerView2外の画面要素の書き換えがしたいと考え、 ページ切り替え時のイベント処理を実装する方法を調べてみました。 結論としては、 ViewPager2の「registerOnPageChangeCallback()」を設定することで実装できます。 javaプログラムで記載するとこんな感じ。 ViewPager2 viewPager2 ; // ***** // 略 // ***** viewPager2.registerOnPageChangeCallback( new ViewPager2.OnPageChangeCallback() { @Override public void onPageSelected ( int position) { super .onPageSelected(position) ; // ここに、ページ切り替え時に実装したい処理を記載。 } }) ; リファレンス( ViewPager2 )の記載。 「registerOnPageChangeCallback(ViewPager2.OnPageChangeCallback callback)」 Add a callback that will be invoked whenever the page changes or is incrementally scrolled.  雑訳:ページ変更やスクロールされた場合に呼び出されるコールバックを追加する。 まんまですが、コールバックの型「ViewPager2.OnPageChangeCallback」のもつ 「onPageSelect()」(※ページが選択された際に呼び出されるメソッド)内に 実装したい処理を記載すればページを切り替えたイベントを拾えるようです。 ちょっと調べたところ、ViewPager2とFragmentStateAdapterを使用した方法は簡単に見つかったのですがRecyclerView.Adapterについてはなかなか検索にHITしませんでした。 (もしかして主流じゃない?) しかし、今回の調べ物でViewPager2.OnPageChangeCallba...

レイアウトファイル上にIDが重複している場合の検索と、その有用性について【AndroidStudio】

イメージ
 例えばカレンダーのように、1つの画面に同じ要素が複数存在する場合。 レイアウト(XML)ファイル上に42個、せこせこ書いていくのは流石にかっこ悪いので 要素を1つのXMLファイルにして、レイアウト上に挿入(include)してみるのは自然なことだと思います。 <include layout ="@layout/content_calender_cell" /> <include layout ="@layout/content_calender_cell" /> <include layout ="@layout/content_calender_cell" /> <include layout ="@layout/content_calender_cell" /> <include layout ="@layout/content_calender_cell" /> <include layout ="@layout/content_calender_cell" /> ちなみに、カレンダーであれば月が替われば配置された要素の日付表示は変えたいですし 他の場合も挿入した要素内の中身をプログラム上から変更したいことが多々発生します。 しかし、挿入した要素は同一のXMLファイルのため、表示されているTextViewは同じIDを保持しているため単純に[view.findViewById(日付テキスト)]を使ってもうまく取得できません。 何か方法がないかと調べてみると、XMLファイル上で挿入時にIDが指定できること、 更に、[view.findViewById(親要素).findViewById(日付テキスト)]てな感じで検索することができることがわかりました。  参考: レイアウトを使いまわす - 他に定義したレイアウトを読み込ませる方法 つまり、レイアウトファイルの挿入時にIDを指定して <include layout ="@layout/content_calender_cell" android :id ="@+id/cal_view_da...

color.xmlに指定した色をプログラムから指定する。【AndroidStudio】

今日はせこせこコーディングしていたので、あっさり(ザックリ)したものを。 プログラム上で、TextViewなどに背景色を指定しようとした場合、 すごく単純に書くと、想像通りの色にはならない。 ((TextView)textView).setBackgroundColor(R.color. red ) ;  ※R.color.XXXの型も、setBackgroundColorの指定もintなのでエラーは発生しない しかし、R.color.XXX は保有している定義のIDを取得するので色(Color)に紐づいた色の値(int)ではない。 そのため、Resourcesクラスで用意されているgetColorメソッドを使用して R.color.XXXにて記載している値(16進数の色標記)をColorに紐づく値へ変更する必要がある。 ((TextView)textView). setBackgroundColor( resources .getColor(R.color. red )) ; 説明されれば、そりゃ正しく色とれないのは理解できますが 初心者にはこんな単純なことでも頭を悩ませてしまう… リソースがらみの部分含め、基本的な部分がまだまだ理解できていないので どこかでまとめて時間作って勉強したい。 (なにを学べば基本的な概念を理解できるのか、まずそこを知りたい。) 以上、本日の記録。

RecyclerViewのスクロール末尾に空白を追加する【AndroidStudio】

イメージ
一覧表示っていうのはどのシステムでも必要になると思いますが、 AndroidStudioでテンプレートを見ていたところ一覧表示っぽいのにRecyclerViewがあったのでその使い方を調べてみました。 基本的な手順は、とても詳しく公式の記事に書いてあるのでザックリです… ・XML上にRecyclerViewを配置。 ・Actitvity(Fragment)内で、RecyclerViewにRecyclerView.Adapterをセット。 ・RecyclerView.Adapter内で、1要素のレイアウト(ViewHolder)を定義を行う。 ・RecyclerView.Adapter内の「onBindViewHolder」で要素内へ値を設定する。   参考: RecyclerView で動的リストを作成する いろいろ触っていく中で、一覧を画面の最下段に表示する場合 レイアウトとしてスクロール末尾にちょっと空白を作りたいなって思ったので調べてみました。  ※やりたいことはこんな感じ↓ 結論として、RecyclerViewに「android:clipToPadding="false"」を指定してあげればよい。 <androidx.recyclerview.widget.RecyclerView android :id ="@+id/list" android :layout_width ="match_parent" android :layout_height ="match_parent" android :clipToPadding ="false" android :paddingBottom ="100dp" />  参考: 【Kotlin】ListViewやRecyclerViewの上部・下部に余白を表示する方法 ちょっと補足。 [clipToPadding]はデフォルトでtrue。 [clipToPadding]が有効になっている場合はリストの表示エリアに対してpaddingが作用するが、 無効の場合は、リストの要素全体のエリアに対してpaddingが作用する様子。 画面のデザインを考え...

エラー「The application's minSdkVersion is newer than the device API level.」の対応【AndroidStudio】

 今日はBasicActivityのテンプレートをもとに 画面を追加したりもろもろ触ってみた。 いざ、エミュレーターで動かそうと思ったら エラー「The application's minSdkVersion is newer than the device API level.」が発生した。 (つい先日も同一のエラーが出て調べてた…) ※参考サイト Android StudioでAPIレベルを下げる ・File > Project Structure ・Project Structure > (メニュー)Modules > (タブ)Default Config ・設定内の「Min SDK Version」を修正する。 (作成時点は、「Target SDK Version」と同じになっている模様。) 調べればすぐに出てくるけれども 知識として設定がどこで変更できるかは覚えていたいので忘れないように記録。 なんとなく、操作をもわかってきたので 目的のアプリを作成しながら少しづつ勉強していきます。 明日以降も、ちょっとした記録などを中心に気づいた点やわかった点をまとめられるといいなぁ。 以上、本日の記録。

Navigationとはなんなのか【AndroidStudio】

 昨日の続き、 (テンプレート)BasicActivityに含まれるナビゲーション(?)ってやつを見つけたので 何者なのかをザックリ調べてみました。 ナビゲーション ナビゲーションとは、ユーザーがアプリ内のさまざまなコンテンツ間を移動する操作を指します。Android Jetpack の Navigation コンポーネントは、単純なボタンクリックから、アプリバーやナビゲーション ドロワーなどの複雑なパターンまで 、さまざまなナビゲーションを実装するのに役立ちます。また、Navigation コンポーネントは、確立された 原則のセット に 従 うことにより、一貫性のある予測しやすいユーザー エクスペリエンスを保証します。 https://developer.android.com/guide/navigation?hl=ja 公式ドキュメントを読んだざっくりの理解。 ナビゲーションを使うことで、画面(Framgment)の遷移を管理することができる。 ナビゲーションは3つの要素で構成されていて、 ・Navigation Graph(ナビゲーショングラフ)  →ナビゲーションに関連した情報を集約したXMLファイル ・NavHostFragment(ナビゲーションホストフラグメント)  →ナビゲーションされた情報を表示するための元(フレームみたいなもの?) ・NavControlloer(ナビゲーションコントローラー)  →Navigationをコード上で使用するためのクラス   NavControllerを使って遷移時の引数の受け渡しなど制御が可能。 画面遷移部分を包括して管理、実装できる機能になっているみたいで Navigationを使用することで画面のデザインから、各画面への遷移を最小限のプログラムで実装し、イメージを作ることが非常に簡単になるのかなと感じた。  ※モックアップっていうのかな? また、画面遷移時のアニメーションについてもこのナビゲーションを使って実装ができるとのこと(詳しくはまた今度調べてみます。) いろいろ文献を見ると、Activityをたくさん作って、画面遷移をさせることはもちろん可能だけど 似たようなレイアウトや遷移時のアニメーション管理をしたい場合にはFragmentを用いて Navigationによる画面遷移(引数の受け渡し)を実...

BasicActivityについて調べてみた【AndroidStudio】

昨日の続き。 たまたま開いたBasicActivityのテンプレートに ActivityとFragmentが使われていたのでソースコードから勉強してみました。 Basic Activity < https://developer.android.com/studio/projects/templates?hl=ja#BasicActivity > activity_main.xml内に <include layout ="@layout/content_main" /> なんて記述で、別のXMLファイルを読み込んで content_main.xmlでパーツとしてFragmentの埋め込みをしている。 <fragment android :id ="@+id/nav_host_fragment" android :name ="androidx.navigation.fragment.NavHostFragment"    … …… app :navGraph ="@navigation/nav_graph" /> Fragment内の表示についてはnavigation(?)で制御している様子。 FirstFragment.java内でもnavigationによる画面遷移を実装している。 public void onClick (View view) { NavHostFragment. findNavController (FirstFragment. this ) .navigate(R.id. action_FirstFragment_to_SecondFragment ) ; } そこで、結局Navigationって何なのか?がわからないので 明日はNavigationについて調べてみようと思います。 以上、本日の記録。

ActivityとFragment。画面表示について勉強してみた。【AndroidStudio】

 昨日に引き続き、AndroidStudioの勉強をした。 昨日はEmptyActivityを使ってデバック実行ができたので 画面にいろいろ表示するべく参考になりそうなサイトを見て回っていましたが ところどころ出てくるActivityとFragmentの違いが全く判らなかったので デベロッパーサイトをさっそく読んでみた。 アクティビティの概要 Activity  クラスは Android アプリの重要なコンポーネントであり、アクティビティの開始方法と組み立て方法はプラットフォームのアプリケーション モデルを構成する際の基本的な要素です。 main()  メソッドで起動するアプリをプログラミングする際の枠組みとは異なり、Android システムでは、ライフサイクルのそれぞれの段階に対応するコールバック メソッドを呼び出すことにより、 Activity  インスタンス内のコードが開始されます。 < https://developer.android.com/guide/components/activities/intro-activities > フラグメント Fragment  は、アプリの UI の再利用可能な部分を表します。フラグメントはそれ自身のレイアウトを定義して管理します。また、それ自身のライフサイクルを持ち、入力イベントを処理できます。フラグメントは単独では機能せず、アクティビティまたは別のフラグメントによってホストされる必要があります。 フラグメントのビュー階層は、ホストのビュー階層の一部を構成するか、またはホストのビュー階層に接続されます。 < https://developer.android.com/guide/fragments > 公式を読んで、わかったことは 画面と思われるベースの部分がActivity、 Activity内のパーツとして表示を管理できるのがFragmentという感じでしょうか。 (HTMLのインラインフレームみたいな感じ?) まだまだ参考サイトを見ても用語が理解できない点が多いので これから少しづつ勉強していきたいと思います。 次は、たまたま開いたテンプレート「BasicActivity」が何やってるか意味わからなかったので解析していこうと思います。 ...

アンドロイドアプリ開発を始めてみました【AndroidStudio】

最近、知人と何気ない話の中からAndroidのアプリつくってみたくない?って話になった。 普段の仕事ではAndroidアプリとはかけ離れた古の技術で仕事してたので 純粋な興味もありせこせこと勉強を始めてみました。 ひとまず今日は、 AndroidStudioをインストールして空っぽのActivity(?)にて デバック実行ができるところまでは環境を作ったのでこれからいろいろ勉強していこうと思います。 もうすでに、先人の知恵とは偉大さを感じています。 エラーメッセージで検索すればすぐに解決策が出てくる。 素晴らしい。 以上、本日の記録。