読者です 読者をやめる 読者になる 読者になる

Zinc #32 アクションバー(メニュー)にURLバーを表示

今回は、URLバーをアクションバーの上に表示する・・・。

まず、

f:id:BG1:20161012112215p:plain

Layout resource fileを追加・・・。

f:id:BG1:20161012112249p:plain

menu_urlbarという名前にする・・・。

また、menu_main.xmlで、

このようにする・・・。
app:showAsAction="always"でメニューアイテムはアクションバー上にUIを持って表示される・・・。
app:actionLayout="@layout/menu_urlbar"でそのUIのレイアウトをmenu_urlbarのものにできる・・・。
つまり、カスタマイズができるのである・・・。

menu_urlbar.xmlは、

EditTextで作ったURLバー・・・。
横にタブ切り替えボタンや他のメニューアイテムを表示するためのボタンを表示する関係で、android:layout_marginRight="50dp"や、android:layout_width="270dp"みたいな小細工をしてたりする・・・。

menu_main.xmlの残りは、

タブ切り替えボタンとタブの追加・・・。
タブ切り替えボタンもalwaysにして、android:icon="?attr/actionModeCopyDrawable"でそれっぽく・・・。
(Chromeのタブ切り替えボタン、あれどうやって表示してるんだろ・・・。どのアイコンなんだろ・・・。誰か知ってたら教えて・・・。)
タブの追加は普通のアイテム項目なので、app:showAsAction="never"で・・・。

strings.xmlは、URLバーに表示するヒントや、メニューアイテムの文字列・・・。
(とりあえずヒントだけ・・・。メニューアイテム文字列の方はあとで・・・。)

colors.xmlにblackとgrayを追加・・・。

MainActivity.javaで、

ややこしいが、menuItemUrlBarはMenuItem型でメニューアイテムそのものを表す・・・。
menuUrlBarが、EditText型のURLバー本体・・・。
また、TextView.OnEditorActionListenerをあとで実装する・・・。

Bundle型argsでurlを渡す部分をコメントアウト・・・。
これで起動時にURLがロードされることはなくなる・・・。

onCreateOptionsMenuで、menuItemUrlBarを表示状態に・・・。
そこからviewを取得して、さらにそこからmenuUrlBarを取得・・・。
menuUrlBar.setOnEditorActionListenerでthisを指定・・・。
ということは、ここにonEditorActionを実装しないといけないので、

URLが入力されてリターンキーが押されたら、キーボードを非表示にして、入力されたurlを取得・・・。
前回までに作っておいたMainActivityのloadUrlに渡すことでURLがロードされる・・・。
loadUrlの中では、currentFragmentTagなwebFragmentを探してwebFragment.loadUrlでロード・・・。

f:id:BG1:20161012115741p:plain

起動すると、URLバーがアクションバー上に・・・。

f:id:BG1:20161012115802p:plain

URLを入力して、リターンを押すと、

f:id:BG1:20161012115821p:plain

ロードされる・・・。

https://github.com/bg1bgst333/Zinc/tree/develop/android/empty_activity/android_studio/src/Zinc