轉載請注明出處王亟亟的大牛之路
這周都在捯饬RN和搭建公司内部的開發環境,沒怎麼好好學習,正好看到之前收入的一個中文轉拼音的庫,體驗了下推薦給大家,先安利:https://github.com/ddwhan0123/Useful-Open-Source-Android
從這篇開始,之後的每篇都會提幾個面試題,溫顧下知識(見文章尾,妹子前面的“面試題”部分)
首先,為什麼推薦給大家這個庫而不是廣泛使用的jpinyin,理由有以下幾個
生成的拼音不包含聲調,也不處理多音字,預設一個漢字對應一個拼音;
無需初始化,執行效率很高(Pinyin4J的4倍);
很低的記憶體占用(小于30KB)。
How to use?
buildscript {
repositories {
jcenter()
}
dependencies {
compile 'com.github.promeg:tinypinyin:1.0.0'
}
}
它類似于一個工具類,方法都是靜态的,不用初始化,我們來看下作者提供的2個方法
public static String toPinyin(char c)//中文轉拼音,如果不是中文就 return String.valueOf(c);
public static boolean isChinese(char c) //用于判斷是否是中文
運作效果
來簡單地看看實際使用的代碼
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private TextView resultTV;
private EditText inputET;
private Button submitBtn;
private String pinYin = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.submitBtn:
pinYin = inputET.getText().toString().trim();
if (!pinYin.isEmpty()) {
resultTV.setText(Pinyin.toPinyin(pinYin.charAt()));
}
inputET.setText("");
break;
default:
break;
}
}
private void init() {
resultTV = (TextView) findViewById(R.id.resultTV);
inputET = (EditText) findViewById(R.id.inputET);
submitBtn = (Button) findViewById(R.id.submitBtn);
if (submitBtn != null) {
submitBtn.setOnClickListener(this);
}
}
一個按鈕,一個輸入欄,一個展示View,把簡單的邏輯實作了下,其實主要的代碼就一行:
Pinyin.toPinyin(pinYin.charAt(0))
既然使用簡便,博文篇幅也不長,那就來看看這個類最重要的方法是toPinyin如何實作的吧(解釋都在注釋裡)
public static String toPinyin(char c) {
//判斷是否中文
if (isChinese(c)) {
//判斷Unicode編碼
if (c == PinyinData.CHAR_12295) {
return PinyinData.PINYIN_12295;
} else {
return PinyinData.PINYIN_TABLE[getPinyinCode(c)];
}
} else {
return String.valueOf(c);
}
}
先判斷Unicode是否漢子,如果是的話看是否等于“〇”(其實這個字我不認識。。。。查了查是 Ling),如果不是就去“詞典”裡取讀音。
詞典裡大概是
"", "A", "AI", "AN", "ANG", "AO", "BA", "BAI"
長得像這樣的一對、堆讀音,就不詳細舉例子了。
作者沒有做讀音或者聲調的判斷,如果需要可以看https://github.com/stuxuhai/jpinyin
總結:這是一個使用簡單,性能上佳,實作友善的“工具類”,在搜尋/通訊錄等子產品都會用得到,收錄下來以便不時之需哦!
面試題 1 service是否可以打開屬于Activity的dialog?
**答:**service中彈出dialog時,如果寫和activity同樣的代碼時會報錯.
那麼如何解決這個問題呢?
首先,需要授權
android.permission.SYSTEM_ALERT_WINDOW
然後
dialog.getWindow().setType((WindowManager.LayoutParams.TYPE_SYSTEM_ALERT));
可參考文章 http://www.cnblogs.com/shaweng/p/3990748.html
面試題2 殺死程序廣播還在嗎
廣播還在的,廣播資訊在安裝應用後,是注冊到系統的服務中的,是以不管應用程序在不在,廣播都是會被吊起來的。(相關關鍵詞,動态廣播/靜态廣播)
例子位址:https://github.com/ddwhan0123/BlogSample/tree/master/PinYinDemo
上面那部分是最近想到添加的,如果大家有什麼疑問可以給我留言或者微信告知我(活人,不是公衆号)