Как загрузить заголовок веб-страницы в Android WebView?

Я использую WebView в своем приложении, у меня есть требование изменить название приложения на основе пользователя страницы. Как это сделать в Android WebView?

Я сделал это в iphone по следующей строке

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()); } }); } 

Solutions Collecting From Web of "Как загрузить заголовок веб-страницы в Android WebView?"

Для этого вам нужно будет использовать собственный WebViewClient. Вы переопределите метод onPageFinished (), поэтому, когда новая страница завершит загрузку, вы можете настроить веб-просмотр на соответствующий заголовок.

Ниже приведен пример реализации вышеизложенного:

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

Вы собираетесь сделать это, когда вы инициализируете свой веб-просмотр. Замените «ExperimentingActivity» на то, что имя вашей деятельности.

Если вы уже переопределяете WebViewClient, просто добавьте эту функцию или код внутри вашей уже существующей функции.

Вы можете получить дополнительную информацию о классах и функциях, которые я использую здесь:

Разработчики Android: Activity – setTitle ()

Разработчики Android: WebViewClient

Разработчики Android: WebView

Мое замечание состоит в том, что вы получаете заголовок веб-страницы, используя WebChromeClient в меньшее время, чем использование 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); } } }); 

Поэтому мой опыт, который вы должны использовать onReceivedTitle и onPageFinished, оба. Я нахожу, что иногда onPageFinished вы не будете получать уведомления, если вы используете интерфейс-маршрутизатор или что-то подобное. И onReceivedTitle имеет недостаток, о котором упоминается @ michael-levy.

Что делать, если вам не нужен весь заголовок и просто доменное имя, например, если вы хотите показывать только «Google» на http://www.google.com, и у вас есть все параметры запроса в этом заголовке.

  URL hostUrl= new URL(webView.getUrl()); String title = hostUrl.getHost(); title = title.startsWith("www.") ? title.substring(4) : title; 
 private WebViewClient mWvClient = new WebViewClient() { @Override public void doUpdateVisitedHistory(WebView view, String url, boolean isReload) { String title = view.getTitle();//getTitle super.doUpdateVisitedHistory(view, url, isReload); } }