国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【軟件應(yīng)用開(kāi)發(fā)】小米便簽APP維護(hù)開(kāi)發(fā)

這篇具有很好參考價(jià)值的文章主要介紹了【軟件應(yīng)用開(kāi)發(fā)】小米便簽APP維護(hù)開(kāi)發(fā)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

本文主要介紹在小米便簽APP原有功能的基礎(chǔ)上,設(shè)計(jì)并實(shí)現(xiàn)了便簽添加圖片的功能,從開(kāi)發(fā)過(guò)程、運(yùn)行界面、源代碼三個(gè)方面進(jìn)行詳細(xì)介紹。
本文引用小米便簽社區(qū)開(kāi)源版代碼:https://github.com/MiCode/Notes
小米便簽APP維護(hù)開(kāi)發(fā)完整源代碼地址:https://download.csdn.net/download/weixin_47936614/85436044

開(kāi)發(fā)工具:Android Studio
開(kāi)發(fā)環(huán)境:操作系統(tǒng)win10、jdk1.8.0


一、開(kāi)發(fā)過(guò)程

  1. 首先在note_edit.xml文件中添加add_img_btn按鈕;
  2. 在NoteEditActivity.java文件的onCreate()方法中,為這個(gè)“添加圖片”按鈕設(shè)置監(jiān)聽(tīng)器,點(diǎn)擊添加圖片按鈕時(shí),會(huì)觸發(fā)點(diǎn)擊事件;
  3. 重寫(xiě)onActivityResult()來(lái)處理返回的數(shù)據(jù),并將圖片的路徑也寫(xiě)入到數(shù)據(jù)庫(kù);
  4. 點(diǎn)擊一個(gè)note后,會(huì)初始化note的內(nèi)容,并通過(guò)convertToImage()將路徑轉(zhuǎn)化為圖片;
  5. 在退出清單模式之后,仍應(yīng)該將圖片路徑的位置替換為圖片。

在編輯便簽界面添加圖片功能的程序流程圖如圖1所示。
【軟件應(yīng)用開(kāi)發(fā)】小米便簽APP維護(hù)開(kāi)發(fā)

二、運(yùn)行界面

在便簽編輯界面中,點(diǎn)擊“添加圖片”按鈕,選擇相應(yīng)的圖片,插入到便簽中,插入圖片過(guò)程如圖2所示。
【軟件應(yīng)用開(kāi)發(fā)】小米便簽APP維護(hù)開(kāi)發(fā)【軟件應(yīng)用開(kāi)發(fā)】小米便簽APP維護(hù)開(kāi)發(fā)【軟件應(yīng)用開(kāi)發(fā)】小米便簽APP維護(hù)開(kāi)發(fā)
在插入圖片后可以繼續(xù)編輯便簽,輸入相應(yīng)的文字或圖片,保存便簽后退出。當(dāng)用戶再次查看便簽時(shí),圖片和文字在相應(yīng)的位置展示出來(lái),如圖3所示。
【軟件應(yīng)用開(kāi)發(fā)】小米便簽APP維護(hù)開(kāi)發(fā)【軟件應(yīng)用開(kāi)發(fā)】小米便簽APP維護(hù)開(kāi)發(fā)
用戶在編輯便簽界面選擇“進(jìn)入清單模式”,便簽進(jìn)入清單模式,圖片以路徑方式顯示,當(dāng)用戶選擇“退出清單模式”后,圖片將在相應(yīng)位置顯示出來(lái)。如圖4所示。
【軟件應(yīng)用開(kāi)發(fā)】小米便簽APP維護(hù)開(kāi)發(fā)
【軟件應(yīng)用開(kāi)發(fā)】小米便簽APP維護(hù)開(kāi)發(fā)
【軟件應(yīng)用開(kāi)發(fā)】小米便簽APP維護(hù)開(kāi)發(fā)

三、源代碼

  • 添加圖片按鈕的xml代碼(FilePath: MiNotes\app\src\main\res\layout\note_edit.xml)
<ImageButton
        android:id="@+id/add_img_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="7dp"
        android:layout_marginTop="600dp"
        android:layout_marginBottom="7dp"
        android:src="@android:drawable/ic_menu_gallery" />
  • onCreate()方法(FilePath: MiNotes\app\src\main\java\net\micode\notes\ui\NoteEditActivity.java)
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	this.setContentView(R.layout.note_edit);

	if (savedInstanceState == null && !initActivityState(getIntent())) {
		finish();
		return;
	}
	initResources();

	//根據(jù)id獲取添加圖片按鈕
	final ImageButton add_img_btn = (ImageButton) findViewById(R.id.add_img_btn);
	//為點(diǎn)擊圖片按鈕設(shè)置監(jiān)聽(tīng)器
	add_img_btn.setOnClickListener(new View.OnClickListener() {
		@Override
		public void onClick(View view) {
			Log.d(TAG, "onClick: click add image button");
			//ACTION_GET_CONTENT: 允許用戶選擇特殊種類的數(shù)據(jù),并返回(特殊種類的數(shù)據(jù):照一張相片或錄一段音)
			Intent loadImage = new Intent(Intent.ACTION_GET_CONTENT);
			//Category屬性用于指定當(dāng)前動(dòng)作(Action)被執(zhí)行的環(huán)境.
			//CATEGORY_OPENABLE; 用來(lái)指示一個(gè)ACTION_GET_CONTENT的intent
			loadImage.addCategory(Intent.CATEGORY_OPENABLE);
			loadImage.setType("image/*");
			startActivityForResult(loadImage, PHOTO_REQUEST);
		}
	});
}
  • convertToImage()方法(FilePath: MiNotes\app\src\main\java\net\micode\notes\ui\NoteEditActivity.java)
//路徑字符串格式 轉(zhuǎn)換為 圖片image格式
private void convertToImage() {
	NoteEditText noteEditText = (NoteEditText) findViewById(R.id.note_edit_view); //獲取當(dāng)前的edit
	Editable editable = noteEditText.getText();//1.獲取text
	String noteText = editable.toString(); //2.將note內(nèi)容轉(zhuǎn)換為字符串
	int length = editable.length(); //內(nèi)容的長(zhǎng)度
	//3.截取img片段 [local]+uri+[local],提取uri
	for(int i = 0; i < length; i++) {
		for(int j = i; j < length; j++) {
			String img_fragment = noteText.substring(i, j+1); //img_fragment:關(guān)于圖片路徑的片段
			if(img_fragment.length() > 15 && img_fragment.endsWith("[/local]") && img_fragment.startsWith("[local]")){
				int limit = 7;  //[local]為7個(gè)字符
				//[local][/local]共15個(gè)字符,剩下的為真正的path長(zhǎng)度
				int len = img_fragment.length()-15;
				//從[local]之后的len個(gè)字符就是path
				String path = img_fragment.substring(limit,limit+len);//獲取到了圖片路徑
				Bitmap bitmap = null;
				Log.d(TAG, "圖片的路徑是:"+path);
				try {
					bitmap = BitmapFactory.decodeFile(path);//將圖片路徑解碼為圖片格式
				} catch (Exception e) {
					e.printStackTrace();
				}
				if(bitmap!=null){  //若圖片存在
					Log.d(TAG, "圖片不為null");
					ImageSpan imageSpan = new ImageSpan(NoteEditActivity.this, bitmap);
					//4.創(chuàng)建一個(gè)SpannableString對(duì)象,以便插入用ImageSpan對(duì)象封裝的圖像
					String ss = "[local]" + path + "[/local]";
					SpannableString spannableString = new SpannableString(ss);
					//5.將指定的標(biāo)記對(duì)象附加到文本的開(kāi)始...結(jié)束范圍
					spannableString.setSpan(imageSpan, 0, ss.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
					Log.d(TAG, "Create spannable string success!");
					Editable edit_text = noteEditText.getEditableText();
					edit_text.delete(i,i+len+15); //6.刪掉圖片路徑的文字
					edit_text.insert(i, spannableString); //7.在路徑的起始位置插入圖片
				}
			}
		}
	}
}
  • onActivityResult()方法(FilePath: MiNotes\app\src\main\java\net\micode\notes\ui\NoteEditActivity.java)
//重寫(xiě)onActivityResult()來(lái)處理返回的數(shù)據(jù)
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
	super.onActivityResult(requestCode, resultCode, intent);
	ContentResolver resolver = getContentResolver();
	switch (requestCode) {
		case PHOTO_REQUEST:
			Uri originalUri = intent.getData(); //1.獲得圖片的真實(shí)路徑
			Bitmap bitmap = null;
			try {
				bitmap = BitmapFactory.decodeStream(resolver.openInputStream(originalUri));//2.解碼圖片
			} catch (FileNotFoundException e) {
				Log.d(TAG, "onActivityResult: get file_exception");
				e.printStackTrace();
			}

			if(bitmap != null){
				//3.根據(jù)Bitmap對(duì)象創(chuàng)建ImageSpan對(duì)象
				Log.d(TAG, "onActivityResult: bitmap is not null");
				ImageSpan imageSpan = new ImageSpan(NoteEditActivity.this, bitmap);
				String path = getPath(this,originalUri);
				//4.使用[local][/local]將path括起來(lái),用于之后方便識(shí)別圖片路徑在note中的位置
				String img_fragment= "[local]" + path + "[/local]";
				//創(chuàng)建一個(gè)SpannableString對(duì)象,以便插入用ImageSpan對(duì)象封裝的圖像
				SpannableString spannableString = new SpannableString(img_fragment);
				spannableString.setSpan(imageSpan, 0, img_fragment.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
				//5.將選擇的圖片追加到EditText中光標(biāo)所在位置
				NoteEditText e = (NoteEditText) findViewById(R.id.note_edit_view);
				int index = e.getSelectionStart(); //獲取光標(biāo)所在位置
				Log.d(TAG, "Index是: " + index);
				Editable edit_text = e.getEditableText();
				edit_text.insert(index, spannableString); //將圖片插入到光標(biāo)所在位置

				mWorkingNote.mContent = e.getText().toString();
				//6.把改動(dòng)提交到數(shù)據(jù)庫(kù)中,兩個(gè)數(shù)據(jù)庫(kù)表都要改的
				ContentResolver contentResolver = getContentResolver();
				ContentValues contentValues = new ContentValues();
				final long id = mWorkingNote.getNoteId();
				contentValues.put("snippet",mWorkingNote.mContent);
				contentResolver.update(Uri.parse("content://micode_notes/note"), contentValues,"_id=?",new String[]{""+id});
				ContentValues contentValues1 = new ContentValues();
				contentValues1.put("content",mWorkingNote.mContent);
				contentResolver.update(Uri.parse("content://micode_notes/data"), contentValues1,"mime_type=? and note_id=?", new String[]{"vnd.android.cursor.item/text_note",""+id});

			}else{
				Toast.makeText(NoteEditActivity.this, "獲取圖片失敗", Toast.LENGTH_SHORT).show();
			}
			break;
		default:
			break;
	}
}
  • getPath()方法(FilePath: MiNotes\app\src\main\java\net\micode\notes\ui\NoteEditActivity.java)
//獲取文件的real path
public String getPath(final Context context, final Uri uri) {

    final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;

    // DocumentProvider
    if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {
        // ExternalStorageProvider
//            if (isExternalStorageDocument(uri)) {
//                final String docId = DocumentsContract.getDocumentId(uri);
//                final String[] split = docId.split(":");
//                final String type = split[0];
//
//                if ("primary".equalsIgnoreCase(type)) {
//                    return Environment.getExternalStorageDirectory() + "/" + split[1];
//                }
//            }
//            // DownloadsProvider
//            else if (isDownloadsDocument(uri)) {
//                final String id = DocumentsContract.getDocumentId(uri);
//                final Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
//                return getDataColumn(context, contentUri, null, null);
//            }
        // MediaProvider
//            else
            if (isMediaDocument(uri)) {
            final String docId = DocumentsContract.getDocumentId(uri);
            final String[] split = docId.split(":");
            final String type = split[0];

            Uri contentUri = null;
            if ("image".equals(type)) {
                contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
            }

            final String selection = "_id=?";
            final String[] selectionArgs = new String[]{split[1]};

            return getDataColumn(context, contentUri, selection, selectionArgs);
        }
    }
    // Media
    else if ("content".equalsIgnoreCase(uri.getScheme())) {
        return getDataColumn(context, uri, null, null);
    }
    // File
    else if ("file".equalsIgnoreCase(uri.getScheme())) {
        return uri.getPath();
    }
    return null;
}

小米便簽APP維護(hù)開(kāi)發(fā)完整源代碼地址:https://download.csdn.net/download/weixin_47936614/85436044文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-431913.html

到了這里,關(guān)于【軟件應(yīng)用開(kāi)發(fā)】小米便簽APP維護(hù)開(kāi)發(fā)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Android 平臺(tái)應(yīng)用軟件開(kāi)發(fā)(學(xué)習(xí)中)

    Android 平臺(tái)應(yīng)用軟件開(kāi)發(fā)(學(xué)習(xí)中)

    1,LinearLayout(線性布局),RelativeLayout(相對(duì)布局),F(xiàn)rameLayout(幀布局),AbsoluteLayout(絕對(duì)布局),TableLayout(表格布局)。 2,線性布局中的控件屬性說(shuō)明 ①android:background,設(shè)置UI控件的背景,其值可以是資源文件夾中的圖片或者是顏色的十六進(jìn)制值。 ②android:orientation,該屬性是線性布局

    2024年02月04日
    瀏覽(24)
  • 系統(tǒng)分析師---論軟件開(kāi)發(fā)模型及應(yīng)用

    論題:論軟件開(kāi)發(fā)模型及應(yīng)用 軟件開(kāi)發(fā)模型(Software Development Model)是指軟件開(kāi)發(fā)全部過(guò)程、活動(dòng)和任務(wù)的結(jié)構(gòu)框架。軟件開(kāi)發(fā)過(guò)程包括需求、設(shè)計(jì)、編碼和測(cè)試等階段,有時(shí)也包括維護(hù)階段。軟件開(kāi)發(fā)模型能清晰、直觀地表達(dá)軟件開(kāi)發(fā)全過(guò)程,明確規(guī)定了要完成的主要任務(wù)

    2024年02月04日
    瀏覽(89)
  • 如何應(yīng)用項(xiàng)目管理軟件進(jìn)行敏捷開(kāi)發(fā)管理

    如何應(yīng)用項(xiàng)目管理軟件進(jìn)行敏捷開(kāi)發(fā)管理

    敏捷開(kāi)發(fā)(Agile Development)是一種軟件開(kāi)發(fā)方法論,強(qiáng)調(diào)在不斷變化的需求和環(huán)境下,通過(guò)迭代、協(xié)作和自適應(yīng)的方式來(lái)開(kāi)發(fā)軟件。敏捷方法的目標(biāo)是提供更快、更靈活、更高質(zhì)量的軟件交付,以滿足客戶需求并實(shí)現(xiàn)項(xiàng)目成功。 在技術(shù)研發(fā)團(tuán)隊(duì)使用敏捷開(kāi)發(fā)來(lái)完成一個(gè)迭代時(shí)

    2024年02月12日
    瀏覽(36)
  • 區(qū)塊鏈技術(shù)在軟件開(kāi)發(fā)中的應(yīng)用

    區(qū)塊鏈技術(shù)在軟件開(kāi)發(fā)中的應(yīng)用

    如果你是一名軟件開(kāi)發(fā)者或者IT從業(yè)者,你一定已經(jīng)聽(tīng)說(shuō)過(guò)區(qū)塊鏈技術(shù)。區(qū)塊鏈?zhǔn)且环N基于密碼學(xué)的分布式賬本技術(shù),被廣泛應(yīng)用于數(shù)字貨幣、金融、物聯(lián)網(wǎng)等領(lǐng)域。但是,除了這些領(lǐng)域之外,區(qū)塊鏈技術(shù)還可以在軟件開(kāi)發(fā)中發(fā)揮重要作用。本文將介紹區(qū)塊鏈技術(shù)在軟件開(kāi)發(fā)

    2023年04月27日
    瀏覽(100)
  • 中文編程工具開(kāi)發(fā)語(yǔ)言開(kāi)發(fā)的實(shí)際案例:觸摸屏點(diǎn)餐軟件應(yīng)用場(chǎng)景實(shí)例

    中文編程工具開(kāi)發(fā)語(yǔ)言開(kāi)發(fā)的實(shí)際案例:觸摸屏點(diǎn)餐軟件應(yīng)用場(chǎng)景實(shí)例

    中文編程工具開(kāi)發(fā)語(yǔ)言開(kāi)發(fā)的實(shí)際案例:觸摸屏點(diǎn)餐軟件應(yīng)用場(chǎng)景實(shí)例 軟件特色: 1、功能實(shí)用,操作簡(jiǎn)單,不會(huì)電腦也會(huì)操作,軟件免安裝,已內(nèi)置數(shù)據(jù)庫(kù)。軟件在關(guān)閉的時(shí)候,可以設(shè)置會(huì)員數(shù)據(jù)備份到U盤(pán),數(shù)據(jù)本機(jī)備份一份,U盤(pán)備份一份,雙重備份數(shù)據(jù)安全。 2、軟件既

    2024年02月08日
    瀏覽(25)
  • 麥芯(MachCore)應(yīng)用開(kāi)發(fā)教程1 --- 設(shè)備軟件中間件

    麥芯(MachCore)應(yīng)用開(kāi)發(fā)教程1 --- 設(shè)備軟件中間件

    黃國(guó)強(qiáng) 2024/1/10 acloud@163.com ????????對(duì)任何公司來(lái)說(shuō),在短時(shí)間內(nèi)開(kāi)發(fā)一款高質(zhì)量設(shè)備專用軟件,是一件不太容易做到的事情。麥芯是筆者發(fā)明的一款設(shè)備軟件中間件產(chǎn)品。麥芯致力于給設(shè)備廠商提供一個(gè)開(kāi)發(fā)工具和平臺(tái),讓客戶快速高效的開(kāi)發(fā)自己的設(shè)備專用軟件。麥芯

    2024年01月25日
    瀏覽(31)
  • 【Android 逆向】程序員高危開(kāi)發(fā)方向 ( 違法軟件類型 | 賭博游戲 | 色情類應(yīng)用 | 涉及金融類軟件 | 爬蟲(chóng)類軟件 | 區(qū)塊鏈貨幣 | 甄別是否合法 )

    棋牌類 游戲開(kāi)發(fā) , 寫(xiě)這類游戲的程序員 很容易被抓 , 只要 涉及到了 充值 以及 提現(xiàn) , 就是涉嫌賭博 ; 常見(jiàn)的 就是 麻將類游戲 , 紙牌類游戲 , 具體的地方麻將或撲克玩法 , 德州撲克 , 21 點(diǎn) , 老虎機(jī) 等 類型的 游戲 ; 抽卡類的游戲 , 充值 然后 賭概率 , 比如原神這種 , 只充值

    2024年01月19日
    瀏覽(37)
  • 微服務(wù):解放軟件開(kāi)發(fā)的神器,引領(lǐng)企業(yè)級(jí)應(yīng)用的未來(lái)

    微服務(wù):解放軟件開(kāi)發(fā)的神器,引領(lǐng)企業(yè)級(jí)應(yīng)用的未來(lái)

    目錄 1、什么是微服務(wù)? 1.1 微服務(wù)的定義 1.2 微服務(wù)架構(gòu)的特點(diǎn) 2、微服務(wù)的優(yōu)勢(shì) 2.1 靈活性和可擴(kuò)展性 2.2 模塊化開(kāi)發(fā)和部署 2.3 高可用性和容錯(cuò)性 2.4 技術(shù)棧的多樣性 3、微服務(wù)的挑戰(zhàn) 3.1 分布式系統(tǒng)的復(fù)雜性 3.2 服務(wù)之間的通信和協(xié)調(diào) 3.3 數(shù)據(jù)一致性和事務(wù)管理 3.4 性能監(jiān)控

    2024年02月22日
    瀏覽(28)
  • 破局之作:首部開(kāi)源 AIGC 軟件工程應(yīng)用電子書(shū)《構(gòu)筑大語(yǔ)言模型應(yīng)用:應(yīng)用開(kāi)發(fā)與架構(gòu)設(shè)計(jì)》...

    破局之作:首部開(kāi)源 AIGC 軟件工程應(yīng)用電子書(shū)《構(gòu)筑大語(yǔ)言模型應(yīng)用:應(yīng)用開(kāi)發(fā)與架構(gòu)設(shè)計(jì)》...

    TL;DR 版; 在線:https://aigc.phodal.com 下載 1:https://github.com/phodal/aigc/releases 下載 2:https://pan.baidu.com/s/1wGc75vVHaZwvZyHeltyt8w?pwd=phod 2023 年的上半年里,我(@phodal)和 Thoughtworks 的同事們(如:@tianweiliu、@teobler、@mutoe 等)、 開(kāi)源社區(qū)的同伴們(如:卷王@CGQAQ、@genffy、 @liruifengv 等

    2024年02月15日
    瀏覽(30)
  • 基于ubuntu的STM32嵌入式軟件開(kāi)發(fā)(四)——應(yīng)用軟件工程的修改、Makefile及編譯腳本的編寫(xiě)

    基于ubuntu的STM32嵌入式軟件開(kāi)發(fā)(四)——應(yīng)用軟件工程的修改、Makefile及編譯腳本的編寫(xiě)

    ????????本文主要介紹基于標(biāo)準(zhǔn)庫(kù)函數(shù)移植的STM32的應(yīng)用軟件工程的修改,主要涉及到文件內(nèi)容修改、Makefile文件編寫(xiě)、編譯腳本編寫(xiě)等內(nèi)容,其中編譯腳本是基于arm-none-eabi-gcc的交叉編譯器撰寫(xiě)的。程序親測(cè)可以正常編譯,生成.bin和.hex的可燒錄鏡像文件。 1.首先修改 pr

    2023年04月15日
    瀏覽(37)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包