項(xiàng)目結(jié)構(gòu)介紹
- src:存放所有java源代碼
- gen:系統(tǒng)自動(dòng)生成的配置文件
- Android x.x.x:包括構(gòu)建程序所需的x.x.x版本的安卓SDK、APIs
- assets:存放資源圖片苏研,未使用時(shí)不會(huì)生成id且不會(huì)加入到apk包里面占大小
- res:所有用到的資源徘郭,如圖片蛮寂、布局等
- drawable-xxx:不同分辨率的圖片資源
- layout:布局文件
- values:字符串、主題、顏色之宿、樣式等資源文件(values-v11/14 是現(xiàn)在版本出現(xiàn)的 v-11是3.0版本14是4.0版本)
- AndroManifest.xml:清單文件已烤,配置應(yīng)用的相關(guān)的主要信息(包名鸠窗、權(quán)限、程序組件等)
控件概述
-
<b>TexView:</b>只能做顯示框
- 控件屬性(id-id胯究,layout_width-寬度稍计,高度,text-內(nèi)容裕循,textSize-字體大谐枷(單位:一般是sp)净刮,textColor-顏色,background-背景)
- 控件寬度:warp_content-和文本寬度一樣,match_parent-鋪滿(mǎn)父容器(在2.3的api之后添加的屬性),fill_parent-填充父容器(在2.3之前的屬性)
-
跑馬燈效果:當(dāng)頁(yè)面中只有一個(gè)textView時(shí)铣猩,
單個(gè)TextView
多個(gè)時(shí),需要自定義一個(gè)繼承于textView類(lèi)暑认,在里面定義一個(gè)isFocused()方法且返回true,然后再xml里面使用自定義控件(包名.類(lèi)名)
多個(gè)TextView
-
<b>EditText</b>:輸入框
- 控件屬性(比顯示框多出了 hint-提示文本大审,inputType-文本類(lèi)型 這2個(gè)屬性)
- 修改樣式
-
<b>AutoCompleteTextView</b> 動(dòng)態(tài)匹配輸入的內(nèi)容(輸入東西蘸际,出現(xiàn)相應(yīng)的列表以供選擇)
- 控件屬性(completionThreshold:設(shè)置輸入多少個(gè)字符開(kāi)始匹配)
-
1.在activity里面找到對(duì)應(yīng)控件,2.創(chuàng)建一個(gè)適配器饥努,3.初始化數(shù)據(jù)源捡鱼,4.用setAdapter將適配器和控件關(guān)聯(lián)起來(lái)
代碼綁定控件
-
<b>MultiAutoCompleteTextView</b> 相較于autocom...可以多設(shè)置一個(gè)分隔符的屬性
效果圖展示
初始化
- <b>ImageView</b>:顯示圖片
- 控件屬性(src-圖片,background -背景圖片酷愧、顏色)
- <b>Button驾诈、ImageButton</b>
- 獲取xml中的按鈕:btn = (Button) findViewById(R.id.button的id);
- 控件屬性: ImageButton無(wú)text屬性,Button無(wú)src屬性
- 按鈕onClick事件來(lái)監(jiān)聽(tīng)按鈕點(diǎn)擊(所有控件都有這個(gè)事件)溶浴,
-
監(jiān)聽(tīng)事件實(shí)現(xiàn)的幾種寫(xiě)法:1.匿名內(nèi)部類(lèi) setOnClickListener(new OnClickLen...這里將會(huì)是一個(gè)bolck回調(diào))乍迄,2.獨(dú)立類(lèi)(相當(dāng)于弄一個(gè)父類(lèi)出來(lái)
獨(dú)立類(lèi)
-
,3.實(shí)現(xiàn)接口的方式 需要在類(lèi)實(shí)現(xiàn)OnClickListener接口(使用implements關(guān)鍵詞調(diào)用)士败,會(huì)在當(dāng)前類(lèi)實(shí)現(xiàn)onClick方法(會(huì)自動(dòng)生成)btn.setOnClickListener(this)調(diào)用
-
<b>ToggleButton</b> 開(kāi)關(guān)按鈕-相當(dāng)于switch控件闯两,默認(rèn)是關(guān)閉的
- 控件屬性: checked-是否為開(kāi),textOff-關(guān)閉顯示什么谅将,textOn-打開(kāi)顯示什么
-
使用:給按鈕設(shè)置監(jiān)聽(tīng)器漾狼,需要類(lèi)實(shí)現(xiàn)CheckedChangeListener接口
設(shè)置點(diǎn)擊回調(diào)
-
<b>CheckBox</b> 復(fù)選框
-
控件屬性:
屬性 -
使用:
使用方法
-
-
<b>RadioGroup和RadioButton</b> 單選列表
-
屬性:
單選列表屬性
-
String的使用
在string文件里面寫(xiě)入 <string name="xxx(用英文)">調(diào)用后獲取的字符串</string>
implements關(guān)鍵字代表讓一個(gè)類(lèi)擁有另一個(gè)類(lèi)的屬性
六大布局(布局中可以包含其他布局,可相互套用)
線性布局(LinerLayout)
是線性布局控件饥臂,決定它包含的子控件是水平-Hor 還是垂直-Ver 排布方式逊躁。
layout_weight這個(gè)屬性賦值 代表所有控件的屬性都加起來(lái)后占得比例。例如:控件a的該屬性=1隅熙,控件b的該屬性=2稽煤,那么到時(shí)候a的比例就是1/3.
相對(duì)布局(RelativeLayout)
控件的位置設(shè)置是相對(duì)的,它包含的子空間將以控件之間相對(duì)位置或子類(lèi)控件相對(duì)于父類(lèi)容器的位置的方式排列囚戚。
常用屬性:
相對(duì)父類(lèi)容器的屬性
相對(duì)于子類(lèi)控件的屬性
約束布局(ConstraintLayout)
ConstraintLayout是Android Studio 2.2中主要的新增功能之一酵熙,也是Google在去年的I/O大會(huì)上重點(diǎn)宣傳的一個(gè)功能。非常適合使用可視化的方式來(lái)編寫(xiě)界面驰坊,但并不太適合使用XML的方式來(lái)進(jìn)行編寫(xiě)匾二。當(dāng)然,可視化操作的背后仍然還是使用的XML代碼來(lái)實(shí)現(xiàn)的,只不過(guò)這些代碼是由Android Studio根據(jù)我們的操作自動(dòng)生成的察藐。還可以有效地解決布局嵌套過(guò)多的問(wèn)題
-
添加約束-拖動(dòng)右邊視圖中的點(diǎn)來(lái)確定約束對(duì)應(yīng)哪個(gè)借嗽,可以是底部視圖,也可以是其他控件
-
控件對(duì)根視圖添加約束
添加約束 -
控件之間的約束添加
控件之間添加約束
-
-
刪除約束
-
單個(gè)約束刪除
刪除單個(gè)約束 -
單個(gè)控件所有約束刪除
刪除所有約束 -
當(dāng)前頁(yè)面所有約束刪除
直接選中頂部的這個(gè)按鈕就OK
刪除當(dāng)前頁(yè)面所有約束
-
幀布局(FrameLayout)
所有的元素都不能被指定放置的位置转培,它們都在父視圖的左上角,并且后面的子元素在前面子元素之上浆竭。 可以用來(lái)做加載進(jìn)度條和文字浸须。
當(dāng)你想設(shè)置前景圖時(shí),可以使用foreground將當(dāng)前控件放在最前面來(lái)邦泄。
絕對(duì)布局(AbsoluteLayout)
坐標(biāo)布局删窒,直接指定子元素的絕對(duì)位置。
不常用顺囊。了解下就OK
表格布局(TableLayout)
相當(dāng)于tableview 每一行為一個(gè)TableRow對(duì)象肌索,繼承自View。
自身的屬性
<b>當(dāng)想要所有控件都調(diào)用的話特碳,直接用 = "*";</b>
下面這2個(gè)屬性是使用在TableRow內(nèi)部控件的屬性中的
Activity(相當(dāng)于OC的VC)
什么是Activity诚亚? 視圖控制器
創(chuàng)建到銷(xiāo)毀的生命周期:
onCreate()----創(chuàng)建
onStart()-----運(yùn)行
onResume()----獲取焦點(diǎn)
onPause()-----失去焦點(diǎn)
onStop()------暫停
onDestory()---銷(xiāo)毀
onRestart()---重新運(yùn)行
st=>start: onCreate
e=>end: onDestory
op1=>operation: onStart
op2=>operation: onResume
op3=>operation: onPause
op4=>operation: onStop
op5=>operation: onRestart
cond=>condition: 不重新啟動(dòng)?
st->op1->op2->op3->op4->cond
cond(yes)->e
cond(no)->op1
從啟動(dòng)到后臺(tái)午乓,再到前臺(tái)的生命周期:
從啟動(dòng)到失去焦點(diǎn)站宗,再到獲取到焦點(diǎn)的生命周期:
Intent-意圖
它可以啟動(dòng)一個(gè)activity、Service益愈、Broadcasts(廣播)
- 屬性:Action-動(dòng)作(常用),Data-數(shù)據(jù)(常用),Category-分類(lèi),Type-類(lèi)型,Compent-組件,Extra-擴(kuò)展信梢灭。
-
Action-是一個(gè)字符串常量,系統(tǒng)自己定義了一些常量蒸其,例如:ACTION_CALL-啟動(dòng)電話敏释、ACTION_BATTERY_LOW-發(fā)送一個(gè)電池過(guò)低的警告等等。
- 常見(jiàn)的Action
- ACTION_CALL activity 啟動(dòng)一個(gè)電話.
- ACTION_EDIT activity 顯示用戶(hù)編輯的數(shù)據(jù).
- ACTION_MAIN activity 作為T(mén)ask中第一個(gè)Activity啟動(dòng)
- ACTION_SYNC activity 同步手機(jī)與數(shù)據(jù)服務(wù)器上的數(shù)據(jù).
- ACTION_BATTERY_LOW broadcast receiver 電池電量過(guò)低警告.
- ACTION_HEADSET_PLUG broadcast receiver 插拔耳機(jī)警告
- ACTION_SCREEN_ON broadcast receiver 屏幕變亮警告.
- ACTION_TIMEZONE_CHANGED broadcast receiver 改變時(shí)區(qū)警告.
- Data-
組件名稱(chēng) | 方法名稱(chēng) |
---|---|
Activity-視圖 | startActivity(intent) , startActivityForResult(intent,requestCode) |
Servic-服務(wù) | startService(Intent service) , bindService(Intent service, ServiceConnection conn,int flags) |
Broadcasts-廣播 | sendBroadcast()-該方法有很多的方式調(diào)用,sendOrderedBroadcasts-有2個(gè)函數(shù)摸袁,根據(jù)情況使用 |
其中廣播的Intent參數(shù)的 RequiresPermission 修飾符表示需要許可钥顽,即要權(quán)限。
拿到別人的項(xiàng)目需要配置的地方(協(xié)同開(kāi)發(fā))
Android Studio正確打開(kāi)項(xiàng)目只需要兩步但惶,或者說(shuō)找到兩個(gè)文件進(jìn)行簡(jiǎn)單的修改就好耳鸯,最好在打開(kāi)之前進(jìn)行修改
- gradle-wrapper.properities
查找路徑:/gradle/wrapper/ gradle-wrapper.properities
,打開(kāi)后可以看到最后一行是一個(gè)地址鏈接膀曾,重點(diǎn)是鏈接的最后部分gradle-2.10-all.zip县爬,AS不同版本對(duì)應(yīng)的GradleWrapper版本號(hào)也不一樣,想知道自己當(dāng)前的是多少添谊,可以在As命令行如gradlew -v
查看财喳,也可以新建一個(gè)項(xiàng)目到該路徑下查看,修改完成后保存。
image.png
- build.gradle
第二個(gè)需要修改的文件更好找耳高,就是我們常用的Project下的build.gradle扎瓶,打開(kāi)后找到如圖所示位置,把classpath的gradle版本號(hào)
也改成當(dāng)前對(duì)應(yīng)的就行泌枪,至于當(dāng)前的版本號(hào)是多少概荷,隨便打開(kāi)一個(gè)自己在本地創(chuàng)建的project就能知道了
錯(cuò)誤
遇見(jiàn)這種錯(cuò)誤: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調(diào)試 Debug
1,長(zhǎng)什么樣子碌燕?
2误证,一般常見(jiàn)的輸出信息
紅色的表示錯(cuò)誤信息,以及錯(cuò)誤的原因
OptionsMenu選擇菜單(點(diǎn)擊系統(tǒng)菜單按鈕彈出)
一個(gè)Activity只能有一個(gè)菜單
- 創(chuàng)建需要重寫(xiě)onCreateOptionsMenu()
- 可用代碼動(dòng)態(tài)設(shè)置修壕,調(diào)用menuadd()方法
- xml固定設(shè)置愈捅,使用MenuInflater.infalte()方法引用
- 監(jiān)聽(tīng)菜單項(xiàng)的點(diǎn)擊,重寫(xiě)onOptionsItemSelected()方法
上下文菜單 (一般是長(zhǎng)按某個(gè)東西彈出的菜單)
一個(gè)View可以擁有一個(gè)菜單慈鸠,常見(jiàn)于文件夾長(zhǎng)按后彈出操作菜單
- 創(chuàng)建需要先使用 registerForContextMenu() 注冊(cè)上下文菜單 重寫(xiě)onCreateContextMenu()
- 可用代碼動(dòng)態(tài)設(shè)置蓝谨,調(diào)用menuadd()方法
- xml固定設(shè)置,使用MenuInflater.infalte()方法引用
- 監(jiān)聽(tīng)菜單項(xiàng)的點(diǎn)擊青团,重寫(xiě)onContextItemSelected()方法
還有很多需要學(xué)習(xí)譬巫,加油!