📌  相关文章
📜  如何在 Android Studio 中使用 WebView 控制器构建新闻应用程序?

📅  最后修改于: 2021-10-20 12:13:42             🧑  作者: Mango

在本文中,我们将借助 Android Studio 中的 WebView 控制器制作一个新闻应用程序。通过制作这个应用程序,我们将学习如何在我们的 android 应用程序中访问 Internet 权限,以及如何使用 WebView 及其名为 WebView Controller 的类。制作此应用程序后,您还将了解 android studio 中的 Navigation Drawer 活动。那么,让我们开始吧!

如何构建新闻应用程序使用 Android Studio

我们将在本文中构建什么?

在此应用程序中,我们将使用 Navigation Drawer 活动并在其中设置不同报纸的不同片段。在导航抽屉的片段中,我们将使用 WebView 访问不同新闻频道的网站,最后,我们将创建一个 WebView Controller 类,以便我们可以在我们自己的应用程序中显示所有这些网站,而不是去浏览器.下面给出了一个示例 GIF,以了解我们将在本文中做什么。请注意,我们将使用Java语言来实现这个项目。

分步实施

第 1 步:创建一个新项目

打开 Android Studio 并通过选择Navigation Drawer Activity创建一个新项目。您将获得许多默认文件,但您必须仅在我们必须工作的地方进行更改。

第 2 步:使用 XML 文件

打开layout > nav_header_main.xml文件来设计我们的导航抽屉的标题。为此,请在其中使用以下代码-

XML


  
    
  
    
  


XML


  
    
  
        
        
        
  
    
  


XML

  
    
    
  
    
    
  
    
    
      


XML


  
    
      
    
    
  
    
    
  
    
    
      


XML


  
    
    
  


XML


  
    
      


XML


  
    
      


Java
import android.webkit.WebView;
import android.webkit.WebViewClient;
  
// class is extended to WebViewClient to access the WebView 
public class WebViewController extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
          
        // loadurl function will load the
        // url we will provide to our webview  
        view.loadUrl(url);
        return true;
    }
}


Java
package com.example.newsapp.ui.Home;
  
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
  
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
  
import com.example.newsapp.R;
import com.example.newsapp.WebViewController;
  
public class HomeFragment extends Fragment {
  
    private HomeViewModel homeViewModel;
  
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
          
        homeViewModel = new ViewModelProvider(this).get(HomeViewModel.class);
        View root = inflater.inflate(R.layout.fragment_home, container, false);
          
        // Created a WebView and used the loadurl method
        // to give url to WebView Controller class
        WebView webView = root.findViewById(R.id.web_view_zee);
  
        // Url of website is passed here
        webView.loadUrl("https://zeenews.india.com/");
  
        // WebViewController is used
        webView.setWebViewClient(new WebViewController());
        return root;
    }
}


Java
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
  
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
  
import com.example.newsapp.R;
import com.example.newsapp.WebViewController;
  
public class GalleryFragment extends Fragment {
  
    private GalleryViewModel galleryViewModel;
  
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        galleryViewModel = new ViewModelProvider(this).get(GalleryViewModel.class);
        View root = inflater.inflate(R.layout.fragment_gallery, container, false);
        WebView webView = root.findViewById(R.id.web_view_toi);
        webView.loadUrl("https://timesofindia.indiatimes.com/");
        webView.setWebViewClient(new WebViewController());
        return root;
    }
}


Java
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
  
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
  
import com.example.newsapp.R;
import com.example.newsapp.WebViewController;
  
public class SlideshowFragment extends Fragment {
  
    private SlideshowViewModel slideshowViewModel;
  
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        slideshowViewModel = new ViewModelProvider(this).get(SlideshowViewModel.class);
        View root = inflater.inflate(R.layout.fragment_slideshow, container, false);
        WebView webView = root.findViewById(R.id.web_view_hindustan);
        webView.loadUrl("https://www.hindustantimes.com/");
        webView.setWebViewClient(new WebViewController());
        return root;
    }
}


执行完上面的代码后,头文件的 UI 会是这样的:

打开menu > activity_main_drawer.xml文件并在其中使用以下代码,以便我们可以将不同的项目添加到导航抽屉并使用它们的片段。

XML



  
    
  
        
        
        
  
    
  

在activity_main_drawer.xml文件的下面代码设计实现之后看起来像

将 ActionBar 的颜色更改为“#201E1E”,这样它可以匹配我们应用程序徽标的颜色代码,我们的 UI 也可以变得更有吸引力。如果您不知道如何更改操作栏的颜色,那么您可以单击此处进行学习。转到layout > activity_main.xml并在其中使用以下代码。

XML


  
    
    
  
    
    
  
    
    
      

实现上述代码后,我们的 UI 看起来像这样

转到导航 > mobile_navigation.xml文件并在其中使用以下代码,以便我们可以指定项目的标题和标签,并可以轻松地在Java文件中使用它们。

XML



  
    
      
    
    
  
    
    
  
    
    
      

现在是在所有片段中插入 WebView 的时候了。打开fragment_home、fragment_gallery、fragment_slideshow XML文件,分别使用代码。

XML



  
    
    
  

XML



  
    
      

XML



  
    
      

第 3 步:在清单文件中添加 Internet 权限

现在我们添加了一段代码来获取访问互联网的权限,以便我们的 WebView 可以轻松工作。转到manifests > AndroidManifest.xml文件并将以下代码添加到其中。

第 4 步:使用Java文件

创建一个新的Java类,如下所示,并将其命名为“ WebViewController

WebViewController 中使用以下代码。 Java文件,以便可以执行使用网站 URL 的代码。

Java

import android.webkit.WebView;
import android.webkit.WebViewClient;
  
// class is extended to WebViewClient to access the WebView 
public class WebViewController extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
          
        // loadurl function will load the
        // url we will provide to our webview  
        view.loadUrl(url);
        return true;
    }
}

现在是时候处理片段的Java文件了。打开HomeFragment、GalleryFragment、SlideshowFragment Java文件,分别使用代码。

Java

package com.example.newsapp.ui.Home;
  
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
  
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
  
import com.example.newsapp.R;
import com.example.newsapp.WebViewController;
  
public class HomeFragment extends Fragment {
  
    private HomeViewModel homeViewModel;
  
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
          
        homeViewModel = new ViewModelProvider(this).get(HomeViewModel.class);
        View root = inflater.inflate(R.layout.fragment_home, container, false);
          
        // Created a WebView and used the loadurl method
        // to give url to WebView Controller class
        WebView webView = root.findViewById(R.id.web_view_zee);
  
        // Url of website is passed here
        webView.loadUrl("https://zeenews.india.com/");
  
        // WebViewController is used
        webView.setWebViewClient(new WebViewController());
        return root;
    }
}

Java

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
  
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
  
import com.example.newsapp.R;
import com.example.newsapp.WebViewController;
  
public class GalleryFragment extends Fragment {
  
    private GalleryViewModel galleryViewModel;
  
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        galleryViewModel = new ViewModelProvider(this).get(GalleryViewModel.class);
        View root = inflater.inflate(R.layout.fragment_gallery, container, false);
        WebView webView = root.findViewById(R.id.web_view_toi);
        webView.loadUrl("https://timesofindia.indiatimes.com/");
        webView.setWebViewClient(new WebViewController());
        return root;
    }
}

Java

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
  
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
  
import com.example.newsapp.R;
import com.example.newsapp.WebViewController;
  
public class SlideshowFragment extends Fragment {
  
    private SlideshowViewModel slideshowViewModel;
  
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        slideshowViewModel = new ViewModelProvider(this).get(SlideshowViewModel.class);
        View root = inflater.inflate(R.layout.fragment_slideshow, container, false);
        WebView webView = root.findViewById(R.id.web_view_hindustan);
        webView.loadUrl("https://www.hindustantimes.com/");
        webView.setWebViewClient(new WebViewController());
        return root;
    }
}

恭喜!!您已成功完成此新闻申请。您还可以为更多新闻频道添加更多数字片段(这是您从本文中学习的一项小任务)并使应用程序提供更多信息。这是我们应用程序的输出。

输出:

如果您想寻求帮助或导入项目,则可以访问 GitHub 链接:https://github.com/Karan-Jangir/News_app/tree/master

因此,我们制作了一个新闻应用程序,它使用 WebViewController 来访问新闻频道的网站,并很容易地在我们的应用程序中显示它们。

想要一个更快节奏和更具竞争力的环境来学习 Android 的基础知识吗?
单击此处前往由我们的专家精心策划的指南,旨在让您立即做好行业准备!