java - 如何在 webView 中向网站添加 CSS(填充)

标签 java android css android-webview

我一直想知道如何设置 padding-bottom(自定义 CSS)以使用来自 RemoteConfig 的网页(有一个 URL)。我无权访问网页,因此无法直接在源文件中对其进行编辑。

这是我的代码:

public class PlayoffsFragment extends BaseFragment {
    private WebView webView;

    public static PlayoffsFragment newInstance(Bundle args) {
        PlayoffsFragment fragment = new PlayoffsFragment();
        fragment.setArguments(args);
        return fragment;
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater,@Nullable ViewGroup container,@Nullable Bundle savedInstanceState) {
        rootView =  inflater.inflate(R.layout.fragment_playoffs, container, false);
    setActionBar();
    setViews();
    setViewContents();
        return rootView; 
    }

    @Override
    public void onPrepareOptionsMenu(Menu menu) {
        super.onPrepareOptionsMenu(menu);
        hideCalendarMenuItem(); 
    }

    @Override
    protected void setActionBar() {
        showActionBar();
        setContentMarginOff();
        changeToolbarBackground(R.color.transparent);
        changeToolbarIconsColor(ContextCompat.getColor(getContext(), R.color.white)); }


    @Override
    protected void setViews() {
        webView = rootView.findViewById(R.id.webview);
        webView.setWebViewClient(new WebViewClient());
        webView.setWebChromeClient(new WebChromeClient());
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setDomStorageEnabled(true);
        webView.getSettings().setDatabaseEnabled(true);
        webView.getSettings().setMinimumFontSize(1);
        webView.getSettings().setMinimumLogicalFontSize(1);
    }

    @Override
    protected void setViewContents() {
        webView.loadUrl(BuildConfig.WEB_URL);
    }

}

最佳答案

好吧,我设法做到了。对于任何想做类似事情的人,这里是我更新的代码:

@Override
protected void setViews() {
    webView.setWebViewClient(new WebViewClient());
    webView.setWebChromeClient(new WebChromeClient());
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setDomStorageEnabled(true);
    webView.getSettings().setDatabaseEnabled(true);
    webView.getSettings().setMinimumFontSize(1);
    webView.getSettings().setMinimumLogicalFontSize(1);
    webView.setWebViewClient(new WebViewClient(){

        public void onPageFinished(WebView view, String url){
            injectCSS();
            super.onPageFinished(view, url);
        }
    });
}

@Override
protected void setViewContents() {
    webView.loadUrl(url);
    }

private void injectCSS() {
    try {
        InputStream inputStream = getContext().getAssets().open("styles.css");
        byte[] buffer = new byte[inputStream.available()];
        inputStream.read(buffer);
        inputStream.close();
        String encoded = Base64.encodeToString(buffer, Base64.NO_WRAP);
        webView.loadUrl("javascript:(function() {" +
                "var parent = document.getElementsByTagName('head').item(0);" +
                "var style = document.createElement('style');" +
                "style.type = 'text/css';" +
                "style.innerHTML = window.atob('" + encoded + "');" +
                "parent.appendChild(style)" +
                "})()");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

我在 Assets 文件夹中创建了 styles.css。

关于java - 如何在 webView 中向网站添加 CSS(填充),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54869365/

相关文章:

android - 在 listView 中加载异步图片

java - 如何从非 Activity 和 finish() 获取应用程序上下文;?

css - 使用 CSS3 在页面加载时动画化元素的不透明度

css - 如何确保选择选项文本在 IE 中居中对齐?

html - 如何正确对齐图像和 h1 标题?

java - 将多个图形对象添加到一个 JFrame

java - 如何在 Java 中使用 WebResourceRequest 获取 WebView 的 Url?

java - 读取和解析文本文件android

java - 如何使用java代码连接到SHOUTCAST服务器

php - php 中的问题 "header"