19_利用android提供的HanziToPinyin工具类实现汉字与拼接的转换
汉字转换成拼接的效果有很多实现方式,例如pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制(后面的博客会详细介绍使用方法)。但是在android的系统应用联系人中也给我们实现了汉字与拼接转换的方式,接下来我们简单介绍一下android中汉字与拼音的转换。 1.首先到https://github.com/android网站上去下载android提供联系
汉字转换成拼接的效果有很多实现方式,例如pinyin4j是一个流行的Java库,支持中文字符和拼音之间的转换。拼音输出格式可以定制(后面的博客会详细介绍使用方法)。但是在android的系统应用联系人中也给我们实现了汉字与拼接转换的方式,接下来我们简单介绍一下android中汉字与拼音的转换。
1.首先到https://github.com/android网站上去下载android提供联系人接口的源码/platform_packages_providers_contactsprovider
点击 DownLoad ZIP 即可下载
2.找到platform_packages_providers_contactsprovider-master\src\com\android\providers\contacts 此目录中的HanziToPinyin.java 拷贝到项目中,你会发现此类依赖于底层中的Transliterator.java这个类 所以也要下载此类(源码位于:source\libcore\luni\src\main\java\libcore\icu),下面给出此类的源码如下:
/*
* 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向这样的多音字等处理上有一些问题.
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)