1. 程式人生 > >Android Studio 漢字轉拼音

Android Studio 漢字轉拼音

今天上課的時候老師講到了漢字轉拼音的問題,感覺挺有意思的,就自己搗鼓了一下。

查閱了一些資料,發現java獲取漢字的拼音,pinyin4j.jar這個庫可以很好的解決此類問題,先是用Myeclipse10做的,因為最近在學習android開發的內容,所以想把它做成一個簡單的app。

接下來運用android studio來建立一個新的專案,在這裡,我的專案名字叫PinYinHelper。

我們來實現一個簡單activity_main.xml佈局,程式碼如下:

<RelativeLayout 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:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom=
"@dimen/activity_vertical_margin" tools:context=".MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="輸入漢字:" android:textSize="25dp" android:id="@+id/textView" android:layout_alignParentTop="true" android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" android:layout_marginTop="115dp" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="轉化" android:id="@+id/Change" android:layout_above="@+id/textView3" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="轉化結果:" android:textSize="25dp" android:id="@+id/textView3" android:layout_centerVertical="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/Chinese" android:layout_alignTop="@+id/textView" android:layout_toRightOf="@+id/textView" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/PinYin" android:layout_alignTop="@+id/textView3" android:layout_toRightOf="@+id/textView3" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" /> </RelativeLayout>
然後是實現MainActivity,程式碼如下:
package com.ljh.pinyinhelper;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

public class MainActivity extends AppCompatActivity {

    public static String converterToFirstSpell(String chines){
        String pinyinName = "";
        char[] nameChar = chines.toCharArray();
        HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
        defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
        defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
        for (int i = 0; i < nameChar.length; i++) {
            if (nameChar[i] > 128) {
                try {
                    pinyinName += PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat)[0].charAt(0);
                } catch (BadHanyuPinyinOutputFormatCombination e) {
                    e.printStackTrace();
                }
            }else{
                pinyinName += nameChar[i];
            }
        }
        return pinyinName;
    }

    /**
     * 漢字轉換位漢語拼音,英文字元不變
     * @param chines 漢字
     * @return 拼音
     */
public static String converterToSpell(String chines){
        String pinyinName = "";
        char[] nameChar = chines.toCharArray();
        HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
        defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
        defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
        for (int i = 0; i < nameChar.length; i++) {
            if (nameChar[i] > 128) {
                try {
                    pinyinName += PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat)[0];
                } catch (BadHanyuPinyinOutputFormatCombination e) {
                    e.printStackTrace();
                }
            }else{
                pinyinName += nameChar[i];
            }
        }
        return pinyinName;
    }

    @Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button change = (Button)findViewById(R.id.Change);
        change.setOnClickListener(new View.OnClickListener() {
            @Override
public void onClick(View v) {
                EditText editTextchinese = (EditText)findViewById(R.id.Chinese);
                EditText editTextpinyin = (EditText)findViewById(R.id.PinYin);
                String text = editTextchinese.getText().toString();
                String chinese = converterToSpell(text);
                editTextpinyin.setText(chinese);
            }
        });
    }

    @Override
public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

        //noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}
效果圖:
基本思路:建立兩個EditText控制元件,一個是供使用者輸入想要轉化為拼音的漢字的,另外一個是顯示拼音的框。在這裡,我們先獲取第一個EditText裡面使用者輸入的漢字,然後通過一個按鈕控制把漢字轉化為拼音。
是不是很簡單呢?其實不然,這還只是剛剛入門而已,想要完全瞭解其中的精髓,還得去看jar包裡的具體程式碼~