安卓初學基礎學習筆記

weixin_33782386發表於2018-06-27

專案結構介紹

  • src:存放所有java原始碼
  • gen:系統自動生成的配置檔案
  • Android x.x.x:包括構建程式所需的x.x.x版本的安卓SDK、APIs
  • assets:存放資源圖片,未使用時不會生成id且不會加入到apk包裡面佔大小
  • res:所有用到的資源,如圖片、佈局等
  • drawable-xxx:不同解析度的圖片資源
  • layout:佈局檔案
  • values:字串、主題、顏色、樣式等資原始檔(values-v11/14 是現在版本出現的 v-11是3.0版本14是4.0版本)
  • AndroManifest.xml:清單檔案,配置應用的相關的主要資訊(包名、許可權、程式元件等)

控制元件概述

  • <b>TexView:</b>只能做顯示框

    • 控制元件屬性(id-id,layout_width-寬度,高度,text-內容,textSize-字型大小(單位:一般是sp),textColor-顏色,background-背景)
    • 控制元件寬度:warp_content-和文字寬度一樣,match_parent-鋪滿父容器(在2.3的api之後新增的屬性),fill_parent-填充父容器(在2.3之前的屬性)
    • 跑馬燈效果:當頁面中只有一個textView時,


      2761781-41191887dd5e4adb.png
      單個TextView

    多個時,需要自定義一個繼承於textView類,在裡面定義一個isFocused()方法且返回true,然後再xml裡面使用自定義控制元件(包名.類名)


    2761781-9a999ddba7175170.png
    多個TextView
  • <b>EditText</b>:輸入框

    • 控制元件屬性(比顯示框多出了 hint-提示文字,inputType-文字型別 這2個屬性)
    • 修改樣式
  • <b>AutoCompleteTextView</b> 動態匹配輸入的內容(輸入東西,出現相應的列表以供選擇)

    • 控制元件屬性(completionThreshold:設定輸入多少個字元開始匹配)
    • 1.在activity裡面找到對應控制元件,2.建立一個介面卡,3.初始化資料來源,4.用setAdapter將介面卡和控制元件關聯起來


      2761781-192ab7ee58da504b.png
      程式碼繫結控制元件
  • <b>MultiAutoCompleteTextView</b> 相較於autocom...可以多設定一個分隔符的屬性

    2761781-98948629ac0a6ae2.png
    效果圖展示

初始化


2761781-a662801e3f12cfc4.png
初始化控制元件
  • <b>ImageView</b>:顯示圖片
    • 控制元件屬性(src-圖片,background -背景圖片、顏色)
  • <b>Button、ImageButton</b>
    • 獲取xml中的按鈕:btn = (Button) findViewById(R.id.button的id);
    • 控制元件屬性: ImageButton無text屬性,Button無src屬性
    • 按鈕onClick事件來監聽按鈕點選(所有控制元件都有這個事件),
      • 監聽事件實現的幾種寫法:1.匿名內部類 setOnClickListener(new OnClickLen...這裡將會是一個bolck回撥),2.獨立類(相當於弄一個父類出來


        2761781-573cf303a7ce466b.png
        獨立類

,3.實現介面的方式 需要在類實現OnClickListener介面(使用implements關鍵詞呼叫),會在當前類實現onClick方法(會自動生成)btn.setOnClickListener(this)呼叫

  • <b>ToggleButton</b> 開關按鈕-相當於switch控制元件,預設是關閉的

    • 控制元件屬性: checked-是否為開,textOff-關閉顯示什麼,textOn-開啟顯示什麼
    • 使用:給按鈕設定監聽器,需要類實現CheckedChangeListener介面


      2761781-c19f0dfbaa0acfd0.png
      設定點選回撥
  • <b>CheckBox</b> 核取方塊

    • 控制元件屬性:


      2761781-f482c02f3f03b818.png
      屬性
    • 使用:


      2761781-4ddb906945a26d48.png
      使用方法
  • <b>RadioGroup和RadioButton</b> 單選列表

    • 屬性:


      2761781-1c2cd46696ebe4af.png
      單選列表屬性

String的使用

在string檔案裡面寫入 <string name="xxx(用英文)">呼叫後獲取的字串</string>

implements關鍵字代表讓一個類擁有另一個類的屬性

六大布局(佈局中可以包含其他佈局,可相互套用)

線性佈局(LinerLayout)

是線性佈局控制元件,決定它包含的子控制元件是水平-Hor 還是垂直-Ver 排布方式。


2761781-2395e63e19323dbb.png
常用屬性
2761781-35432edce8141227.png
子控制元件在Layout中常用屬性

layout_weight這個屬性賦值 代表所有控制元件的屬性都加起來後佔得比例。例如:控制元件a的該屬性=1,控制元件b的該屬性=2,那麼到時候a的比例就是1/3.

相對佈局(RelativeLayout)

控制元件的位置設定是相對的,它包含的子空間將以控制元件之間相對位置或子類控制元件相對於父類容器的位置的方式排列。


2761781-5b802d494b288414.png
效果圖

常用屬性:
相對父類容器的屬性


2761781-f41088e3df10b483.png
相對父類容器的屬性

相對於子類控制元件的屬性


2761781-d19bfbdf4ddb8b3d.png
相對於子控制元件的屬性

約束佈局(ConstraintLayout)

ConstraintLayout是Android Studio 2.2中主要的新增功能之一,也是Google在去年的I/O大會上重點宣傳的一個功能。非常適合使用視覺化的方式來編寫介面,但並不太適合使用XML的方式來進行編寫。當然,視覺化操作的背後仍然還是使用的XML程式碼來實現的,只不過這些程式碼是由Android Studio根據我們的操作自動生成的。還可以有效地解決佈局巢狀過多的問題

  • 新增約束-拖動右邊檢視中的點來確定約束對應哪個,可以是底部檢視,也可以是其他控制元件

    • 控制元件對根檢視新增約束

      2761781-4ec50ad6cbdcf5ae.gif
      新增約束

    • 控制元件之間的約束新增


      2761781-206ea632c8b0b717.gif
      控制元件之間新增約束
  • 刪除約束

    • 單個約束刪除


      2761781-eb4a598d815c1ee3.gif
      刪除單個約束
    • 單個控制元件所有約束刪除


      2761781-4dd89665561a9f24.gif
      刪除所有約束
    • 當前頁面所有約束刪除
      直接選中頂部的這個按鈕就OK


      2761781-55b35ba3719b1fd0.gif
      刪除當前頁面所有約束

幀佈局(FrameLayout)

所有的元素都不能被指定放置的位置,它們都在父檢視的左上角,並且後面的子元素在前面子元素之上。 可以用來做載入進度條和文字。
當你想設定前景圖時,可以使用foreground將當前控制元件放在最前面來。

絕對佈局(AbsoluteLayout)

座標佈局,直接指定子元素的絕對位置。
不常用。瞭解下就OK

表格佈局(TableLayout)

相當於tableview 每一行為一個TableRow物件,繼承自View。
自身的屬性


2761781-ed9046bdcdae1aa9.png
屬性

<b>當想要所有控制元件都呼叫的話,直接用 = "*";</b>

下面這2個屬性是使用在TableRow內部控制元件的屬性中的


2761781-3fbfc57d8af2bb04.png
Row的屬性

Activity(相當於OC的VC)

什麼是Activity? 檢視控制器
建立到銷燬的生命週期:

onCreate()----建立
onStart()-----執行
onResume()----獲取焦點
onPause()-----失去焦點
onStop()------暫停
onDestory()---銷燬
onRestart()---重新執行
st=>start: onCreate
e=>end: onDestory
op1=>operation: onStart
op2=>operation: onResume
op3=>operation: onPause
op4=>operation: onStop
op5=>operation: onRestart
cond=>condition: 不重新啟動?

st->op1->op2->op3->op4->cond
cond(yes)->e
cond(no)->op1

從啟動到後臺,再到前臺的生命週期:

2761781-2384560cee0e768d.png
啟動->後臺->前臺的生命週期

從啟動到失去焦點,再到獲取到焦點的生命週期:

2761781-e5113b8376cb1583.png
啟動->失去焦點->獲取焦點的生命週期

Intent-意圖

它可以啟動一個activity、Service、Broadcasts(廣播)

  • 屬性:Action-動作(常用),Data-資料(常用),Category-分類,Type-型別,Compent-元件,Extra-擴充套件信。
  • Action-是一個字串常量,系統自己定義了一些常量,例如:ACTION_CALL-啟動電話、ACTION_BATTERY_LOW-傳送一個電池過低的警告等等。
    • 常見的Action
    1. ACTION_CALL activity 啟動一個電話.
    2. ACTION_EDIT activity 顯示使用者編輯的資料.
    3. ACTION_MAIN activity 作為Task中第一個Activity啟動
    4. ACTION_SYNC activity 同步手機與資料伺服器上的資料.
    5. ACTION_BATTERY_LOW broadcast receiver 電池電量過低警告.
    6. ACTION_HEADSET_PLUG broadcast receiver 插拔耳機警告
    7. ACTION_SCREEN_ON broadcast receiver 螢幕變亮警告.
    8. ACTION_TIMEZONE_CHANGED broadcast receiver 改變時區警告.
  • Data-
元件名稱 方法名稱
Activity-檢視 startActivity(intent) , startActivityForResult(intent,requestCode)
Servic-服務 startService(Intent service) , bindService(Intent service, ServiceConnection conn,int flags)
Broadcasts-廣播 sendBroadcast()-該方法有很多的方式呼叫,sendOrderedBroadcasts-有2個函式,根據情況使用

其中廣播的Intent引數的 RequiresPermission 修飾符表示需要許可,即要許可權。

拿到別人的專案需要配置的地方(協同開發)

Android Studio正確開啟專案只需要兩步,或者說找到兩個檔案進行簡單的修改就好,最好在開啟之前進行修改

  • gradle-wrapper.properities
    查詢路徑:/gradle/wrapper/ gradle-wrapper.properities,開啟後可以看到最後一行是一個地址連結,重點是連結的最後部分gradle-2.10-all.zip,AS不同版本對應的GradleWrapper版本號也不一樣,想知道自己當前的是多少,可以在As命令列如gradlew -v檢視,也可以新建一個專案到該路徑下檢視,修改完成後儲存。
    2761781-4fc543c6f78f3118.png
    image.png
  • build.gradle
    第二個需要修改的檔案更好找,就是我們常用的Project下的build.gradle,開啟後找到如圖所示位置,把classpath的gradle版本號也改成當前對應的就行,至於當前的版本號是多少,隨便開啟一個自己在本地建立的project就能知道了

錯誤

遇見這種錯誤:1) Error:(199) *** Android NDK: Aborting... . Stop.
2)Error:Execution failed for task ':app:compileDebugNdk'. >com.android.ide.common.process.ProcessException:org.gradle.process.internal.ExecException: Process 'command 'C:\Users\vishal\android-ndk-r10d\ndk-build.cmd'' finished with non-zero exit value 2
解決方法

LogCat除錯 Debug

1,長什麼樣子?


2761781-db94b0eb71a8cfe0.png
LogCat

2761781-0bdaf9a8e952b814.png
篩選輸出型別

2,一般常見的輸出資訊

2761781-5537eb953f69b4a9.png
常見輸出

紅色的表示錯誤資訊,以及錯誤的原因

2761781-a3ea95f4ff800843.png
錯誤資訊

OptionsMenu選擇選單(點選系統選單按鈕彈出)

一個Activity只能有一個選單

  • 建立需要重寫onCreateOptionsMenu()
    • 可用程式碼動態設定,呼叫menuadd()方法
    • xml固定設定,使用MenuInflater.infalte()方法引用
  • 監聽選單項的點選,重寫onOptionsItemSelected()方法

上下文選單 (一般是長按某個東西彈出的選單)

一個View可以擁有一個選單,常見於資料夾長按後彈出操作選單

  • 建立需要先使用 registerForContextMenu() 註冊上下文選單 重寫onCreateContextMenu()
    • 可用程式碼動態設定,呼叫menuadd()方法
    • xml固定設定,使用MenuInflater.infalte()方法引用
  • 監聽選單項的點選,重寫onContextItemSelected()方法

還有很多需要學習,加油!

相關文章