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

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

ただいまの
回答率

87.48%

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

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 465

score 31

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

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

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

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

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

以下がMainActivity.javaです。

public class MainActivity extends AppCompatActivity {

    WebView myWebView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        myWebView = (WebView) findViewById(R.id.webview);

        myWebView.getSettings().setJavaScriptEnabled(true);
        myWebView.getSettings().setLoadWithOverviewMode(true);


        myWebView.loadUrl("http://yahoo.co.jp");

        myWebView.setWebViewClient(new MyWebViewClient());
        ActionBar myAction = getSupportActionBar();
        myAction.hide();


    }

    ////
    private class MyWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if ("yahoo.co.jp".equals(Uri.parse(url).getHost())) {

            ActionBar myAction = getSupportActionBar();
            myAction.hide();
            return false;
        }


            ActionBar myAction = getSupportActionBar();
            myAction.show();
            return false;
        }
     }




      ////////ここが今回の質問場所 戻るボタンでの挙動です。
      @Override
      public void onBackPressed() {
            if(myWebView!= null && myWebView.canGoBack()) {


                ////////////★ActionBar myAction = getSupportActionBar();
                ////////////★myAction.hide();

                myWebView.goBack();

            }
            else {
                super.onBackPressed();//if there is no previous page, close app
            }
    }



}

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

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

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

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

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

if(myWebView!= null && myWebView.canGoBack()) {

                 String webUrl = myWebView.getUrl();

                 if ("yahoo.co.jp".equals(Uri.parse(webUrl).getHost())) {

                    ActionBar myAction = getSupportActionBar();
                    myAction.hide();
                 }


                myWebView.goBack();

            }

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/05/24 13:14

    YT0014様
    有難うございます。
    確かに、と思いましてmyWebView.goBack();の後に
    myWebView.goBack();
    String webUrl = myWebView.getUrl();

    if ("yahoo.co.jp".equals(Uri.parse(webUrl).getHost())) {

    ActionBar myAction = getSupportActionBar();
    myAction.hide();
    }
    のようにしてみましたが、反応ないままでした。
    有難うございます;引き続き探ってみたいと思います!

    キャンセル

  • 2020/05/24 23:26

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

    キャンセル

  • 2020/05/27 09: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()を組み込むなり、いっそ諦める、などでなんとかうまく対処したいと思いますが・・
    なんとかご指示頂けたら有難いです、すみません・・。

    キャンセル

  • 2020/05/27 09: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();
      }
    }

    キャンセル

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

  • ただいまの回答率 87.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

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