19_利用android提供的HanziToPinyin工具类实现汉字与拼接的转换

汉字转换成拼接的效果有很多实现方式,例如pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制(后面的博客会详细介绍使用方法)。但是在android的系统应用联系人中也给我们实现了汉字与拼接转换的方式,接下来我们简单介绍一下android中汉字与拼音的转换。

1.首先到https://github.com/android网站上去下载android提供联系人接口的源码android/platform_packages_providers_contactsprovider

  

点击 DownLoad ZIP 即可下载

  2.找到platform_packages_providers_contactsprovider-master\src\com\android\providers\contacts 此目录中的HanziToPinyin.java 拷贝到项目中,你会发现此类依赖于底层中的Transliterator.java这个类 所以也要下载此类,下面给出此类的源码如下:

/*
 * Copyright (C) 2013 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package libcore.icu;
/**
 * Exposes icu4c's Transliterator.
 */
public final class Transliterator {
  private long peer;
  /**
   * Creates a new Transliterator for the given id.
   */
  public Transliterator(String id) {
    peer = create(id);
  }
  @Override protected synchronized void finalize() throws Throwable {
    try {
      destroy(peer);
      peer = 0;
    } finally {
      super.finalize();
    }
  }
  /**
   * Returns the ids of all known transliterators.
   */
  public static native String[] getAvailableIDs();
  /**
   * Transliterates the specified string.
   */
  public String transliterate(String s) {
    return transliterate(peer, s);
  }
  private static native long create(String id);
  private static native void destroy(long peer);
  private static native String transliterate(long peer, String s);
}

3.下面通过一个案例 说明使用

3.1效果如下

 
 

备注1.在输入框中输入汉字,点击转换按钮就可以看到效果

4.项目的目录结构

此目录 可以看到com.example.util及libcore.icu包中的类都是引入android系统的代码,接下来我们具体看一下MainActivity.java的实现.

5.首先看一下MainActivity对应的界面的布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="${relativePackage}.${activityClass}" >

    <EditText
        android:id="@+id/et_content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/tv_content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:layout_marginBottom="20dp"
        android:text="@string/hello_world"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="clickView"
        android:text="转换" />

</LinearLayout>

6.MainActivity中的实现

package com.example.pinyin;

import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.example.util.HanziToPinyin;

public class MainActivity extends Activity {

	//声明EditText控件对象
	private EditText et_content;
	//声明TextView控件对象
	private TextView tv_content;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //获取控件对象
        et_content = (EditText) findViewById(R.id.et_content);
        tv_content = (TextView) findViewById(R.id.tv_content);
    }

    public void clickView(View v){
    	//获取EditText输入的文本值
    	String content = et_content.getText().toString();
    	//判断是否为空
    	if(TextUtils.isEmpty(content)||"".equals(content)){
    		Toast.makeText(this, "内容不能为空", 1).show();
    		return;
    	}

    	//转换成拼音
    	String value = HanziToPinyin.getInstance().transliterate(content);
    	//把内容显示到TextView控件上
    	tv_content.setText(value);
    }
}

7.项目清单文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.pinyin"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="19" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

备注说明以上代码是在android4.4.2系统中测试,但是会返现一些bug,比如 重chong 重 zhong向这样的多音字等处理上有一些问题.

时间: 2024-12-14 20:32:16

19_利用android提供的HanziToPinyin工具类实现汉字与拼接的转换的相关文章

Android开源项目大全 - 工具类

主要包括那些不错的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多媒体相关及其他. 一.依赖注入DI 通过依赖注入减少View.服务.资源简化初始化,事件绑定等重复繁琐工作 AndroidAnnotations(Code Diet)android快速开发框架 项目地址:https://github.com/excilys/androidannotations 文档介绍:https://github.com/excilys

构建基于CXF的WebService服务(2)-- 利用CXF提供的wsdl2java工具创建客户端

1.环境配置 将CXF_HOME/bin加入到环境变量path中,如我的是D:\Java\Jar\apache-cxf-2.7.7\bin 打开cmd输入 wsdl2java -v 出现如下信息表示配置成功 2.wsdl2java的使用 (1)创建一个"Java Project"项目,暂且命名为client,将CXF用到的jar包引入进来,去掉jetty相关包,加入geronimo-jaxws_2.2_spec-1.1.jar包 (2)打开命令行工具,将目录切换到client项目中的s

Android中常用的工具类01

1.图片和视频缩略图工具类 import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.media.ThumbnailUtils; /** * 缩略图生成工具类 * @author * */ public class ThumbnailGenerateUtils { private ThumbnailGenerateUtils(){}; /** * 根据指定的图像路径和大小来获取缩略图

Android开发调试日志工具类[支持保存到SD卡]

直接上代码: package com.example.callstatus; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; import java.net.UnknownHostException; import java.text.SimpleDateFormat; impor

Android调节屏幕亮度工具类BrightnessUtils

如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:129518033 项目需要做了一个调节屏幕的工具类 /* * Android调节屏幕亮度工具类 * by itas109 * http://blog.csdn.net/itas109 * * 注意:需要添加setting权限 * <uses-permission android:name="android.permission.WRITE_SETTINGS" /> */ publ

wemall app商城源码android开发MD5加密工具类

wemall-mobile是基于WeMall的android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享android开发MD5加密工具类主要代码,供技术员参考学习. package com.gzcivil.utils; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgori

Android中常用的工具类02

1.读取手机联系人信息 一般用在读取手机通讯录上传,这一块比较多. import java.util.ArrayList; import java.util.List; import android.content.ContentResolver; import android.content.Context; import android.database.Cursor; import android.provider.ContactsContract.CommonDataKinds.Phon

Android|Java 开发常用工具类

如题 该文章展示的是我开发过程中使用的部分常用工具类方法,不定期更新. 欢迎各位大牛批评指教,如有发现错误,欢迎留言指教,如有更好的实现方式,也欢迎留言交流学习,谢谢. 一.手机号 座机号.邮箱格式匹配工具类 package com.kevin.test.utils; /** * 字符串格式匹配工具类 匹配手机号.座机号.邮箱等 * * @author blj * */ public class FormatCheckUtils { /** * 判断是否符合邮箱格式 */ public stat

Android弹出Toast工具类总结

Android弹出Toast工具类总结,包括系统自带的,也包括自定义的. public class ToastUtil { public ToastUtil() { } public static Toast showShortToast(Context context, String text) { Toast toast = Toast.makeText(context, text, 0); toast.show(); return toast; } public static Toast