add: tutorial tab

This commit is contained in:
hyb1996
2017-08-22 18:11:14 +08:00
parent 602b84fc92
commit 42f6802598
21 changed files with 858 additions and 305 deletions

View File

@@ -0,0 +1,86 @@
package com.stardust.widget;
import android.app.Activity;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.res.Configuration;
import android.graphics.Rect;
import android.support.annotation.IntDef;
import android.support.annotation.Nullable;
import android.support.design.widget.AppBarLayout;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.View;
import android.view.ViewTreeObserver;
import android.view.Window;
import com.stardust.util.ViewUtil;
/**
* Created by Stardust on 2017/8/22.
*/
public class AppWithStatusBarLayout extends AppBarLayout {
public AppWithStatusBarLayout(Context context) {
super(context);
}
public AppWithStatusBarLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onWindowVisibilityChanged(int visibility) {
super.onWindowVisibilityChanged(visibility);
if (visibility == VISIBLE) {
setPadding();
}
}
@Override
protected void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setPadding();
}
private void setPadding() {
getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
setPadding(getPaddingLeft(), getStatusBarHeight(), getPaddingRight(), getPaddingBottom());
getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});
}
private int getStatusBarHeight() {
Rect rect = new Rect();
Window window = getWindow();
if (window == null) {
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 24, getResources().getDisplayMetrics());
}
window.getDecorView().getWindowVisibleDisplayFrame(rect);
return rect.top;
}
@Nullable
private Window getWindow() {
return getWindowForContext(getContext());
}
@Nullable
private Window getWindowForContext(Context context) {
if (context instanceof Activity) {
return ((Activity) context).getWindow();
}
if (context instanceof ContextWrapper) {
return getWindowForContext(((ContextWrapper) context).getBaseContext());
}
return null;
}
}

View File

@@ -0,0 +1,109 @@
package com.stardust.widget;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.support.v4.widget.SwipeRefreshLayout;
import android.util.AttributeSet;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.FrameLayout;
import android.widget.ProgressBar;
import com.stardust.scriptdroid.R;
import org.androidannotations.annotations.ViewById;
/**
* Created by Stardust on 2017/8/22.
*/
public class EWebView extends FrameLayout implements SwipeRefreshLayout.OnRefreshListener {
private WebView mWebView;
private ProgressBar mProgressBar;
SwipeRefreshLayout mSwipeRefreshLayout;
public EWebView(Context context) {
super(context);
init();
}
public EWebView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
inflate(getContext(), R.layout.ewebview, this);
mWebView = (WebView) findViewById(R.id.web_view);
mProgressBar = (ProgressBar) findViewById(R.id.progress_bar);
mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh_layout);
mSwipeRefreshLayout.setOnRefreshListener(this);
setUpWebView();
}
private void setUpWebView() {
WebSettings settings = mWebView.getSettings();
settings.setUseWideViewPort(true);
settings.setBuiltInZoomControls(true);
settings.setSupportZoom(true);
settings.setLoadWithOverviewMode(true);
settings.setJavaScriptEnabled(true);
mWebView.setWebViewClient(new MyWebViewClient());
mWebView.setWebChromeClient(new MyWebChromeClient());
}
public WebView getWebView() {
return mWebView;
}
@Override
public void onRefresh() {
mWebView.reload();
}
private class MyWebChromeClient extends WebChromeClient {
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
mProgressBar.setProgress(newProgress);
}
}
private class MyWebViewClient extends WebViewClient {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
mProgressBar.setProgress(0);
mProgressBar.setVisibility(VISIBLE);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
mProgressBar.setVisibility(GONE);
mSwipeRefreshLayout.setRefreshing(false);
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
view.loadUrl(request.getUrl().toString());
return true;
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
}