{"id":3640,"date":"2025-04-14T07:37:32","date_gmt":"2025-04-14T07:37:32","guid":{"rendered":"https:\/\/alsaeeddev.com\/?p=3640"},"modified":"2025-04-14T07:43:58","modified_gmt":"2025-04-14T07:43:58","slug":"simple-web-browser-in-android-using-webview-in-java","status":"publish","type":"post","link":"https:\/\/alsaeeddev.com\/shop\/simple-web-browser-in-android-using-webview-in-java\/","title":{"rendered":"Simple Web Browser in Android Using WebView in Java"},"content":{"rendered":"<p>Looking to create a Simple Web Browser in Android Using WebView in Java that mimics Google Chrome? In this tutorial, we\u2019ll walk you through building a full-featured, modern web browser in Java using Android Studio. This browser includes essential features like web page loading, navigation buttons, progress bar, and URL input with &#8220;GO&#8221; button support \u2014 all wrapped in a sleek UI similar to Chrome.<\/p>\n<h3>\ud83d\udd27 Features of This Android Web Browser<\/h3>\n<ul>\n<li>URL input bar with IME GO button handling<\/li>\n<li>Full WebView support with JavaScript enabled<\/li>\n<li>Progress bar to indicate page loading status<\/li>\n<li>Back and Forward navigation buttons<\/li>\n<li>Proper back press handling using OnBackPressedDispatcher<\/li>\n<\/ul>\n<hr \/>\n<h3>\ud83d\udcf1 MainActivity.java \u2013 Complete Code Overview<\/h3>\n<p>The heart of our browser lies in the <code>MainActivity.java<\/code>. Here&#8217;s what each component does:<\/p>\n<pre><code>public class MainActivity extends AppCompatActivity {\r\n\r\n    private WebView webView;\r\n    private EditText urlInput;\r\n    private ProgressBar progressBar;\r\n    private ImageButton backButton, forwardButton;\r\n\r\n    @Override\r\n    protected void onCreate(Bundle savedInstanceState) {\r\n        super.onCreate(savedInstanceState);\r\n        setContentView(R.layout.activity_main);\r\n        getOnBackPressedDispatcher().addCallback(this, backPressedCallback);\r\n\r\n        urlInput = findViewById(R.id.urlInput);\r\n        webView = findViewById(R.id.webView);\r\n        progressBar = findViewById(R.id.progressBar);\r\n        backButton = findViewById(R.id.backButton);\r\n        forwardButton = findViewById(R.id.forwardButton);\r\n\r\n        \/\/ Enable JavaScript\r\n        webView.getSettings().setJavaScriptEnabled(true);\r\n\r\n        \/\/ Handle page load progress\r\n        webView.setWebChromeClient(new WebChromeClient() {\r\n            public void onProgressChanged(WebView view, int progress) {\r\n                progressBar.setProgress(progress);\r\n                progressBar.setVisibility(progress == 100 ? View.GONE : View.VISIBLE);\r\n            }\r\n        });\r\n\r\n        \/\/ Load initial page\r\n        webView.setWebViewClient(new WebViewClient());\r\n        webView.loadUrl(\"https:\/\/www.google.com\");\r\n\r\n        \/\/ Handle \"GO\" key in soft keyboard\r\n        urlInput.setOnEditorActionListener((v, actionId, event) -&gt; {\r\n            if (actionId == EditorInfo.IME_ACTION_GO || actionId == EditorInfo.IME_ACTION_DONE) {\r\n                loadUrlFromInput();\r\n                return true;\r\n            }\r\n            return false;\r\n        });\r\n\r\n        \/\/ Navigation buttons\r\n        backButton.setOnClickListener(v -&gt; {\r\n            if (webView.canGoBack()) webView.goBack();\r\n        });\r\n\r\n        forwardButton.setOnClickListener(v -&gt; {\r\n            if (webView.canGoForward()) webView.goForward();\r\n        });\r\n    }\r\n\r\n    private void loadUrlFromInput() {\r\n        String url = urlInput.getText().toString().trim();\r\n        if (!url.startsWith(\"http\")) {\r\n            url = \"https:\/\/\" + url;\r\n        }\r\n        webView.loadUrl(url);\r\n    }\r\n\r\n    \/\/ Handle back press using OnBackPressedDispatcher\r\n    private final OnBackPressedCallback backPressedCallback = new OnBackPressedCallback(true) {\r\n        @Override\r\n        public void handleOnBackPressed() {\r\n            if (webView.canGoBack()) {\r\n                webView.goBack();\r\n            } else {\r\n                finish();\r\n            }\r\n        }\r\n    };\r\n}<\/code><\/pre>\n<hr \/>\n<h3>\ud83e\uddf1 activity_main.xml \u2013 Layout Code<\/h3>\n<pre><code>&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;LinearLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\r\n    android:layout_width=\"match_parent\"\r\n    android:layout_height=\"match_parent\"\r\n    android:orientation=\"vertical\"&gt;\r\n\r\n    &lt;LinearLayout\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:orientation=\"horizontal\"\r\n        android:padding=\"8dp\"&gt;\r\n\r\n        &lt;ImageButton\r\n            android:id=\"@+id\/backButton\"\r\n            android:layout_width=\"40dp\"\r\n            android:layout_height=\"40dp\"\r\n            android:background=\"@android:color\/transparent\"\r\n            android:contentDescription=\"Back\"\r\n            android:src=\"@android:drawable\/ic_media_previous\" \/&gt;\r\n\r\n        &lt;EditText\r\n            android:id=\"@+id\/urlInput\"\r\n            android:layout_width=\"0dp\"\r\n            android:layout_height=\"40dp\"\r\n            android:layout_weight=\"1\"\r\n            android:background=\"@drawable\/et_bg\"\r\n            android:hint=\"Enter URL\"\r\n            android:imeOptions=\"actionGo\"\r\n            android:inputType=\"textUri\"\r\n            android:lines=\"1\"\r\n            android:layout_marginStart=\"3dp\"\r\n            android:layout_marginEnd=\"3dp\"\r\n            android:paddingStart=\"8dp\"\r\n            android:paddingEnd=\"8dp\" \/&gt;\r\n\r\n        &lt;ImageButton\r\n            android:id=\"@+id\/forwardButton\"\r\n            android:layout_width=\"40dp\"\r\n            android:layout_height=\"40dp\"\r\n            android:background=\"@android:color\/transparent\"\r\n            android:contentDescription=\"Forward\"\r\n            android:src=\"@android:drawable\/ic_media_next\" \/&gt;\r\n\r\n    &lt;\/LinearLayout&gt;\r\n\r\n    &lt;ProgressBar\r\n        android:id=\"@+id\/progressBar\"\r\n        style=\"?android:attr\/progressBarStyleHorizontal\"\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"4dp\"\r\n        android:indeterminate=\"false\"\r\n        android:max=\"100\" \/&gt;\r\n\r\n    &lt;WebView\r\n        android:id=\"@+id\/webView\"\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"0dp\"\r\n        android:layout_weight=\"1\" \/&gt;\r\n\r\n&lt;\/LinearLayout&gt;\r\n\r\n<\/code><\/pre>\n<hr \/>\n<p><iframe loading=\"lazy\" title=\"Build a Simple Web Browser in Android Using WebView in Java | Free Source Code  #shorts #webbrowser\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/xlcignt0LAE?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n<hr \/>\n<p><a href=\"https:\/\/github.com\/alsaeeddev\/SimpleWebBrowser\/archive\/refs\/heads\/main.zip\">Download Source Code<\/a><\/p>\n<h3>\ud83c\udfa8 UI Design Tips<\/h3>\n<ul>\n<li>Use a clean layout with a URL input bar on top.<\/li>\n<li>Keep navigation buttons intuitive with back\/forward arrows.<\/li>\n<li>Use a small progress bar under the input to show load progress.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Looking to create a Simple Web Browser in Android Using WebView in Java that mimics Google Chrome? In this tutorial, we\u2019ll walk you through building a full-featured, modern web browser in Java using Android Studio. This browser includes essential features like web page loading, navigation buttons, progress bar, and URL input with &#8220;GO&#8221; button support [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3643,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,117,164],"tags":[43,40,45,49,48,47,39,41,42,51,46,50,44],"class_list":["post-3640","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-android","category-java","category-source-codes","tag-android-browser-java-code","tag-android-chrome-like-browser","tag-android-go-button-url-bar","tag-android-java-webview-tutorial","tag-android-studio-web-browser-tutorial","tag-android-url-input-bar","tag-android-web-browser-tutorial","tag-android-webview-app","tag-build-browser-in-android-studio","tag-create-browser-android-java","tag-custom-browser-android","tag-mobile-browser-app-android","tag-webview-with-progress-bar"],"_links":{"self":[{"href":"https:\/\/alsaeeddev.com\/shop\/wp-json\/wp\/v2\/posts\/3640","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/alsaeeddev.com\/shop\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/alsaeeddev.com\/shop\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/alsaeeddev.com\/shop\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/alsaeeddev.com\/shop\/wp-json\/wp\/v2\/comments?post=3640"}],"version-history":[{"count":12,"href":"https:\/\/alsaeeddev.com\/shop\/wp-json\/wp\/v2\/posts\/3640\/revisions"}],"predecessor-version":[{"id":3792,"href":"https:\/\/alsaeeddev.com\/shop\/wp-json\/wp\/v2\/posts\/3640\/revisions\/3792"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/alsaeeddev.com\/shop\/wp-json\/wp\/v2\/media\/3643"}],"wp:attachment":[{"href":"https:\/\/alsaeeddev.com\/shop\/wp-json\/wp\/v2\/media?parent=3640"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alsaeeddev.com\/shop\/wp-json\/wp\/v2\/categories?post=3640"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/alsaeeddev.com\/shop\/wp-json\/wp\/v2\/tags?post=3640"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}