# mongol-library
**Repository Path**: ali_iii/mongol-library
## Basic Information
- **Project Name**: mongol-library
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-01-16
- **Last Updated**: 2024-01-16
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
*中文不是我的母语,求读者纠正错误*
# mongol-library
[[English]](https://github.com/suragch/mongol-library/blob/master/README.md)
竖写蒙古文的Android控件库
## 目录
- [简介](https://github.com/suragch/mongol-library/blob/master/README.zh-Hans.md#%E7%AE%80%E4%BB%8B)
- [使用指南](https://github.com/suragch/mongol-library/blob/master/README.zh-Hans.md#%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97)
- 组件
- [`MongolTextView` 蒙文文本框](https://github.com/suragch/mongol-library/blob/master/README.zh-Hans.md#mongoltextview)
- [`MongolEditText` 蒙文编辑文本框](https://github.com/suragch/mongol-library/blob/master/README.zh-Hans.md#mongoledittext)
- [`ImeContainer` 键盘包,输入法](https://github.com/suragch/mongol-library/blob/master/README.zh-Hans.md#imecontainer)
- [`MongolMenu` 蒙文菜单](https://github.com/suragch/mongol-library/blob/master/README.zh-Hans.md#mongolmenu)
- [`MongolAlertDialog` 蒙文对话框](https://github.com/suragch/mongol-library/blob/master/README.zh-Hans.md#mongolalertdialog)
- [`MongolToast` 蒙文Toast提示框](https://github.com/suragch/mongol-library/blob/master/README.zh-Hans.md#mongoltoast)
- [`MongolCode` 蒙文国际编码处理器](https://github.com/suragch/mongol-library/blob/master/README.zh-Hans.md#mongolcode)
- [如何参与](https://github.com/suragch/mongol-library/blob/master/README.zh-Hans.md#%E5%A6%82%E4%BD%95%E5%8F%82%E4%B8%8E)
- [使用此库的应用](https://github.com/suragch/mongol-library/blob/master/README.zh-Hans.md#%E4%BD%BF%E7%94%A8%E6%AD%A4%E5%BA%93%E7%9A%84%E5%BA%94%E7%94%A8)
## 简介
此Android库让开发者在应用里轻松地使用竖写的蒙古文。组件包括文本框、编辑文本框、对话框、键盘等常用的文本控件。所有的控件都支持国际编码和蒙科立编码。
- [下载演示app体验以下](https://github.com/suragch/mongol-library/raw/master/demo-app/release/demo-app-release.apk)
- [浏览演示app源码](https://github.com/suragch/mongol-library/tree/master/demo-app/src/main)
## 使用指南
要求:
- Android Studio 3.0以上 (因为需要gradle和jcenter)
- 最低sdk版本(`minSdkVersion`)14以上
导入方式
在你的app模块的build.gradle文件里dependencies依赖项区加`mongol-library`的链接;
AndroidX:
```java
dependencies {
implementation 'net.studymongolian:mongol-library:2.1.0'
}
```
旧的SupportLibrary:
```java
dependencies {
implementation 'net.studymongolian:mongol-library:1.17.3'
}
```
`mongol-library`2.0.0版以上采用[语义化版本](https://semver.org/lang/zh-CN/)
## `MongolTextView`
蒙文文本框

XML
```xml
```
Java
```java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MongolTextView mongolTextView = findViewById(R.id.mongol_text_view_id);
mongolTextView.setText("ᠮᠣᠩᠭᠣᠯ");
mongolTextView.setTextColor(Color.BLUE);
}
}
```
#### 备注
- 词库只包含蒙科立的[白体字库](http://www.menksoft.com/mdls/am/amview.aspx?pid=0&alias=menkcms&iid=168137&mid=15302&wv=U)。开发者可以自己添加更多字体:
```java
String AMGLANG = "fonts/MAM8102.ttf";
Typeface customFont = MongolFont.get(AMGLANG, getApplicationContext());
mongolTextView.setTypeface(customFont);
```
- `MongolTextView`支持表情、中文、日文、韩文等文字的正确方向。

- 不需要任何文字转向或span格式的情况下,也可以用`MongolLabel`来代替。
## `MongolEditText`
蒙文编辑文本框

`MongolEditText`支持系统键盘的输入,就像上面的图片所示。(蒙科立公司和德力海公司的第三方输入法)
XML
```xml
```
`MongolEditText`目前还不支持滚动,所以应该把它放在`HorizontalScrollView`里。
Java
```java
MongolEditText mongolEditText = findViewById(R.id.metExample);
String text = mongolEditText.getText().toString();
```
## `ImeContainer`
键盘包

`ImeContainer`的工作是管理键盘。此库有四种默认键盘布局,不是系统键盘,是可以嵌入到你的应用里。这样的话,如果用户没有安装第三方的蒙文输入法,还能用你给提供的键盘来输入蒙文。你还可以定制别的键盘布局,只需要复制键盘[源码](https://github.com/suragch/mongol-library/blob/master/mongol-library/src/main/java/net/studymongolian/mongollibrary/KeyboardQwerty.java)然后改一下,用法都一样。
XML
```xml
```
颜色、大小等各种方面都能调整:
```xml
```
Java
```java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_keyboard);
ImeContainer imeContainer = findViewById(R.id.ime_container);
EditText editText = findViewById(R.id.edittext);
MongolEditText mongolEditText = findViewById(R.id.mongoledittext);
// MongolInputMethodManager管理ImeContainer(键盘)和MongolEditText(或EditText)的交流
MongolInputMethodManager mimm = new MongolInputMethodManager();
mimm.addEditor(mongolEditText);
mimm.setIme(imeContainer);
}
}
```
#### 候选视图
`ImeContainer`也有候选视图,如果你有单词库的话,用户在输入的时候你可以提供候选词。


XML
```xml
```
因为候选视图使用`RecyclerView`类,应用模块的build.gradle文件需要加`recyclerview`。
``` java
dependencies {
implementation 'com.android.support:recyclerview-v7:27.1.1'
}
```
在AndroidManifest里的activity模块表示要隐藏系统键盘
```xml
android:windowSoftInputMode="stateHidden"
```
Java
```java
// 要声明ImeContainer.DataSource接口
public class MyActivity extends AppCompatActivity implements ImeContainer.DataSource, ImeContainer.OnNonSystemImeListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
// ...
imeContainer.setDataSource(this);
imeContainer.setOnNonSystemImeListener(this);
// ...
}
// 实现ImeContainer.DataSource接口的方法
@Override
public void onRequestWordsStartingWith(String text) {
// 候选试图要求以text开头的词
// 然后更新imeContainer.setCandidates(wordList)
}
@Override
public void onWordFinished(String word, String previousWord) {
// 保存word
}
@Override
public void onCandidateClick(int position, String word, String previousWordInEditor) {
// 候选词被选上后候选试图要求接下来的词
// 然后更新imeContainer.setCandidates(wordList)
}
@Override
public void onCandidateLongClick(int position, String word, String previousWordInEditor) {
// 候选词被长按
}
// 实现ImeContainer.OnNonSystemImeListener接口的方法
@Override
public void onHideKeyboardRequest() {
// imeContainer.setVisibility(View.GONE)
}
}
```
## `MongolMenu`
蒙文菜单

Java
```java
MongolMenu menu = new MongolMenu(this);
menu.add(new MongolMenuItem("ᠨᠢᠭᠡ", R.drawable.ic_sun));
menu.add(new MongolMenuItem("ᠬᠤᠶᠠᠷ", R.drawable.ic_moon));
menu.add(new MongolMenuItem("ᠭᠤᠷᠪᠠ", R.drawable.ic_star));
menu.setOnMenuItemClickListener(new MongolMenu.OnMenuItemClickListener() {
public boolean onMenuItemClick(MongolMenuItem item) {
MongolToast.makeText(MongolMenuActivity.this, item.getTitle(), MongolToast.LENGTH_SHORT).show();
return true;
}
});
menu.showAsDropDown(view, 0, 0);
```
也可以用`showAtLocation`来代替`showAsDropDown`。
## `MongolAlertDialog`
蒙文对话框

Java
```java
// setup the alert builder
MongolAlertDialog.Builder builder = new MongolAlertDialog.Builder(this);
builder.setMessage("ᠵᠠᠮᠤᠭ ᠰᠠᠢᠲᠠᠢ ᠨᠠᠭᠤᠷ ᠲᠤ ᠵᠢᠭᠠᠰᠤ ᠤᠯᠠᠨ᠂\nᠵᠠᠩ ᠰᠠᠢᠲᠠᠢ ᠬᠦᠮᠦᠨ ᠳᠦ ᠨᠦᠬᠦᠷ ᠤᠯᠠᠨ᠃");
// add the button
builder.setPositiveButton("ᠮᠡᠳᠡᠯᠡ", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// do sth
}
});
// create and show the alert dialog
MongolAlertDialog dialog = builder.create();
dialog.show();
```
## `MongolToast`
蒙文Toast提示框

Java
```java
MongolToast.makeText(getApplicationContext(), "ᠰᠠᠢᠨ ᠪᠠᠢᠨᠠ ᠤᠤ︖", MongolToast.LENGTH_LONG).show();
```
## `MongolCode`
蒙文国际编码处理器
#### Unicode
上面的控件都用`MongolCode`来处理国际编码并渲染文本,而不用字体的逻辑。此库在大多数情况下按照Unicode 10处理文本,但是有两个例外:
- Final MONGOLIAN LETTER GA + FVS1 and FVS2 (`\u182D` + `\u180B`/`\u180C`), 跟大部分字体一样
- Medial MONGOLIAN LETTER I + FVS2 (`\u1822` + `\u180C`), 跟蒙科立字体一样
双园音的两个写法都支持
- SAIN
- SAYIN
#### 编码转换
```java
MongolCode converter = MongolCode.INSTANCE;
String unicode;
String menksoftCode;
// 国际编码 -> 蒙科立编码
unicode = "ᠮᠣᠩᠭᠣᠯ";
menksoftCode = converter.unicodeToMenksoft(unicode);
// 蒙科立编码 -> 国际编码
menksoftCode = "\uE2F2\uE289\uE2BC\uE2EC\uE289\uE2F9";
unicode = converter.menksoftToUnicode(menksoftCode);
```
#### 静态字符和字符串
```java
char unicodeLetter = MongolCode.Uni.MA; // '\u182E'
char unicodePunctuation = MongolCode.Uni.MONGOLIAN_FULL_STOP; // '\u1803'
String iyerSuffix = MongolCode.Suffix.IYER; // "\u202F\u1822\u1836\u1821\u1837"
```
#### 静态方法
* `boolean isMongolian(char character)`
* `boolean isConsonant(char character)`
* `boolean isVowel(char character)`
* `boolean isMasculineVowel(char character)`
* `boolean isFeminineVowel(char character)`
* `boolean isFVS(char character)`
* `boolean isMvsPrecedingChar(char character)`
* `boolean isMenksoft(char character)`
## 如何参与
`mongol-library`还在开发中,虽然此版本已经比较稳定,知道的和不知道的故障都有,请大家原谅。如果你发现故障联系我,或者你自己修更好。如果有人想合作加新功能,下面有需要:
- 拼写正确的单词库
- `CheckBox`, `RadioButton`
- Android和junit自动化测试
## 使用此库的应用
- [Demo app 演示应用](https://github.com/suragch/mongol-library/tree/master/demo-app)
- [Chimee 输入法,文字工具](https://github.com/suragch/Chimee)
- [Suryaa 蒙外语记忆卡篇](https://github.com/suragch/Suryaa)
- [Todo 托忒输入法](https://github.com/suragch/TodoKeyboard)
- *加你的应用。。。*