android:如何让js代码更改网络视图的大小

时间:2018-08-08 01:57:18

标签: android android-webview

我正在使用API​​ 19(android4.4)开发一个android应用程序。我有一个linearLayout视图嵌套了另一个linearLayout视图。现在,我想通过js代码来更改linearLayout的高度,但这是行不通的。

active_main.xml

<LinearLayout xmlns="...." ...
    android:layout_width="match_parent" 
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:id="@id/sContainer"
    tools:context=".MainActivity">
</LinearLayout>

java测试代码:

...
private LinearLayout webViewContainer;
...
private void initView(){
    LinearLayout container=(LinearLayout)findViewById(R.id.sContainer);
    //add a child linearLayout
    webViewContainer=new LinearLayout(this);
    LinearLayout.LayoutParams layoutParams=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,200);
    webViewContainer.setLayoutParams(layoutParams);
    //add a child webview in this linearlayout
    WebView webview=(WebView)new WebView(this);
    LinearLayout.LayoutParams webParams=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT);
    webview.setLayoutParams(webParams);
    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webView.addJavascriptInterface(new JsInteraction(), "bridge");
    webView.loadUrl("http://xxxx/index.html");
    webView.setWebViewClient(new WebViewClient(){
        @Override
        public void onPageFinished(WebView view, String url){
            view.loadUrl("javascript:callHtml('show')");
        }
    });
    webViewContainer.addView(webview);
    container.addView(webViewContainer);
}


class JsInteraction{
    @JavascriptInterface
    public void expand(){
        LinearLayout.LayoutParams layoutParams=webViewContainer.getLayoutParams();
        layoutParams.height = 500;
        webViewContainer.setLayoutParams(layoutParams);
        Log.v("height", layoutParams.height+"");    
    }
}

index.html js代码

<script>
function callHtml(method){
    case 'show':
        setTimeout(function(){
            bridge.expand();//call app to expand after 5s
        },5000);
        break;
}
</script>

日志显示layoutParams.height已更改为500,但是模拟器没有任何反应,这是我做错了吗? 另外,如果我单击一个按钮来更改layoutParams的高度,则它可以工作。

2 个答案:

答案 0 :(得分:1)

那是“可能的”,因为您没有调用requestLayout,但在更改布局(视图的布局无效)之后就不需要了

  

当某些更改使该视图的布局无效时调用此函数。这将安排视图树的布局遍历。当视图层次结构当前处于布局阶段(isInLayout()中)时,不应调用此方法。如果正在进行布局,则可以在当前布局阶段结束时(然后布局将再次运行)或当前阶段结束时接受请求。绘制框架并进行下一个布局。

因此,更改高度后,您应该致电requestLayout ...

linearLayout.requestLayout();

答案 1 :(得分:0)

我已经解决了此问题,只需将JsInteraction代码更改为以下代码:

72956 134 874 02367 458 20 042 0220 53.000 45.00