0.前言
- 上一篇文章中矿瘦,我們講解了Android的幾種布局方式
有興趣的可以去看一看準(zhǔn)備工作
在讀本文前掐暮,你最好有以下準(zhǔn)備:
- (1)安裝Android Stuido(以下簡(jiǎn)稱AS)
- (2)有一定的Java基礎(chǔ)
- (3)有一臺(tái)安卓機(jī)
(可以用模擬器來(lái)代替蝎抽,包括AS自帶的以及網(wǎng)上的一些著名模擬器)- 若想要了解有關(guān)Java的文章等其他主要知識(shí),可以去看前面的文章
(不會(huì)使用AS的讀者可以參考下面這篇文章中的例子)
《[Java]開(kāi)發(fā)安卓劫乱,你得掌握的Java知識(shí)2》
1.本文內(nèi)容簡(jiǎn)介
觸摸事件處理
使用Tag查找子控件
通過(guò)sharedPreference來(lái)存儲(chǔ)簡(jiǎn)單數(shù)據(jù)
2.基礎(chǔ)知識(shí)講解
觸摸事件處理
- 觸摸事件處理有兩種方法:
(1)回調(diào)機(jī)制
(2)監(jiān)聽(tīng)機(jī)制方法1 監(jiān)聽(tīng)機(jī)制
這種方法會(huì)設(shè)置一個(gè)監(jiān)聽(tīng)器(listener)织中,用來(lái)記錄監(jiān)聽(tīng)者。
監(jiān)聽(tīng)者必須實(shí)現(xiàn)對(duì)應(yīng)的接口衷戈,因此監(jiān)聽(tīng)者要重寫(xiě)觸發(fā)事件時(shí)運(yùn)行的方法狭吼。
當(dāng)事件觸發(fā)的時(shí)候,會(huì)看到底是誰(shuí)在監(jiān)聽(tīng)(找監(jiān)聽(tīng)者)殖妇。然后通過(guò)調(diào)用監(jiān)聽(tīng)者重寫(xiě)的方法刁笙,完成觸發(fā)事件方法2 回調(diào)機(jī)制
這種方法中,可以看作監(jiān)聽(tīng)器不存在,事件監(jiān)聽(tīng)器與事件源統(tǒng)一疲吸。即用戶在組件上觸發(fā)某個(gè)事件時(shí)座每,組件會(huì)調(diào)用自己的方法以處理該事件。
- 如果不太懂接口與回調(diào)的讀者可以閱讀這篇文章:
《[Java]開(kāi)發(fā)安卓摘悴,你得掌握的Java知識(shí)7》具體代碼和語(yǔ)法在第3部分
通過(guò)tag來(lái)獲得子控件
在xml文件中添加的控件峭梳,我們需要為其添加id,這樣才能在java文件中用id獲取指定的控件
而在java文件中添加的控件蹂喻,則可以為其添加tag葱椭,以此在其他地方找到對(duì)應(yīng)的控件
添加語(yǔ)句:
int tag = 1;
ImageView iv = new ImageView(this)
lineView.setTag(tag)
android有四個(gè)組件,分別為activity口四、broadcast孵运、contentprivider、service蔓彩。在當(dāng)前的activity中用的是mainactivity.this
通過(guò)tag獲取控件:
ImageView iv2
iv2.getTag(tag)
這里的tag就是上面設(shè)置的那個(gè)治笨,注意set/getTag的參數(shù)都是int
通過(guò)sharedPreference來(lái)存儲(chǔ)簡(jiǎn)單數(shù)據(jù)
java一共有四種方式存儲(chǔ)數(shù)據(jù):
(1)sharedPreference(偏好設(shè)置)(保存少量基本數(shù)據(jù))
(2)file
(3)sqlite3(保存數(shù)據(jù)量比較大的數(shù)據(jù),保存到服務(wù)器端的數(shù)據(jù)庫(kù)中)
(4)network(只有這種不是保存在本地)sharedPreference會(huì)保存在設(shè)備中的一個(gè)xml文件中
由于是在xml中保存的赤嚼,所以不是適合存儲(chǔ)大量數(shù)據(jù)旷赖,一些設(shè)置選項(xiàng)可以考慮保存在這里
sharedPreference的使用分為讀和寫(xiě)兩部分,分別對(duì)應(yīng)兩個(gè)對(duì)象
最后一定要使用.commit()或者.apply()來(lái)保存更卒,它們的區(qū)別:
editor.commit();//立刻保存
editor.apply();//異步保存杠愧,讓一個(gè)線程處理保存,不是馬上在Device File Exploer->data->data->項(xiàng)目名->shared_prfes->文件名.xml
具體代碼逞壁,以及數(shù)據(jù)保存在哪里,在下文說(shuō)
3.實(shí)際操作
觸摸事件——監(jiān)聽(tīng)機(jī)制
第一步 打開(kāi)activity_main.xml
第二步 把布局改一下(為了方便寫(xiě)代碼)
第三步 添加一個(gè)控件
<ImageView
android:id="@+id/box"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@color/colorPrimary"
android:layout_centerInParent="true"/>
第四步 打開(kāi)MainActivity锐锣,并找到這個(gè)控件
- 在onCreate中腌闯,用id找到這個(gè)控件
ImageView iv = findViewById(R.id.box);
這里的R.id.box表示res中的id名為box的控件
( android:id="@+id/box")這句話添加了id第五步 給這個(gè)控件添加監(jiān)聽(tīng)器
直接在控件后面輸入一個(gè)點(diǎn).,然后輸入setOnTouch雕憔。姿骏。〗锉耍看到可以選擇之后直接回車(chē)
接著在括號(hào)內(nèi)分瘦,先看它需要什么參數(shù)(按ctrl+p),然后先輸入一個(gè)new琉苇,然后照著需要的參數(shù)的類(lèi)型輸入嘲玫,就可以看到
回車(chē)之后就變?yōu)椋?/p>
最后在方法里面書(shū)寫(xiě)觸發(fā)事件時(shí),需要執(zhí)行的內(nèi)容
(這里要按照?qǐng)D里一樣并扇,把return 的值改為true)以上即為比較常用的去团,通過(guò)匿名類(lèi)來(lái)處理監(jiān)聽(tīng)機(jī)制
其他相關(guān)的監(jiān)聽(tīng)方法:
(1)在括號(hào)內(nèi)不寫(xiě)new什么的,而寫(xiě)一個(gè)this,表示當(dāng)前的這個(gè)界面
然后在this(低下會(huì)畫(huà)紅線)旁邊按alt+enter土陪,選擇有implement那個(gè)昼汗,表示這個(gè)MainActivity實(shí)現(xiàn)這個(gè)接口
選擇要實(shí)現(xiàn)的方法之后,在這個(gè)方法寫(xiě)具體內(nèi)容即可
(2)可以單獨(dú)創(chuàng)建一個(gè)實(shí)現(xiàn)該接口的類(lèi)鬼雀,然后創(chuàng)建一個(gè)這個(gè)類(lèi)的對(duì)象顷窒,放在括號(hào)中,而不是使用匿名類(lèi)
- 使用匿名類(lèi)一般是只需要處理這一個(gè)事件源哩。如果有多個(gè)時(shí)間鞋吉,可以考慮創(chuàng)建一個(gè)類(lèi),或者是使用方法(1)
觸摸事件——回調(diào)機(jī)制
第一步 找到要觸發(fā)這個(gè)事件的類(lèi)(如果是整個(gè)屏幕璧疗,就找MainActivity)
第二步在里面寫(xiě)onTouchEvent(MotionEvent event)這個(gè)方法
當(dāng)觸摸事件被觸發(fā)的時(shí)候坯辩,系統(tǒng)就會(huì)回調(diào)這個(gè)被重寫(xiě)的方法
如果是寫(xiě)在MainActivity中的話,這個(gè)方法要寫(xiě)在onCreate外面
- return要改為true
這里可以使用event.getAction這個(gè)方法崩侠,它返回的是一個(gè)int漆魔,不同的int代表著不同的時(shí)間,而Motion.事件名則分別對(duì)應(yīng)這事件(Motion.事件名是已經(jīng)被定義好的int)
表示如果有按下的事件
通過(guò)sharedPreference來(lái)存儲(chǔ)簡(jiǎn)單數(shù)據(jù)
語(yǔ)法順序如下:
SharedPreferences sp = getSharedPreferences(fileName,MODE_PRIVATE);
其中却音,fileName為文件名改抡,MODE_PRIVATE代表該文件是私有數(shù)據(jù)然后,通過(guò)以下語(yǔ)句系瓢,存儲(chǔ)密碼
SharedPreferences.Editor editor = sp.edit();
editor.putString("password",inputPassword);
editor.commit();
- 其中阿纤,inputPassword是需要存儲(chǔ)的值,"password"是這個(gè)值的“鍵”(一個(gè)名字)夷陋,就是通過(guò)這個(gè)名字欠拾,可以找到inputPassword
- 必須有editor.commit()進(jìn)行保存(第二部分有說(shuō)過(guò)兩種保存的方式)
String orgPassword = sp.getString("password",null);
用這句話來(lái)獲得SharedPreference所存的xml文件中對(duì)應(yīng)值的內(nèi)容
- null表示如果沒(méi)有名字叫password的,那么返回一個(gè)null
3.總結(jié)
(1)觸發(fā)事件的方法需要熟練清楚骗绕,在后面的內(nèi)容中經(jīng)常需要使用到這些
(2)如果需要給某些控件代號(hào)的話藐窄,可以用setTag,然后到時(shí)候用getTag就能分辨到底是哪個(gè)控件
(3)SharedPreference只能存儲(chǔ)少量數(shù)據(jù)