十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
不多說,先上圖:
桃山網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)公司于2013年開始到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。
列舉當(dāng)前目錄下的所有文件,如果是選擇目錄,則不顯示文件,如果是選擇文件,則需要顯示文件。
新建目錄,就是在當(dāng)前路徑下新建目錄,同時(shí)新建后的目錄要能夠及時(shí)顯示在文件列表中。
需要讀寫權(quán)限,添加第三方權(quán)限請求庫:
使用:
DialogFragment與Dialog有一些不同的地方,其中show方法需要傳入FragmentManager
另外需在onCreateVie方法初始化布局,以及獲取到控件
另外就是RecycleView,之所以采用RecycleView,是因?yàn)榘l(fā)現(xiàn)如果用ListView,內(nèi)存會(huì)不斷增加,很難降下來。
其中CommonAdapter繼承自BaseAdapter,是通用的Adapter,兼容ListView:
這一部分邏輯有FileProvider類完成; 這里需要注意的是,有些手機(jī)不支持讀取根目錄,所以改為讀取"/mnt/"作為根目錄就行讀取。
另外跳轉(zhuǎn)目錄都是改變當(dāng)前路徑,然后再刷新數(shù)據(jù)。
同時(shí)在其內(nèi)部定義了FileData類:
文件選擇,可以通過當(dāng)前路徑路徑以及列表索引來唯一確定路徑;都是,當(dāng)跳轉(zhuǎn)目錄后,索引應(yīng)該重置。
這里采用WeakReference記錄選擇的控件,但選擇其他目錄或者文件時(shí),之前的控件需要重置一下狀態(tài)。
該源碼主要用于圖片合成gif或者視頻,其中文件選擇彈窗是自己寫的。感覺這個(gè)彈出應(yīng)該有許多地方可以用到,所以寫下這篇文章,方便以后參考查看。
private?void?openFileBrowse()?{
Intent?intent?=?new?Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");//?文件類型
Intent?wrapperIntent?=?Intent.createChooser(intent,?"打開方式");
startActivityForResult(wrapperIntent,?0);
}
protected?void?onActivityResult(int?requestCode,?int?resultCode,
Intent?intent)?{
//?String?path;
if?(resultCode?==?RESULT_OK)?{
if?(requestCode?==?0)?{
if?(intent?==?null)?{
Toast.makeText(this,?"未選擇任何文件",?Toast.LENGTH_LONG).show();
return;
}
Uri?uri?=?intent.getData();
if?(uri?==?null)?{
Toast.makeText(this,?"未選擇任何文件",?Toast.LENGTH_LONG).show();
return;
}
String?scheme?=?uri.getScheme();
//可能是content,file等等.需要判斷其是不是file
?如果不是調(diào)用文件管理器,可能返回其他
?if?(scheme?!=?null
?("file".endsWith(scheme.toLowerCase()))
String?path?=?uri.getPath();//文件路徑
}
}
}
一直以來對于系統(tǒng)選擇資源文件的流程都模糊不清,每次定義資源的時(shí)候都戰(zhàn)戰(zhàn)兢兢,終于忍無可忍,無需再忍,決定掏出官方文檔來仔細(xì)瞧一瞧。摘要記錄,以防忘記。
官方文檔
一個(gè)簡單的項(xiàng)目目錄如下所示:
其中資源文件放置在res目錄下,res支持的資源目錄和類型如下:
對于一個(gè)資源文件,針對設(shè)備的不同,需要提供一整套的資源文件供程序運(yùn)行時(shí)根據(jù)設(shè)備和運(yùn)行條件(橫屏或者豎屏、移動(dòng)還是聯(lián)通)的不同來選擇合適的資源文件。
資源文件必須名稱相同地放置到合適的資源文件夾下面,而 資源文件夾的命名至關(guān)重要 。資源文件夾必須嚴(yán)格按照“資源類型名稱-配置1-配置2-...”的方式進(jìn)行命名,如圖2中,drawable是資源類型,hdpi是一個(gè)分辨率的配置。在drawable-hdpi和drawble文件夾中分別放置相同名稱的高分辨率和默認(rèn)配置的2個(gè)資源文件。
設(shè)備在運(yùn)行時(shí)選擇資源的標(biāo)準(zhǔn)就是按照資源文件夾的命名來匹配選擇最優(yōu)的資源文件。 設(shè)備按如下表的配置順序依次匹配來選擇最佳的資源(注意: 下表的配置僅為主要配置,不是全部。 ):
對于資源文件夾的命名必須按照上表中的順序依次配置,切不可倒置。
android系統(tǒng)按照如圖3所示進(jìn)行資源的匹配選擇。
例如app有以下資源文件夾:
drawable/
drawable-en/
drawable-fr-rCA/
drawable-en-port/
drawable-en-notouch-12key/
drawable-port-ldpi/
drawable-port-notouch-12key/
系統(tǒng)配置:
運(yùn)營商 = mcc400-mnc00
語言區(qū)域 = en-rGB
屏幕方向 = port
屏幕密度 = hdpi
觸屏類型 = nottouch
開始選擇:
請確保 每種配置都有一個(gè)默認(rèn)的資源可以進(jìn)行選擇 ,這樣在出現(xiàn)設(shè)備沒有任何匹配文件夾的情況下可以選擇默認(rèn)的文件夾中的資源而不至于導(dǎo)致系統(tǒng)崩潰。例如,如果我們只配置2種文件夾values-en,values-zh,那么在設(shè)備語言為法語(fr)的情況下,按照先移除沖突的資源文件夾的準(zhǔn)則,這2個(gè)資源文件夾都被移除了已經(jīng)沒有其他可以選擇的資源文件了,系統(tǒng)會(huì)崩潰, 所有任何資源文件夾都請保留一個(gè)默認(rèn)名稱的資源文件夾 。
有時(shí)候有些資源希望在不同的配置下可以服用,例如一個(gè)很大的背景圖片希望在語言為中文(zh)和英文(en)的情況下都使用,這時(shí)候如果在drawable-zh和drawable-en的文件夾下面都放置一種圖片當(dāng)然是可以的,只是這樣會(huì)造成apk的體積過大。這時(shí)候可以將此圖拷貝到drawable/文件夾下命名為icon_zh_en,而在
drawable-en和drawable-zh文件夾下分別保存下面的icon.xml文件,那么同樣載en和zh的配置下也可以通過引用R.drawable.icon引用到圖片,從而對apk瘦身。同樣對于資源文件、數(shù)組、布局文件都可以使用別名來引用以達(dá)到避免資源重復(fù)的問題。