質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

1回答

399閲覧

アンドロイドアプリ開発(Java) 、起動してTOPサイト表示、サイト内は通常表示でサイト外移動時はタイトルバーを表示したい。そして戻るボタンで戻ったらTOPサイト内なら元の非表示にしたい

gugupoo

総合スコア31

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2020/05/20 02:44

目指すアプリの形と、ここまで出来ていることを書きます。
javaでアンドロイドアプリ作成を目指しています。

前回の自分質問より継続した内容になります。
https://teratail.com/questions/262843

起動して(例)yahoo.co.jpを表示して、
yahoo.co.jp内では画面表示はそのまま、タイトルバーは無し。
yahoo.co.jp外に行くと、タイトルバーを表示する。
というもので、ここまで出来ています。

現在つまずきましたのが、戻るボタンを有効化して、無事戻るボタンを押すと戻るように設定できたのですが、
そこでyahoo.co.jpに戻ってきても
タイトルバーは表示されたままなので、

一旦進んで、戻ってきた際、バーは表示されてままでよいが、
最初のyahoo.co.jpサイト内まで戻ってきたら
タイトルバーを消したい、というのが今回の課題になります。

以下がMainActivity.javaです。

java

1public class MainActivity extends AppCompatActivity { 2 3 WebView myWebView; 4 5 @Override 6 protected void onCreate(Bundle savedInstanceState) { 7 super.onCreate(savedInstanceState); 8 setContentView(R.layout.activity_main); 9 10 11 myWebView = (WebView) findViewById(R.id.webview); 12 13 myWebView.getSettings().setJavaScriptEnabled(true); 14 myWebView.getSettings().setLoadWithOverviewMode(true); 15 16 17 myWebView.loadUrl("http://yahoo.co.jp"); 18 19 myWebView.setWebViewClient(new MyWebViewClient()); 20 ActionBar myAction = getSupportActionBar(); 21 myAction.hide(); 22 23 24 } 25 26 //// 27 private class MyWebViewClient extends WebViewClient { 28 @Override 29 public boolean shouldOverrideUrlLoading(WebView view, String url) { 30 if ("yahoo.co.jp".equals(Uri.parse(url).getHost())) { 31 32 ActionBar myAction = getSupportActionBar(); 33 myAction.hide(); 34 return false; 35 } 36 37 38 ActionBar myAction = getSupportActionBar(); 39 myAction.show(); 40 return false; 41 } 42 } 43 44 45 46 47 ////////ここが今回の質問場所 戻るボタンでの挙動です。 48 @Override 49 public void onBackPressed() { 50 if(myWebView!= null && myWebView.canGoBack()) { 51 52 53 ////////////★ActionBar myAction = getSupportActionBar(); 54 ////////////★myAction.hide(); 55 56 myWebView.goBack(); 57 58 } 59 else { 60 super.onBackPressed();//if there is no previous page, close app 61 } 62 } 63 64 65 66} 67

このMainActivity.javaの★マーク箇所ですが、
ここのコメントを外せば、myAction.hide();は確かに生きるのですが、
戻るボタンを押すたびにyahoo.co.jpだろうがそうでなかろうが、
一度押すたびにタイトルバーは消えます。

このコメントをこのままにしておくと、バーはhideされることはないので
戻るボタンを押して、押して、
結局、最初の設定の、 "yahoo.co.jp" に戻ってきても
バーは出現したままです。

つまり戻るボタンを押すたびに毎回タイトルバーは消えるか
戻るボタンを押してもずっと表示されたままか、
の2択であって、
条件、yahoo.co.jpドメインなら消す    という事が達成できない状態です。

画面のURLを取得して、現在yahoo.co.jpだったら再度隠す、というようなプログラムを書けたら
バーを消せるのかな…と思うのですがいかがすればよいでしょうか。

試験で、 getUrl(); というのがあるというのを調べて、
★のあたりの箇所を

java

1if(myWebView!= null && myWebView.canGoBack()) { 2 3 String webUrl = myWebView.getUrl(); 4 5 if ("yahoo.co.jp".equals(Uri.parse(webUrl).getHost())) { 6 7 ActionBar myAction = getSupportActionBar(); 8 myAction.hide(); 9 } 10 11 12 myWebView.goBack(); 13 14 }

というように書いてみましたが、意味はありませんでした・・
なんとかお教え頂けたらと思うのですが、宜しくお願い致します・・。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

onBackPressed()は、戻るボタンが押された時に呼ばれます。
つまり、このメソッドの処理中は、戻る前のURLです。

未検証で申し訳ありませんが、myWebView.goBack();の後で、URLのチェックをすれば、ご希望の動作をする可能性があります。

投稿2020/05/23 13:50

YT0014

総合スコア1708

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gugupoo

2020/05/24 04:14

YT0014様 有難うございます。 確かに、と思いましてmyWebView.goBack();の後に myWebView.goBack(); String webUrl = myWebView.getUrl(); if ("yahoo.co.jp".equals(Uri.parse(webUrl).getHost())) { ActionBar myAction = getSupportActionBar(); myAction.hide(); } のようにしてみましたが、反応ないままでした。 有難うございます;引き続き探ってみたいと思います!
YT0014

2020/05/24 14:26

普通に考えると、画面描画タイミングで、URLチェックが正しそうですが。 onPageStarted()などの、描画イベント系のメソッドへの記載を試してはいかがでしょう?
gugupoo

2020/05/27 00:27

申し訳ありません・・onPageStarted()をどのように書いてよいか分からなく… 本当に情けなくすみません… myWebView.goBack(); myWebView.reload(); のようにしてみると、ページは戻らなく更新(reload)のみされて戻りませんでした。 で、質問該当箇所の ////////ここが今回の質問場所 戻るボタンでの挙動です。 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) { myWebView.goBack(); String webUrl = myWebView.getUrl(); if ("yahoo.co.jp".equals(Uri.parse(webUrl).getHost())) { ActionBar myAction = getSupportActionBar(); myAction.hide(); } return true; } return super.onKeyDown(keyCode, event); } というように変えてみると、また隠れはしませんでしたが、 再度、yahooサイト内でページをクリックすると(yahoo.co.jpトップや他のyahoo.co.jp内) そこでバーは消えました。 最初の質問で出させて頂いたコードですと 1度タイトルバーが出てもyahoo.co.jpまで戻ってきて、yahoo.co.jp内をサーフィンしても ずっと出たままでしたが、上記にしてみると一度押すと隠れてはくれました。 が、目的の戻るボタンを押して、該当ドメインまで来たら消える、ということはできない状態であります・・。 onPageStarted()を組み込むなり、いっそ諦める、などでなんとかうまく対処したいと思いますが・・ なんとかご指示頂けたら有難いです、すみません・・。
YT0014

2020/05/27 00:50

普通に、MyWebViewClientのメソッドとして追加すればよいと思うのですが。 未検証ですが、一応、コードも提示しておきます。 @Override public void onPageStarted(WebView view, String url, Bitmap favicon) {   super.onPageStarted(view, url, favicon);   if ("yahoo.co.jp".equals(Uri.parse(webUrl).getHost())) {     ActionBar myAction = getSupportActionBar();     myAction.hide();   } } ただ、このタイミングでは、アクションバーが取得できない可能性がありますので、null例外が出るようなら、以下で。 @Override public void onPageFinished(WebView view, String url) {   super.onPageFinished(view, url);   if ("yahoo.co.jp".equals(Uri.parse(webUrl).getHost())) {     ActionBar myAction = getSupportActionBar();     myAction.hide();   } }
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問