解析原生与html之间进行的一些关联

零下一度
发布: 2017-04-27 11:55:35
原创
1681 人浏览过

1.Android中设置部分字体的颜色改变,并且能点击

1, 使用SpannableStringBuilder来实现
//1,使用 SpannableStringBuilder , 参数中的数字表示修改的片段的起始位置和结束位置  
        TextView tv_1 = (TextView) findViewById(R.id.textView_1);  
        String str_1 = "使用 SpannableStringBuilder 来实现部分字体颜色的改变";  
        SpannableStringBuilder ssb = new SpannableStringBuilder(str_1);  
        ssb.setSpan(new ForegroundColorSpan(Color.RED), 0, 10,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE );  
        ssb.setSpan(new ForegroundColorSpan(Color.YELLOW), 12, 22,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE );  
        ssb.setSpan(new ForegroundColorSpan(Color.GREEN), 23, str_1.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE );  
        tv_1.setText(ssb);
登录后复制
登录后复制

2, 使用 html 来实现

//2,使用html来修改部分字体的颜色  
        TextView tv_2 = (TextView) findViewById(R.id.textView_2);  
        String str_2 = "使用 Html 来实现部分字体颜色的改变";  
        tv_2.setText(Html.fromHtml("使用 Html <font color = blue> 来实现部分字体颜色的改变</font>"));
登录后复制
登录后复制
html = "<html><body>"
                    + "<p><font color=\"#FFBF00\"> ② </p>"
                    + "<p><font color=\"#CE00F7\">城郊 "
                    + "</p>"
                    + "</body></html>";
_Holder.station_change.setText(Html.fromHtml(html));
登录后复制
3 , 使用SpannableStringBuilder来实现,或者 SpannableString来实现部分字体的颜色的改变,并且能点击,这里用到了ClickableSpan
        //3,实现部分字体颜色的改变,并能点击  
        TextView tv_3 = (TextView) findViewById(R.id.textView_3);  
        String str_3 = "实现部分字体颜";  
        String str_4 = "色的改变并且能点击";  
        //这里无论是使用  SpannableString 还是  SpannableStringBuilder 都一样  
        SpannableString ss = new SpannableString(str_4);  
//        SpannableStringBuilder s = new SpannableStringBuilder(str_4);  
        MyClickableSpan clickSpan = new MyClickableSpan(this, str_4);  
        ss.setSpan(clickSpan, 0, str_4.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
        tv_3.setText(str_3);  
        tv_3.append(ss);  
        //必须加这一句,否则就无法被点击  
        tv_3.setMovementMethod(LinkMovementMethod.getInstance());
登录后复制
登录后复制
  /** 
   * 这个类 实际上和第一种改变颜色的方法差不多,只不过 那是个专门改变颜色的Span,这是个专门负责点击处理的Span 
   * @author Administrator 
   */  
  class MyClickableSpan extends ClickableSpan{  
    private Context context;  
    private String text;  

    public MyClickableSpan(Context context,String text)  
    {  
        this.context = context;  
        this.text = text;  
    }  

//在这里设置字体的大小,等待各种属性  public void updateDrawState(TextPaint ds) {  
    ds.setColor(Color.RED);  
    }  

@Override  public void onClick(View widget) {  
    Intent intent = new Intent(MainActivity.this,OtherActivity.class);  
    startActivity(intent);  
}  
}
登录后复制
登录后复制

2.Android原生代码与HTML5的交互

1.原生代码调用HTML5页面方法

例如,app要调用HTML5页面的changeColor(color)的方法,来改变HTML5页面的颜色

1)HTML5

 <script type="text/javascript">   
  document.write("Hello World!")  
  function changeColor(color){  document.body.style.background = color;    } </script>
登录后复制
登录后复制

2)Android

  //开启JavaScript支持   
  wvMain.getSettings().setJavaScriptEnabled(true);  
  //放在assets的html需加上android_asset/ ;也可以用网络上的文件
  wvMain.loadUrl("file:///android_asset/show.html");    
  // 添加一个对象, 让JS可以访问该对象的方法, 该对象中可以调用JS中的方法
  wvMain.addJavascriptInterface(new JSInterface1(),"baobao"); 
  btnOne.setOnClickListener(new View.OnClickListener() {  
  @Override    
   public void onClick(View v) {       
   String color = "#cccccc";   wvMain.loadUrl("javascript: changeColor(&#39;"+color+"&#39;)");    }});
登录后复制
登录后复制

2.HTLM5页面调用原生方法
例如,点击HTML5页面的文字,回调原生代码中的callAndroidMethod方法

1)HTML5

 <a onClick="baobao.callAndroidMethod(100,100,&#39;ccc&#39;,true)">CallAndroidMethod</a>
登录后复制
登录后复制

2 )android

   class JSInterface1 {    

    //JavaScript调用此方法
   @JavascriptInterface     

   public void callAndroidMethod(int a,float b, String c,boolean d){    if(d){           
        String strMessage = "a+b+c="+a+b+c;       
      new AlertDialog.Builder(MainActivity.this).setTitle("title").setMessage(strMessage).show();        
         }  
     }
  }
登录后复制
登录后复制

1.Android中设置部分字体的颜色改变,并且能点击

1, 使用SpannableStringBuilder来实现
//1,使用 SpannableStringBuilder , 参数中的数字表示修改的片段的起始位置和结束位置  
        TextView tv_1 = (TextView) findViewById(R.id.textView_1);  
        String str_1 = "使用 SpannableStringBuilder 来实现部分字体颜色的改变";  
        SpannableStringBuilder ssb = new SpannableStringBuilder(str_1);  
        ssb.setSpan(new ForegroundColorSpan(Color.RED), 0, 10,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE );  
        ssb.setSpan(new ForegroundColorSpan(Color.YELLOW), 12, 22,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE );  
        ssb.setSpan(new ForegroundColorSpan(Color.GREEN), 23, str_1.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE );  
        tv_1.setText(ssb);
登录后复制
登录后复制

2, 使用 html 来实现

//2,使用html来修改部分字体的颜色  
        TextView tv_2 = (TextView) findViewById(R.id.textView_2);  
        String str_2 = "使用 Html 来实现部分字体颜色的改变";  
        tv_2.setText(Html.fromHtml("使用 Html <font color = blue> 来实现部分字体颜色的改变</font>"));
登录后复制
登录后复制
或者
html = "<html><body>"
                    + "<p><font color=\"#FFBF00\"> ② </p>"
                    + "<p><font color=\"#CE00F7\">城郊 "
                    + "</p>"
                    + "</body></html>";
_Holder.station_change.setText(Html.fromHtml(html));
登录后复制
3 , 使用SpannableStringBuilder来实现,或者 SpannableString来实现部分字体的颜色的改变,并且能点击,这里用到了ClickableSpan
        //3,实现部分字体颜色的改变,并能点击  
        TextView tv_3 = (TextView) findViewById(R.id.textView_3);  
        String str_3 = "实现部分字体颜";  
        String str_4 = "色的改变并且能点击";  
        //这里无论是使用  SpannableString 还是  SpannableStringBuilder 都一样  
        SpannableString ss = new SpannableString(str_4);  
//        SpannableStringBuilder s = new SpannableStringBuilder(str_4);  
        MyClickableSpan clickSpan = new MyClickableSpan(this, str_4);  
        ss.setSpan(clickSpan, 0, str_4.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
        tv_3.setText(str_3);  
        tv_3.append(ss);  
        //必须加这一句,否则就无法被点击  
        tv_3.setMovementMethod(LinkMovementMethod.getInstance());
登录后复制
登录后复制
  /** 
   * 这个类 实际上和第一种改变颜色的方法差不多,只不过 那是个专门改变颜色的Span,这是个专门负责点击处理的Span 
   * @author Administrator 
   */  
  class MyClickableSpan extends ClickableSpan{  
    private Context context;  
    private String text;  

    public MyClickableSpan(Context context,String text)  
    {  
        this.context = context;  
        this.text = text;  
    }  

//在这里设置字体的大小,等待各种属性  public void updateDrawState(TextPaint ds) {  
    ds.setColor(Color.RED);  
    }  

@Override  public void onClick(View widget) {  
    Intent intent = new Intent(MainActivity.this,OtherActivity.class);  
    startActivity(intent);  
}  
}
登录后复制
登录后复制

2.Android原生代码与HTML5的交互

1.原生代码调用HTML5页面方法

例如,app要调用HTML5页面的changeColor(color)的方法,来改变HTML5页面的颜色

1)HTML5

 <script type="text/javascript">   
  document.write("Hello World!")  
  function changeColor(color){  document.body.style.background = color;    } </script>
登录后复制
登录后复制

2)Android

  //开启JavaScript支持   
  wvMain.getSettings().setJavaScriptEnabled(true);  
  //放在assets的html需加上android_asset/ ;也可以用网络上的文件
  wvMain.loadUrl("file:///android_asset/show.html");    
  // 添加一个对象, 让JS可以访问该对象的方法, 该对象中可以调用JS中的方法
  wvMain.addJavascriptInterface(new JSInterface1(),"baobao"); 
  btnOne.setOnClickListener(new View.OnClickListener() {  
  @Override    
   public void onClick(View v) {       
   String color = "#cccccc";   wvMain.loadUrl("javascript: changeColor(&#39;"+color+"&#39;)");    }});
登录后复制
登录后复制

2.HTLM5页面调用原生方法
例如,点击HTML5页面的文字,回调原生代码中的callAndroidMethod方法

1)HTML5

 <a onClick="baobao.callAndroidMethod(100,100,&#39;ccc&#39;,true)">CallAndroidMethod</a>
登录后复制
登录后复制

2 )android

   class JSInterface1 {    

    //JavaScript调用此方法
   @JavascriptInterface     

   public void callAndroidMethod(int a,float b, String c,boolean d){    if(d){           
        String strMessage = "a+b+c="+a+b+c;       
      new AlertDialog.Builder(MainActivity.this).setTitle("title").setMessage(strMessage).show();        
         }  
     }
  }
登录后复制
登录后复制

以上是解析原生与html之间进行的一些关联的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板