android+Jquery mobile 利用webView接受html传来的数据 解决html放到webView中四周留白的问题

在可以让jquery mobile的html页面可以在Android中显示之后,想做到可以在后台接收并用log输出前端传来的参数

在查阅了网上的资料,发现webView提供了共java和javaScript互相调用的接口。

首先在控制布局的active_main.xml中加入webView并添加id为webView(在activity中根据id获得该view)

[html]  view plain  copy
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:paddingBottom="@dimen/activity_vertical_margin"  
  6.     android:paddingLeft="@dimen/activity_horizontal_margin"  
  7.     android:paddingRight="@dimen/activity_horizontal_margin"  
  8.     android:paddingTop="@dimen/activity_vertical_margin"  
  9.     tools:context=".MainActivity" >  
  10.   
  11.     <WebView     
  12.     android:layout_width="fill_parent"     
  13.     android:layout_height="fill_parent"    
  14.     android:scrollbars="none"   
  15.     android:id="@+id/webview"     
  16.     />   
  17.   
  18. </RelativeLayout>  
接着完成User类 ,类里只有两个属性,并完成showUser方法,该方法接受前台传来的用户名和密码,并在log中输出

[java]  view plain  copy
  1. package com.example.test;  
  2.   
  3. import android.util.Log;  
  4.   
  5. public class User {  
  6.       
  7.   
  8.     private String userName = "";  
  9.     private String password = "";  
  10.       
  11.     public String getUserName() {  
  12.           
  13.         return userName;  
  14.     }  
  15.     public void setUserName(String userName) {  
  16.           
  17.         this.userName = userName;  
  18.     }  
  19.     public String getPassword() {  
  20.           
  21.         return password;  
  22.     }  
  23.     public void setPassword(String password) {  
  24.           
  25.         this.password = password;  
  26.     }  
  27.       
  28.     public void showUser(String userName, String passWord){  
  29.           
  30.         Log.i("username", userName);  
  31.         Log.i("passWord", passWord);  
  32.     }  
  33. }  

接着完成MainActivity,addJavascriptInterface是给user对象起个别名为user,前端的js通过window.user.showUser("","")调用其函数。

[java]  view plain  copy
  1. package com.example.test;  
  2.   
  3. import android.os.Bundle;  
  4. import android.annotation.SuppressLint;  
  5. import android.app.Activity;  
  6. import android.app.AlertDialog;  
  7. import android.view.Menu;  
  8. import android.view.View;  
  9. import android.webkit.WebChromeClient;  
  10. import android.webkit.WebSettings;  
  11. import android.webkit.WebView;  
  12.   
  13. import org.apache.cordova.*;  
  14.   
  15. public class MainActivity extends DroidGap {  
  16.       
  17.     private User user = new User();  
  18.   
  19.     @SuppressLint({ "JavascriptInterface""SetJavaScriptEnabled" })  
  20.     @Override  
  21.     public void onCreate(Bundle savedInstanceState) {  
  22.         super.onCreate(savedInstanceState);  
  23.                 super.setContentView(R.layout.activity_main);  
  24.         //get webView  
  25.         WebView webView = (WebView) findViewById(R.id.webview);   
  26.         //enable support javaScript  
  27.         webView.getSettings().setJavaScriptEnabled(true);  
  28.         //set an alias for User  
  29.         webView.addJavascriptInterface(user, "user");   
  30.             webView.loadUrl("file:///android_asset/www/index.html");   
  31.     }  
  32.   
  33.       
  34.     @Override  
  35.     public boolean onCreateOptionsMenu(Menu menu) {  
  36.         // Inflate the menu; this adds items to the action bar if it is present.  
  37.         getMenuInflater().inflate(R.menu.main, menu);  
  38.         return true;  
  39.     }  
  40.   
  41. }  

接着完成index.html,该页面中只有两个输入框和一个提交按钮。function ok()用于将两个输入框的内容传给后台的showUser函数

[html]  view plain  copy
  1. <!DOCTYPE html>   
  2. <html>  
  3. <head>  
  4. <meta charset="utf-8">  
  5. <title>jQuery Mobile Web</title>  
  6. <meta name="viewport" content="width=device-width" />   
  7. <link href="css/jquery.mobile.structure-1.3.2.css" rel="stylesheet" type="text/css"/>  
  8. <link href="css/jquery.mobile-1.3.2.css" rel="stylesheet" type="text/css"/>  
  9. <script src="js/jquery.js" type="text/javascript"></script>  
  10. <script src="js/jquery.mobile-1.3.2.min.js" type="text/javascript"></script>  
  11. <script>  
  12. function ok() {   
  13.   var username = document.getElementById("username").value;  
  14.   var password = document.getElementById("password").value;  
  15.   window.user.showUser(username, password );  
  16. }   
  17. </script>  
  18. </head>   
  19. <body>   
  20.   
  21. <div data-role="page" data-control-title="Home" id="page1">  
  22.     <div data-theme="e" data-role="header" data-position="fixed">  
  23.         <span class="ui-title">  
  24.         </span>  
  25.     </div>  
  26.     <div data-role="content">  
  27.         <div data-role="fieldcontain" data-controltype="textinput">  
  28.             <label for="username">  
  29.                 username  
  30.             </label>  
  31.             <input name="username" id="username" placeholder="" value="" type="text">  
  32.         </div>  
  33.         <div data-role="fieldcontain" data-controltype="textinput">  
  34.             <label for="password">  
  35.                 password  
  36.             </label>  
  37.             <input name="password" id="password" placeholder="" value="" type="password">  
  38.         </div>  
  39.         <input id="submit" type="submit" data-inline="true" data-icon="star" data-iconpos="left"  
  40.         value="Submit" data-mini="true" onClick = "ok()">  
  41.     </div>  
  42. </div>  
  43. </body>  
  44. </html>  
都完成之后试了一下,发现在点击submit按钮时,后台可以接收前台的内容并显示了。




但是可以发现显示的html四周留白,并没有占满整个屏幕。

试过了网上的多种解决方法,都没有解决问题。

网上解决方法一:

WebSetting settings = webView.getSettings();
settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);

网上解决方法二:
settings.setUseWideViewPort(true);
settings.setLoadWithOverviewMode(true);
网上解决方法三:

DisplayMetrics metrics = new DisplayMetrics();
 getWindowManager().getDefaultDisplay().getMetrics(metrics);

int mDensity = metrics.densityDpi;

    if (mDensity == 120) {
              settings.setDefaultZoom(ZoomDensity.CLOSE);
          }else if (mDensity == 160) {
              settings.setDefaultZoom(ZoomDensity.MEDIUM);
          }else if (mDensity == 240) {
              settings.setDefaultZoom(ZoomDensity.FAR);
          }

网上解决方法四:

    隐藏webView 的scrollbar

试了以上方法都不管用,最后发现是在控制布局的activity_main.xml中有设置默认的边距填充。

[html]  view plain  copy
  1. android:paddingBottom="@dimen/activity_vertical_margin"  
  2. android:paddingLeft="@dimen/activity_horizontal_margin"  
  3. android:paddingRight="@dimen/activity_horizontal_margin"  
  4. android:paddingTop="@dimen/activity_vertical_margin"  

于是找到dimen.xml文件


打开,发现里面设置了active_horizontal_margin和active_vertical_margin的值为16dp,改为0dp之后问题就解决了。

[html]  view plain  copy
  1. <resources>  
  2.   
  3.     <!-- Default screen margins, per the Android Design guidelines. -->  
  4.     <dimen name="activity_horizontal_margin">0dp</dimen>  
  5.     <dimen name="activity_vertical_margin">0dp</dimen>  
  6.   
  7. </resources>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值