Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get loaded web page title in Android WebView?

I'm using a WebView in my application, I have a requirement to change the app title based on the page user is on. How can I do this in Android WebView?

I did this in iphone by following line

self.title = [webPage stringByEvaluatingJavaScriptFromString:@"document.title"]  @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         // Adds Progrss bar Support         this.getWindow().requestFeature(Window.FEATURE_PROGRESS);         setContentView(R.layout.webview );          // Makes Progress bar Visible         getWindow().setFeatureInt( Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON);           mWebView = (WebView) findViewById( R.id.webview ); //This is the id you gave          //to the WebView in the main.xml         mWebView.getSettings().setJavaScriptEnabled(true);            mWebView.getSettings().setSupportZoom(true);       //Zoom Control on web (You don't need this          //if ROM supports Multi-Touch               mWebView.getSettings().setBuiltInZoomControls(true); //Enable Multitouch if supported by ROM          // Load URL         Bundle b = getIntent().getExtras();         String url = b.getString("url");         Log.d(TAG, "url " + url);         mWebView.loadUrl(url);           // Sets the Chrome Client, and defines the onProgressChanged         // This makes the Progress bar be updated.         mWebView.setWebChromeClient(new WebChromeClient() {             public void onProgressChanged(WebView view, int progress){                 //Make the bar disappear after URL is loaded, and changes string to Loading...                 myActivity.setTitle("Loading...");                 myActivity.setProgress(progress * 100); //Make the bar disappear after URL is loaded                  // Return the app name after finish loading                 if(progress == 100)                     myActivity.setTitle(R.string.app_name);             }         });          mWebView.setWebViewClient(new WebViewClient(){              @Override             public boolean shouldOverrideUrlLoading(WebView view, String url) {                 view.loadUrl(url);                 return true;                 // return super.shouldOverrideUrlLoading(view, url);             }              @Override             public void onLoadResource(WebView view, String url) {                 // TODO Auto-generated method stub                 super.onLoadResource(view, url);             }              @Override             public void onPageFinished(WebView view, String url) {                 super.onPageFinished(view, url);                 ImageView logoImageView = (ImageView)findViewById(R.id.logoimage);                 logoImageView.setVisibility(View.GONE);                 Log.d(TAG, "view.getTitle() " + view.getTitle());                 myActivity.setTitle(view.getTitle());             }          });      } 
like image 495
Sam Avatar asked Nov 19 '11 09:11

Sam


People also ask

How to get title in WebView?

setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { ExperimentingActivity. this. setTitle(view. getTitle()); } });

What is Android system WebView com google Android WebView Android?

Android System WebView is a system component that lets Android apps display web content inside them without opening a dedicated browser. In other words, Android System WebView is a web browser engine or an embedded web browser dedicated solely for apps to show web content.


2 Answers

You'll have to use a custom WebViewClient to get this done. You will override the onPageFinished() method so when a new page finishes loading you can set the webview to the appropriate title.

Below is a sample implementation of the above:

    WebView mWebView = (WebView) findViewById(R.id.mwebview);     mWebView.setWebViewClient(new WebViewClient() {         @Override         public void onPageFinished(WebView view, String url) {             ExperimentingActivity.this.setTitle(view.getTitle());         }     }); 

You're a going to do that where you're initializing your webview. Replace the "ExperimentingActivity" to whatever you activity's name is.

If you're already overriding the WebViewClient, just add this function or the code inside to your already existing function.

You can get more info on the classes and functions I'm using here at:

Android Developers: Activity - setTitle()

Android Developers: WebViewClient

Android Developers: WebView

like image 163
DallaRosa Avatar answered Sep 23 '22 01:09

DallaRosa


My observation is that, you get the webpage title using WebChromeClient in lesser time than using WebViewClient

webview.setWebChromeClient(new WebChromeClient() {     @Override     public void onReceivedTitle(WebView view, String title) {         super.onReceivedTitle(view, title);         if (!TextUtils.isEmpty(title)) {             YourActivity.this.setTitle(title);         }     } }); 
like image 23
Zeba Avatar answered Sep 21 '22 01:09

Zeba