分享程式代碼相關筆記
目前文章總數:157 篇
最後更新:2024年 12月 07日
最早完成是在2018年,當時還是Microsoft剛買下Xamrain 釋出永久免費版本
當時Xamain常常有問題,最近整理以前的作品發現
新版的Visual Studio與早期的Xamrain的程式也能很好相容
這裡的代碼未重構,是當時釋出的最終版本,是將多益的A-Z單字轉成程式App提供自己學習
Google Play上面有很多單字學習程式,這個程式只有收錄約3000個單字
但很輕量化只有10MB,裡面還有內建語音Google小姐語音
下載後將檔案放進Andriod中
或者直接透過手機下載該檔案
下載後從手機上執行Apk檔案
透過手機安裝Apk檔案,需要開啟可信任
設為允許這個來源的應用程式
然後再次執行安裝,進入安裝中
完成後,選擇開啟
目前只有一個按鈕,點擊後可以進入下頁
1:選擇單字的主題類型
2:英文單字的測驗範圍
3:開始測驗,進行練習
1:出現本次的考題(開聲音還有英聽)
2:驗測的4個選擇,3個錯的,1個對的
3:目前為止的正確率
4:每次答題完後會出現,正確○ 與錯誤 X,做為提示
1:資料庫檔案,使用Sqlite.db,並且單字庫存於此
2:主程式代碼,對應3.的頁面
3:Layout畫面UI對應2.的主程式代碼
首頁按鈕,點擊後觸發跳轉頁面
/// <summary>
/// 按下後前往新多益單字
/// </summary>
/// <param name="stender"></param>
/// <param name="e"></param>
void btn_Newtoiec(object stender, EventArgs e)
{
Intent intent = new Intent(this, typeof(NewToeicActivity));
this.StartActivity(intent);
}
對於Andriod Version 23版以前,檢查的權限會不同
會影響安裝與程式執行時是否可以使用Sqlite
/// <summary>
/// 檢查權限,依照andriod 版本有不同的要求權限方式
/// </summary>
private void CheckAppPermissions()
{
if ((int)Build.VERSION.SdkInt < 23)
{
return;
}
else
{
if (PackageManager.CheckPermission(Manifest.Permission.ReadExternalStorage, PackageName) != Permission.Granted
&& PackageManager.CheckPermission(Manifest.Permission.WriteExternalStorage, PackageName) != Permission.Granted)
{
var permissions = new string[] { Manifest.Permission.ReadExternalStorage, Manifest.Permission.WriteExternalStorage };
RequestPermissions(permissions, 1);
}
}
}
載入時,會先讀取資料庫的單字庫
/// <summary>
/// 讀取資料庫資料
/// </summary>
public void Load_Data()
{
string Output = "";
try
{
bool responsebool = false;
//取得Assets內的資源
try
{
//NewToiec資料庫
var Sourcepath = System.IO.Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), _DbName);
using (var asset = Assets.Open(_DbName))
using (var dest = File.Create(Sourcepath))
{
asset.CopyTo(dest);
}
Output += string.Format("資料庫:{0} 建立中...", _DbName);
}
catch(Exception ex)
{
Toast.MakeText(this, ex.Message, ToastLength.Short).Show();
}
}
catch (Exception ex)
{
Output += "無法讀取資料庫 Error : " + ex.Message;
}
Toast.MakeText(this, Output, ToastLength.Short).Show();
}
載入後,開始驗測,會隨機抽取單字,寫到4個按鈕上
/// <summary>
/// 出題
/// </summary>
private void SetQuestion()
{
try
{
//出題
System.Random rnd = new System.Random(Guid.NewGuid().GetHashCode());
//選一個正解
_RightQuestion = rnd.Next(0, 4);//-- min >= max< NowDb.Count()
//設定畫面顯示文字
FindViewById<TextView>(Resource.Id.NewToeic_linearLayout_top_textView_Question).Text = string.Format("{0}", this._UserQuizNewToeicTable[_NowCount].English);
//發聲當前英文
SpeakOut(this._UserQuizNewToeicTable[_NowCount].English);
// MySpeech.Speak("abc", QueueMode.Add, null,null);
//顯示隨機放置數
List<int> Random_show = new List<int>();
for (int i = 0; i < 4; i++)
{
if (i == _RightQuestion)
{
Random_show.Add(_NowCount);
continue;
}
//配置不等於Right_Question的數值
for (int obj = 0; ;)
{
obj = rnd.Next(0, _Total);
if (obj != _NowCount && !(Random_show.Exists(o => o == obj)))
{
Random_show.Add(obj);
break;
}
}
}
FindViewById<Button>(Resource.Id.NewToeic_linearLayout_Content1_button_AnsA).Text = this._UserQuizNewToeicTable[Random_show[0]].Chinese;
FindViewById<Button>(Resource.Id.NewToeic_linearLayout_Content1_button_AnsB).Text = this._UserQuizNewToeicTable[Random_show[1]].Chinese;
FindViewById<Button>(Resource.Id.NewToeic_linearLayout_Content1_button_AnsC).Text = this._UserQuizNewToeicTable[Random_show[2]].Chinese;
FindViewById<Button>(Resource.Id.NewToeic_linearLayout_Content1_button_AnsD).Text = this._UserQuizNewToeicTable[Random_show[3]].Chinese;
}
catch (Exception ex)
{
Toast.MakeText(this, "SetQuestion():錯誤訊息=> " + ex.Message, ToastLength.Long);
}
}
先載用Libary 的 TextToSpeech,並且設定語言區域(US)
每次考題目時呼叫SpeakOut() 將要念的英文單字轉成語音
//語音
private TextToSpeech _MySpeech;
/// <summary>
/// 實作文字轉語音功能
/// </summary>
/// <param name="status"></param>
public void OnInit([GeneratedEnum] OperationResult status)
{
if (status == OperationResult.Success)
{
//如果功能被調用 - 設定語音位置-請用英文
_MySpeech.SetLanguage(Locale.Us);
}
}
/// <summary>
/// 發出語音
/// </summary>
/// <param name="text"></param>
private void SpeakOut(string text)
{
var p = new Dictionary<string, string>();
_MySpeech.Speak(text, QueueMode.Add, p);
}