[Android Studio]下拉式選單(Spinner)筆記
紀錄下拉式選單(Spinner)基礎概念,進而改變選單文字及標題大小、顏色,到客製化自訂下拉式選單。
筆記一(基礎概念):Spinner基本操作。
內容請參考:[Android Studio]下拉式選單(Spinner)筆記一(基礎概念)@ KOEI的旅行
筆記二:dialog對話框模式。
[Android Studio]下拉式選單(Spinner)筆記
紀錄下拉式選單(Spinner)基礎概念,進而改變選單文字及標題大小、顏色,到客製化自訂下拉式選單。
筆記一(基礎概念):Spinner基本操作。
內容請參考:[Android Studio]下拉式選單(Spinner)筆記一(基礎概念)@ KOEI的旅行
筆記二:dialog對話框模式。
[Android Studio]下拉式選單(Spinner)筆記五--客製化選單
基本的Spinner只有文字,想要搭配圖片可以客製化選單,使用ArrayAdapter,並自訂選項內容,重新設計選項佈局(layout)。可參考Coding in Flow Custom Spinner - Android Studio Tutorial,裡面有詳細步驟,Source code: https://codinginflow.com/tutorials/android/custom-spinner,客製化Spinner範例畫面如下:
此次筆記仍以行星為主題,Spinner初始畫面結果如下:
Spinner下拉清單佈局如下:
準備工作:
[Android Studio]下拉式選單(Spinner)筆記四--設定標題文字大小顏色
經由設定layout可以改變Spinner選項清單文字大小顏色(參考[Android Studio]下拉式選單(Spinner)筆記三-設定文字大小顏色@ KOEI的旅行),但標題的樣式卻沒改變,本次從尋找dialog樣式設定開始,找到設定標題的style,並設定新的style來改變標題的大小和顏色。
Spinner是經alertDialogTheme來設定對話框樣式,可先編輯styles.xml,加入下列一行(MyAlertDialogStyle是之後要設定的style):
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="alertDialogTheme">@style/MyAlertDialogStyle</item>
</style>
下一步是尋找alertDialogTheme原來設定值,在Android Studio中,滑鼠放在上列"alertDialogTheme" 上,按[ctrl]並點擊滑鼠,畫面就會切到values.xml中有alertDialogTheme的位置,繼續搜尋alertDialogTheme可以找到
<item name="alertDialogTheme">@style/ThemeOverlay.AppCompat.Dialog.Alert</item>
再尋找ThemeOverlay.AppCompat.Dialog.Alert樣式(一樣按[ctrl]並點擊滑鼠):
<style name="ThemeOverlay.AppCompat.Dialog.Alert" parent="Base.ThemeOverlay.AppCompat.Dialog.Alert"/>
<style name="Base.ThemeOverlay.AppCompat.Dialog" parent="Base.V7.ThemeOverlay.AppCompat.Dialog"/>
<style name="Base.ThemeOverlay.AppCompat.Dialog.Alert">
<item name="android:windowMinWidthMajor">@dimen/abc_dialog_min_width_major</item>
<item name="android:windowMinWidthMinor">@dimen/abc_dialog_min_width_minor</item>
</style>
會發現Base.ThemeOverlay.AppCompat.Dialog.Alert並沒有樣式設定,改搜尋Base.ThemeOverlay.AppCompat.Dialog的parent:Base.V7.ThemeOverlay.AppCompat.Dialog。
<style name="Base.V7.ThemeOverlay.AppCompat.Dialog" parent="Base.ThemeOverlay.AppCompat">
<item name="android:colorBackgroundCacheHint">@null</item>
<item name="android:colorBackground">?attr/colorBackgroundFloating</item>
<item name="android:windowFrame">@null</item>
<item name="android:windowTitleStyle">@style/RtlOverlay.DialogWindowTitle.AppCompat</item>
<item name="android:windowTitleBackgroundStyle">@style/Base.DialogWindowTitleBackground.AppCompat</item>
<item name="android:windowBackground">@drawable/abc_dialog_material_background</item>
...
</style>
找到windowTitleStyle就是設定標題的參數,繼續尋找它的style RtlOverlay.DialogWindowTitle.AppCompat
<style name="RtlOverlay.DialogWindowTitle.AppCompat" parent="Base.DialogWindowTitle.AppCompat">
</style>
相同方式繼續往parent找
<style name="Base.DialogWindowTitle.AppCompat" parent="android:Widget">
<item name="android:maxLines">1</item>
<item name="android:scrollHorizontally">true</item>
<item name="android:textAppearance">@style/TextAppearance.AppCompat.Title</item>
</style>
<style name="TextAppearance.AppCompat.Title" parent="Base.TextAppearance.AppCompat.Title"/>
最後找到的是設定文字的大小跟顏色參數
<style name="Base.TextAppearance.AppCompat.Title">
<item name="android:textSize">@dimen/abc_text_size_title_material</item>
<item name="android:textColor">?android:textColorPrimary</item>
</style>
[Android Studio]下拉式選單(Spinner)筆記三--設定文字大小顏色
Spinner可以經由指定的layout來顯示想要的樣式,最基本的是設定TextView文字樣式,調整文字大小及顏色等。有2個地方需要指定layout:
1.產生ArrayAdapter時,設定spinner顯示的樣式(預設及選取後樣式)。
2.Spinner展開時,選項清單樣式,(setDropDownViewResource)。
此次要把spinner顯示成藍底紫色字,Spinner展開後成黑底黃字(浩瀚黑暗的宇宙中,行星發出黃色光芒),如下面2個圖:
先參考[Android Studio]下拉式選單(Spinner)筆記二@ KOEI的旅行順利產生Spinner。
在src\main\res\layout產生2個新的layout xml,1個是顯示Spinner藍底紫字的spinner_style.xml,另1個是Spinner展開的黑底黃字spinner_item.xml,除了設定顏色外也設定文字大小等參數。
[Android Studio]下拉式選單(Spinner)筆記二--dialog模式
下拉式選單Spinner元件在是一組設定好的資料選項,提供標準的下拉式選單介面,供使用者選取。有2種顯示模式,1種是dropdown(下拉式);另一種是dialog(對話式),預設是dropdown,筆記二使用dialog。部分資料請先參考[Android Studio]下拉式選單(Spinner)筆記一@ KOEI的旅行。
新增Spinner,並顯示選取的選項,步驟如下:
步驟1:新增Spinner
先在Android Studio新增project(點選[File>New>New Project),種類選擇[Empty Activity],完成新增project(預設為顯示"Hello World!")。
新增Spinner: 在activity_main.xml 選擇以[Design]顯示,Palette點選[Containers],再點選[Spinner],按滑鼠右鍵,點選[Add to Design],完成新增(預設id為spinner)。
為方便使用TextView,把TextView的id設為"hello",在activity_main.xml的<TextView加入android:id="@+id/hello"。
(同[Android Studio]下拉式選單(Spinner)筆記一@ KOEI的旅行)
[Android Studio]下拉式選單(Spinner)筆記一(基本概念)
下拉式選單Spinner元件是在一組設定好的資料選項,提供標準的下拉式選單介面,供使用者選擇1個選項。有2種顯示模式,1種是dropdown(下拉式);另一種是dialog(對話式),預設是dropdown,筆記一使用預設的dropdown。(dialog請參考[Android Studio]下拉式選單(Spinner)筆記二-dialog模式@ KOEI的旅行)
Spinner主要有下列三個類別:
1.Spinner
2.SpinnerAdapter:Adapter(適配器)是View與資料間的橋樑,Spinner通常採用ArrayAdapter,將陣列(Array)資料依指定的layout顯示出來。SpinnerAdapter定義2個view,一個是Spinner本身的view(選取選項後的樣式);另一個是點Spinner後,選單清單的樣式。
3.AdapterView.OnItemSelectedListener:設定選取選單後的動作。
將這三個類別設定完成,就能完成整個Spinner操作。
資料參考:Android Developers > Docs > Guides > Spinners
新增Spinner,並顯示選取的選項,步驟如下:
步驟1:新增Spinner
Android studio載入OpenCV 4.3 module
示範於新的Project中import OpenCV module,使用靜態初始化,把.so都包含在應用程序包,不使用異步初始化(程式包不含OpenCV apk,需下載安裝)。Android Studio版本 4.0、OpenCV 4.3。初學者可以先用OpenCV samples建立好的OpenCV環境,新增module進行練習,參考:Android studio新增OpenCV APP-初始化@KOEI的旅行 (本次會使用其中OpenCV初始化程式碼)。
前置工作:OpenCV SDK已經下載,sapmles也已經正確import,且正常執行,可參考:Android studio載入OpenCV範例@KOEI的旅行。
Android studio載入OpenCV 4.3 module步驟
步驟1:新增Project
開啟Android Studio,點選File->New->New Project,Project Template選擇[Native C++] (如下圖),後續有cmake參數可以編輯。
按[Next]。Minimum SDK可以依sample選API 26。
Android studio新增OpenCV APP-初始化
新增一個OpenCV的APP module,初學者可從下載且import完成的OpenCV samples環境開始,在opencv_samples project下新增module,不需太多設定,就可以使用OpenCV。
前置工作:OpenCV sapmles已經正確import,而且正常執行,可參考:Android studio載入OpenCV範例@KOEI的旅行。
新增OpenCV APP並初始化步驟如下:
步驟1:新增Module
開啟opencv_samples project,點選File->New->New Module,Module Type選擇[Phone & Tablet Module]:
按[Next]。在Phone & Tablet Module視窗輸入名稱,例如[Samples-test],Minimum SDK選API 26。
Android studio載入OpenCV範例
準備工作:
1.安裝完成Android Studio,確認可正確執行APP。此次使用的版本是Android Studio 4.0。
2.下載OpenCV,至OpenCV Releases (https://opencv.org/releases/)下載檔案,此次使用OpenCV 4.3,在OpenCV–4.3.0項目下,點選Android,即開始下載opencv-4.3.0-android-sdk.zip,包含範例及SDK。
3.解壓縮opencv-4.3.0-android-sdk.zip,產生OpenCV-android-sdk目錄,其下有sample及sdk共2個目錄。將OpenCV-android-sdk整個目錄資料複製到D碟,保留原下載資料,進行後面練習亂掉時可以復原。
載入OpenCV範例步驟:
步驟1:Import Project
Android Studio點選File > New > Import Project..,選上述複製到D碟的OpenCV-android-sdk目錄下的samples,如下圖:
按[OK]即完成。
Android Virtual Device以電腦鏡頭模擬手機鏡頭
Android Virtual Device(AVD)可模擬實體Android裝置的組態,但預設的鏡頭可能只是一張圖片,如果要以電腦鏡頭模擬手機鏡頭,需要手動設定。以下以圖示一步步顯示各步驟:
步驟1:編輯AVD
點選AVD Manager,或功能列Tools -> AVD Manager,打開AVD Manager。
要設定的模擬手機,點[編輯]圖示(上圖紅圈像筆的圖),進入虛擬裝置組態視窗。
步2:進階設定Camera
虛擬裝置組態(Virtual Device Configuration)視窗,點選下方[Show Advanced Settings](下圖紅圈處)。
Android Studio的project SDK路徑或版本有問題,可能出現以下錯誤訊息:
SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID_HOME environment variable.
解決方法如下:
方法1:重新指定SDK Location
SDK的路徑在C:\Users\OOO\AppData\Local\Android\Sdk,OOO為安裝Android Studio時登入的使用者帳號,注意SDK路徑不要有中文字或特殊符號。
點選File -> Project Structure -> SDK Location出現Project Structure視窗,在Android SDK Location點選上述SDK的路徑。
按[OK],完成設定SDK路徑。
local.properties會設定sdk.dir=C\:\\Users\\OOO\\AppData\\Local\\Android\\Sdk
WIN 10設定環境變數
一些軟體會使用系統環境變數,但有時軟體安裝時沒設好,需要手動新增,初學者可能找不到可以設定環境變數的地方,以下一步步圖示如何在WIN 10新增環境變數:
步驟1:搜尋環境變數設定畫面
點擊WIN 10左下方[搜尋]圖示(放大鏡圖示)輸入[環境變數]後,得到最佳比對,點[編輯系統環境變數 控制台]。
出現[系統內容]視窗,點選下方[環境變數(N)]。
步驟2:新增環境變數
更新Android Studio版本或import的project使用不同Gradle版本,所需要的Gradle版本沒正確下載安裝,會出現以下錯誤。
The specified Gradle distribution 'https://services.gradle.org/distributions/gradle-4.6-all.zip' does not appear to contain a Gradle distribution.
解決方法1:重新選擇Gradle版本
點選File -> Project Structure -> Project -> Gradle Version,選擇需要的版本,例如4.6,按OK。
更新Gradle,重新Sync Project即可。 如果還是沒用,請使用方法2。
解決方法2:刪除Gradle版本,讓系統自動重新下載安裝,步驟如下:
1.關閉Android Studio。
選取Android手機多張圖片-使用SAF
SAF(Storage Access Framework)「儲存空間存取架構」,可透過儲存空間供應程式開啟文件、圖片等其他檔案,提供標準UI可讓使用者在各種應用程式和供應程式中,以相同的方式存取檔案。只需幾行程式碼,即可將用戶端應用程式與 SAF 整合。
SAF 內含下列項目:
1.文件供應程式:可顯示儲存服務(storage service)所管理檔案的內容供應程式。Android平台內建數種文件供應程式,例如「下載」、「圖片」和「影片」。
2.用戶端應用程式:可呼叫ACTION_CREATE_DOCUMENT, ACTION_OPEN_DOCUMENT,或ACTION_OPEN_DOCUMENT_TREE接收文件供應程式所傳回檔案。
3.挑選器:讓使用者透過文件供應程式存取文件的系統 UI。
官方網站:Open files using storage access framework(儲存空間存取架構)
文件供應程式挑選器:
選取及複製Android手機圖片-使用MediaStore
練習使用MediaStore.Images選取1張圖片,並複製到PICTURE目錄。
MediaStore是Android上的多媒體內容供應程式,可用於管理影片、音訊、圖片等資料。提供5種類別:
MediaStore.Audio | 影片 |
MediaStore.Downloads | 下載項目 |
MediaStore.Files | 文件 |
MediaStore.Image | 圖片 |
MediaStore.Vedio | 音訊 |
參考資訊:Android Developers>Docs>Reference>MediaStore(https://developer.android.com/reference/android/provider/MediaStore)
Android已經把整個多媒體檔案資訊都存到資料庫中,多媒體資料庫存放目錄在 /data/data/com.android.providers.media/databases/,有2個資料庫:external.db與internal.db,external為SD卡中多媒體檔案;internal為系統多媒體檔案,EXTERNAL_CONTENT_UR與INTERNAL_CONTENT_URI分別對應到多媒體資料庫external.db與internal.db。圖片存放的URI為MediaStore.Images.Media.INTERNAL_CONTENT_URI 和 MediaStore.Images.Media.EXTERNAL_CONTENT_URI 兩個基礎URI,content內容分別為 content://media/internal/images/media 和 content://media/external/images/media。
Android 10或更高版本不建議直接使用真實路徑處理檔案,需用MediaStore存取多媒體,而預設已有存取多媒體檔案權限,不需再設定READ_EXTERNAL_STORAGE或WRITE_EXTERNAL_STORAGE。假設一個圖檔真實路徑位於 /storage/0/DCIM/IMG0001.JPG,使用MediaStore獲得系統設定的ID,例如為30,則該圖片的URI是基礎URI加上ID,也就是content://media/external/images/media/30,運用這個URI就可以操作這張圖片。
手機APP常會需要選擇圖片或視訊,使用內容供應程式(Content Provider)就可以管理多媒體資料庫,不必自行開發相關程式。
使用選取圖片的內容供應程式,取得回傳的圖片訊息步驟如下:
步驟1:使用Intent()啟動MediaStore.Images.Media,應用行為選取圖片
Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
成功安裝Microsoft Visual C++ 14.0
使用Python pip install 安裝套件時,如果出現以下訊息,表示要先安裝Visual C++ 14.0及.NET 。
error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": https://visualstudio.microsoft.com/downloads/
這裡的Microsoft Visual C++ 14.0指的是Build Tools for Visual Studio 2015 (Visual C++ 12對應到Visual Studio 2013,Visual C++ 15 對應到 Visual Studio 2017) 。
實驗後,最快成功安裝方法如下:
一、下載Build Tools for Visual Studio 2015 Update 3個別使用版本
下載visualcppbuildtools_full.exe,進入Microsoft 下載頁面 https://visualstudio.microsoft.com/downloads/ ,最下方點選[舊版下載],再點選[可轉發套件及建置工具],會顯示Microsoft Build Tools 2015 Update 3 (用來建置 Managed 應用程式的基本工具。 之前包含在 .NET Framework 中,現在已經在此提供個別下載使用),點選[下載]; 或直接網路搜尋取得執行檔。
二、執行visualcppbuildtools_full.exe
下載安装文件約2G,安裝完成後,就可以看到安裝一堆東西。
使用Kivy評估
Kivy是開源Python函式庫,用於開發行動應用程式和其它採用自然使用者介面的多點觸控應用軟體。它可以在Android,iOS,Linux,OS X和Windows執行。採用MIT授權條款,Kivy是自由並且開源的軟體。 (資料來源:Kivy - 维基百科)
使用Python進行開發,結合Kivy開發APP,如不考慮效能,是可行方式。
評估要不要使用Kivy開發APP,先確定使用的package能不能被轉為APP程式,以Android系統為例,使用 p4a (Python-for-android)將Python程式打包成Android APK,有支援的Recipes才能被轉,否則package import會失敗。確認python-for-android的Recipes https://github.com/kivy/python-for-android/tree/master/pythonforandroid/recipes ,numpy、opencv有支援,沒有問題,但機器學習用的tensorflow、keras尚未支援(另一觀點手機資源有限,執行機器學習不一定適合),要能完全運用還有一段路要走。
在Anaconda成功安裝Kivy
安裝Kivy步驟如下(直接執行install kivy,目前還不完善,不建議用):
1.下載wheel檔。
2.安裝相依模組及Kivy,2行指令即可安裝成功。
Calc文字轉數字之處理方式
使用Calc時,遇到數字顯示都沒錯,但進行計算(例如SUM)或格式使用千位分隔符號(,)時,卻都沒效果? 原因為看到的是數字,但實際是文字,所以不能運算,也不會顯示千位分隔符號,甚至資料中前後可能有空白字元,也看不出異常,圖一資料B1=" 1000"(第一字元為空白),B2="10000",B3="2000 "(最後字元為空白),都是文字,不是數字,會發生以下狀況:
一、計算異常:加總後合計為0(如圖一),因文字數值為0。
圖一: 計算異常
二、顯示異常:使用[儲存格格式化]→[分類]→[數目],顯示千位分隔符號功能(如下圖)沒有效果,1000不會顯示成1,000,結果與上圖一樣。
需要將文字格式轉為數字格式才能進行運算。
方法一、使用筆記本消除資料格式再貼回Calc
資料庫測試資料,日積月累愈來愈多,執行時間也愈來越久,所以需要定期清理資料,如果資料庫只想保留100筆資料,其餘的都刪除,如何下SQL呢?
直接的想法: delete TableName where rownum >100; (TableName為要刪除資料table的名字)
結果是:0 rows deleted,刪除失敗!
改成以下語法才能成功: delete TableName where rownum <= (select (count(*)-100) from TableName );
如果只留50筆資料,把數字100改為50即可。
有條件的刪除:例如資料庫有2010至2015年資料(欄位YEAR),2015年資料只保留100筆,加條件後SQL如下:
delete TableName where YEAR='2015' and rownum <= (select (count(*)-100) from TableName where YEAR='2015');