在本文中,我们将借助 Android Studio 中的 WebView 控制器制作一个新闻应用程序。通过制作这个应用程序,我们将学习如何在我们的 android 应用程序中访问 Internet 权限,以及如何使用 WebView 及其名为 WebView Controller 的类。制作此应用程序后,您还将了解 android studio 中的 Navigation Drawer 活动。那么,让我们开始吧!
我们将在本文中构建什么?
在此应用程序中,我们将使用 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 来访问新闻频道的网站,并很容易地在我们的应用程序中显示它们。