게시판 답변
-
글쓴이글
-
// 2021-05-05까지 Fragment_Blank.xml 디폴트
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".BlankFragment"> <ScrollView android:layout_width="match_parent" android:layout_height="wrap_content" android:isScrollContainer="false"> <!-- TODO: Update blank fragment layout --> <TextView android:id="@+id/text_blank" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="16dp" android:background="#ffffff" android:text="@string/hello_blank_fragment" /> </ScrollView> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> <!--WebView android:id="@+id/blank_wvLayout" android:layout_width="fill_parent" android:layout_height="fill_parent" tools:ignore="MissingConstraints" /--> </FrameLayout>
//2021-05-05까지 activity_crawl_main의 디폴트
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:openDrawer="start" tools:context=".CrawlActivity"> <FrameLayout android:id="@+id/fl_activity_main" android:layout_width="match_parent" android:layout_height="match_parent"> <WebView android:id="@+id/crawl_wvLayout" android:layout_width="fill_parent" android:layout_height="fill_parent" tools:ignore="MissingConstraints" /> </FrameLayout> <com.google.android.material.navigation.NavigationView android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:fitsSystemWindows="true" app:headerLayout="@layout/nav_header_main" app:menu="@menu/activity_main_drawer" /> </androidx.drawerlayout.widget.DrawerLayout>
프로그레스를 위한 코드
private class HelloWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.setVisibility(View.GONE); mProgressDialog.setTitle("Loading"); mProgressDialog.show(); mProgressDialog.setMessage("페이지 자료를 모아오는 중입니다"); return false; } @Override public void onPageFinished(WebView view, String url) { mProgressDialog.dismiss(); animate(view); view.setVisibility(View.VISIBLE); super.onPageFinished(view,url); } } private void animate(final WebView view) { Animation anim = AnimationUtils.loadAnimation(getBaseContext(), android.R.anim.slide_in_left); view.startAnimation(anim); }
후미 웹뷰에 다음까지 달아주어야 완성
webView.setWebViewClient(new HelloWebViewClient());
Activity Default는 스택이 쌓이지 않음. 그러므로 Layout에서도 history true 기본이 적용되지 않음.
다음 코드를 넣어야 함@Override public boolean onKeyDown(int keyCode, KeyEvent event) { WebView view = (WebView) findViewById(R.id.crawl_wvLayout); if ((keyCode == KeyEvent.KEYCODE_BACK) && view.canGoBack()) { view.goBack(); return true; } return super.onKeyDown(keyCode, event); }
activity_crawl_main의 디폴트
activity_main과 manifest와의 상관 관계
균형 깨지면 error<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".CrawlActivity"> <FrameLayout android:id="@+id/fl_activity_main" android:layout_width="match_parent" android:layout_height="match_parent"> <WebView android:id="@+id/crawl_wvLayout" android:layout_width="fill_parent" android:layout_height="fill_parent" tools:ignore="MissingConstraints" /> </FrameLayout> </RelativeLayout>
이상적인 Jsoup
// 2021-4-31 Jsoup through Thread // 2021-04-30 // 2nd // URL Address String url = "https://www.biblegateway.com/verse/en/exodus%203%3A16"; //String url = "https://mimoonchurch.net/myday.html"; Title AsyncTask; // 2021-04-30 //@Override private class Title extends android.os.AsyncTask<Void, Void, Void> { String title; String element; @Override protected Void doInBackground(Void... voids) { try { // Connect to the web site Document document = Jsoup.connect(url).get(); // Get the html document title // point line title = document.title(); // document.body(); // Elements status = document.select("#status"); //h1.id Exporting good // title = status.text(); // h1.id Exporting good //Elements Title = document.select("title"); //title = document.select("h1"); // 2021-4-31 gateway // Elements pList = document.select("div.singleverse > div.singleverse-text"); // String tmp=""; // for (Element li : pList) { // tmp = tmp + li.text()+"\n"; // Log.i("test","ok:"+ tmp); // System.out.printIn( // e.select("span.item_num").get(0).html() + // e.select("span.item_title").get(0).html() //); //} } catch (IOException e) { e.printStackTrace(); } return null; } protected void onPreExecute() { super.onPreExecute(); mProgressDialog = new ProgressDialog(CrawlActivity.this); mProgressDialog.setTitle("Power Bible engine 3.5c1"); mProgressDialog.setMessage(url); mProgressDialog.setIndeterminate(false); mProgressDialog.show(); } @Override protected void onPostExecute(Void result) { // Set title into TextView TextView txttitle = (TextView) findViewById(R.id.text_blank); txttitle.setText(title); // txttitle.setText(title); mProgressDialog.dismiss(); } }
창 전환 효과 부분:
ProgressDialog mProgressDialog; private class HelloWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.setVisibility(View.GONE); mProgressDialog.setTitle("Loading"); mProgressDialog.show(); mProgressDialog.setMessage("페이지를 불러옵니다"); return false; } @Override public void onPageFinished(WebView view, String url) { mProgressDialog.dismiss(); animate(view); view.setVisibility(View.VISIBLE); super.onPageFinished(view,url); } } private void animate(final WebView view) { Animation anim = AnimationUtils.loadAnimation(getBaseContext(), android.R.anim.slide_in_left); view.startAnimation(anim); }
이상적 소스 (그러나 느림)
activity_main.xml 내용<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" tools:context=".MainActivity"> <WebView android:id="@+id/wvLayout" android:layout_width="fill_parent" android:layout_height="fill_parent" tools:ignore="MissingConstraints" /> </androidx.constraintlayout.widget.ConstraintLayout>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.mimoonchurch.powerbible"> <uses-permission android:name="android.permission.INTERNET"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.Powerbible"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
strings.xml 내용에:
<resources> <string name="app_name">파워바이블</string> </resources>
themes.xml 내용에:
<resources xmlns:tools="http://schemas.android.com/tools"> <!-- Base application theme. --> <style name="Theme.Powerbible" parent="Theme.AppCompat.Light.NoActionBar"> <!-- Primary brand color. --> <item name="colorPrimary">@color/purple_500</item> <item name="colorPrimaryVariant">@color/purple_700</item> <item name="colorOnPrimary">@color/white</item> <!-- Secondary brand color. --> <item name="colorSecondary">@color/teal_200</item> <item name="colorSecondaryVariant">@color/teal_700</item> <item name="colorOnSecondary">@color/black</item> <!-- Status bar color. --> <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item> <!-- Customize your theme here. --> </style> </resources>
MainActivity.java 내용에
package com.mimoonchurch.powerbible; import android.app.Activity; import android.app.ProgressDialog; import android.os.Bundle; import android.view.KeyEvent; import android.view.View; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.webkit.WebView; import android.webkit.WebViewClient; public class MainActivity extends Activity { ProgressDialog mProgressDialog; private class HelloWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.setVisibility(View.GONE); mProgressDialog.setTitle("Loading"); mProgressDialog.show(); mProgressDialog.setMessage("Loading " + url); return false; } @Override public void onPageFinished(WebView view, String url) { mProgressDialog.dismiss(); animate(view); view.setVisibility(View.VISIBLE); super.onPageFinished(view, url); } } private void animate(final WebView view) { Animation anim = AnimationUtils.loadAnimation(getBaseContext(), android.R.anim.slide_in_left); view.startAnimation(anim); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { WebView view = (WebView) findViewById(R.id.wvLayout); if ((keyCode == KeyEvent.KEYCODE_BACK) && view.canGoBack()) { view.goBack(); return true; } return super.onKeyDown(keyCode, event); } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mProgressDialog = new ProgressDialog(this); WebView webView = (WebView) findViewById(R.id.wvLayout); webView.setVerticalScrollBarEnabled(false); webView.setHorizontalScrollBarEnabled(false); webView.getSettings().setJavaScriptEnabled(true); webView.loadUrl("https://mimoonchurch.net/"); webView.setWebViewClient(new HelloWebViewClient()); } }
기능하지 않았던 원인:
web.loadUrl로 선언 된 WebView와 일치를 안 시켰기 때문.
아래 코드의 경우
public void onBackPressed() { if (webView.canGoBack()) webView.goBack(); else finish(); }
webView로는 작동을 안 하지만(다른 개체로 인식되므로)
아래와 같이 web으로 인식되는 것은 web.loadUrl으로 선언된 url과 일치하기 때문
상기의 다양한 코드를 사용할 수 있음public void onBackPressed() { if (web.canGoBack()) web.goBack(); else finish(); }
-
글쓴이글