1. 程式人生 > >Android學習心得第一課

Android學習心得第一課

說來慚愧,做事情從來都是半途而廢,考研也是,哎,一直說要學習點什麼,結果從研一上半學期一直到現在才真正開始第一次實踐,不過知恥後勇,希望能過在未來的日子裡面能夠一直堅持下去,去真正的做成功一件事情。
第一部分 3種監聽方式
在Android裡面一個按鈕被點選後應該會觸發相應的動作,這個時候就需要一個監聽器來告訴程式,當按鈕被點選後應該產生一個怎樣的動作。這裡總共有三種監聽的方式:採用匿名內部類的監聽方式,獨立外部類的監聽方式,採用介面的方式進行監聽,下面分別對這三種方式舉一個例子進行介紹。
(1)匿名內部類的監聽方式

 public class MainActivity
extends Activity {
private Button loginbutton; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 實現監聽的第一種方式 匿名內部類的方式 // 初始化當前的監聽控制元件 // 這裡findviewById這個函式預設的返回型別是view型別,所以必須強制轉換成button型別
loginbutton = (Button) findViewById(R.id.button1); // 實現監聽的動作 這裡採用的就是匿名內部類的方式 loginbutton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub System.out.println("你的button按鈕被點選了"
); } }); } }

這種方式在整個Android的button事件中使用的最為頻繁,因為在大部分情況下,事件處理器都沒有什麼價值,而有價值的程式碼也早已被抽象成了業務邏輯的方法,所以大部分的事件處理器都是一次性的,這個時候採用匿名內部類就比較方便,在實際的程式設計我們一般比較推崇這種方法,這種方法的缺點就是匿名內部類的語法較為複雜,不太容易掌握。
(2)外部獨立類的監聽方式

public class MainActivity extends Activity {

    private Button bt2;
    private Button bt3;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       /*
          這裡對按鈕2和按鈕3進行外部類監聽的方式進行實現,這種方法主要是用於處理多個按鈕要實現
          同一個動作的時候,為了避免程式碼的冗餘,而將程式碼集中於外面類中,通過對外部類的操作,來達到
          修改和功能的實現。
       */
       bt2 = (Button) findViewById(R.id.button2);
       bt3 = (Button) findViewById(R.id.button3);
       bt2.setOnClickListener(new MyOnClickListener(){

            public void onClick(View v) {
                // TODO Auto-generated method stub
                super.onClick(v);
                Toast.makeText(MainActivity.this,"bt2要執行的邏輯", 1).show();
            }
       });

       bt3.setOnClickListener(new MyOnClickListener(){

            public void onClick(View v) {
                // TODO Auto-generated method stub
                super.onClick(v);
                Toast.makeText(MainActivity.this,"bt3要執行的邏輯", 1).show();
            }
       });

    }

}

// 獨立類(即第二種)外部監聽的方式
class MyOnClickListener implements OnClickListener{

    @Override
    public void onClick(View v) {   
//      為所有的類設定同一個監聽事件,這裡是設定button的透明度 
        v.setAlpha(0.5f);
    }

}

在這裡對外部類做一個說明,在實際的開發過程中,外部類一般是用作當有多個button需要完成同一個動作的時候,這個將這個操作全部寫入這個外部類中,然後所有的button呼叫這個介面從而完成相應的動作,這樣做的好處是以後在後期進行修改的時候只需要對這個外部類進行修改即可,並且遇到這種情況,比起第一種方法,可以減少程式碼的冗餘。
但是這種方法在實際的程式設計習慣中運用的並不多,將事件監聽器定義成外部類,不容易提高程式的內聚性,因為事件監聽器屬於一種特定的gui介面, 而且外部定義的監聽類無法自由的訪問內部的類的元件,這就會造成程式設計上的不簡潔。
(3)採用介面的方式進行監聽

public class MainActivity extends Activity implements OnClickListener{

    private ImageButton imgbt;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       imgbt = (ImageButton) findViewById(R.id.imageButton1);
       imgbt.setOnClickListener(this);
    }

    /*這裡我們第三種的監聽方式
     * 就是通過介面的方式來實現監聽
     */
    public void onClick(View v) {
        Log.i("tag", "通過介面的方式實現監聽");
    }

}

這種方法是將activity本身定義為監聽事件,這樣的話可以在activity內部編寫監聽事件的操作,書寫形式上十分簡潔,但是這種方法筆者並不是十分贊成使用,首先這種寫法本身就比較奇怪,activity本身是用來寫使用者介面的初始化,在這裡面加入監聽類,會讓整個程式的邏輯顯得十分混亂。
當然在網上百度了一些大神的部落格,他們還給出了另外兩種監聽事件的寫法,一種是內部類作為監聽器,即將監聽類寫成當前類的內部類,還有一種就是直接繫結到標籤裡面,現在很多的標籤本身就已經具有了onclick等屬性,這個時候只需要在activity中定義一個方法就可以了。(筆者還沒試過這兩種方法,不過我對後一種方法比較感興趣,後面可以寫著試試看)。

第二部分 跑馬燈效果的實現
這部分沒有什麼特別的東西,僅僅是三個屬性就可以實現的了,他主要是為了應對當介面上的文字過長,而且不允許換行的時候,這時候就需要使用跑馬燈的效果來使文字迴圈播放,閒話不多說,上下程式碼。

 <com.ccnu.marqueetextviewdemo.marqueetext
        android:id="@+id/one"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:singleLine="true"
        android:ellipsize="marquee"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:text="@string/hello_world" />

這段xml程式碼的關鍵屬性就是ellipsize、focusable、foucusableInouchMode這三個屬性。

第三部分 實現動態輸入自動匹配的內容
我們在進行百度搜索的時候,往往只需要輸入幾個字,就會出現很多相關的選項,下面我們就對這個屬性進行研究。要實現這個功能僅僅需要兩個控制元件即可,AutoCompleteTextView和MultiAutoCompleteTextView這兩種控制元件在功能基本相似,不同之處在於,後者是用於多次輸入的時候,而且和前者相比較的話,後者還要多一個分割符的屬性,用於分割開多次輸入。

public class MainActivity extends Activity {
    private AutoCompleteTextView acTextView;
    private MultiAutoCompleteTextView macTextView;
    private String[] res = {"android1","android2","android3",
                            "python1","python2","python3"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        /*
         * 第一步:初始化一個控制元件
         * 第二步:需要一個介面卡 
         * 第三步:初始化一個數據源---這個資料來源是用來匹配搜尋文字框的輸入的內容
         * 第四步:將adapter與當前的autoTextView相互繫結
         */
        acTextView = (AutoCompleteTextView) findViewById
                              (R.id.autoCompleteTextView1);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>
                    (this, android.R.layout.simple_list_item_1, res);
        acTextView.setAdapter(adapter);

        /*
         * 第一步:初始化一個控制元件
         * 第二步:需要一個介面卡 
         * 第三步:初始化一個數據源---這個資料來源是用來匹配搜尋文字框的輸入的內容
         * 第四步:將adapter與當前的autoTextView相互繫結
         * 第五步:設定分割符(這裡預設的分割符是逗號)
         */
        macTextView = (MultiAutoCompleteTextView) findViewById
                (R.id.multiAutoCompleteTextView1);
        macTextView.setAdapter(adapter);
        macTextView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
    }
}

相關推薦

Android學習心得第一

說來慚愧,做事情從來都是半途而廢,考研也是,哎,一直說要學習點什麼,結果從研一上半學期一直到現在才真正開始第一次實踐,不過知恥後勇,希望能過在未來的日子裡面能夠一直堅持下去,去真正的做成功一件事情。 第一部分 3種監聽方式 在Andr

Android學習心得第二

用了接近一個星期的時間終於將慕課上的Android第一季給看完了,在這裡不得不給那位amos老師打一個廣告,講的真的很贊。下面直接總結我這周學習的幾個點吧。 第一部分 ToggleButton ToggleButton是一個多狀

Android學習心得第五

今天算是遇到了Android學習上面的一塊硬骨頭了,目前算是基本理解了,後面還是要時不時的來回顧一下,溫故而知新,下面就來回顧一下我今天學習的知識, 今天的知識點就一個那就是關於BaseAdapter, 上一節心得,我專門對資料介面卡進行了一個解釋,今天在慕

Android學習心得(13) --- Android代碼混淆(1)

簽名 ref nes 三分 pen key this tool prop 我在博客上發表一些我的Android學習心得,希望對大家能有幫助。 這一篇我們講述一下最新的ADT環境下怎樣進行Android混淆 在新版本號的ADT創建項目時。混碼的文

學習python第一 變量

Python 變量Author:uljfangE-mail:[email protected]

吳恩達實驗(神經網絡和深度學習第一第三周,代碼和數據集,親測可運行

HR tps size nac www cond -c 自己 c-c 代碼和數據集已上傳到文件中 應該可以直接下載吧(第一次上傳文件,感覺是),解壓後把文件夾拷貝到jupyter工作空間即可 註:我對下載的代碼的格式稍作了修改,原來定義函數與調用函數在兩個單元格裏,我直

React Native (android for windows) 第一 --環境配置 & Hello World

本篇文章的作用在於幫助你快速上手使用React Native編寫android應用。如果你還不太瞭解React Native是什麼以及Facebook為什麼要建立React Native, 安裝Android SDK JDK安裝最新的 安裝Android SDK: 在Linux

python3.5學習第一:環境的安裝

size 第一課 img -o oss bashrc inux image 管理器 1.linux系統下環境安裝(centos7,騰訊雲)由於系統自帶的python版本是2.6.6,為了方便要安裝pyenv(python的多版本管理器)(1)yum -y install g

Android學習心得(一):

1、活動類處理啟動與關閉活動的相關方法及說明 方法 說明 StartActivity(intent) 使用引數意圖啟動新活動,此方法是重寫Context類實現的原始版本 startA

Android學習心得(二)

Android儲存方式 儲存偏好設定 持久化資料:使應用程式執行時需要長期儲存一些資料。 SharePreferences物件、檔案和 SQLite資料庫來儲存這些持久化資料 存取活動的偏好設定 SharePreferences類屬於Android.cntent

鬱金香驅動程式設計學習>第一:第一個驅動程式

<pre name="code" class="cpp">//鬱金香驅動保護學習 //qq 2779535853,有共同興趣愛好的同學,歡迎大家加我qq一起交流學習。 //時間 2015年7月20日 13:05:02 //編譯步驟 //1.開啟 windows 2000 Checked

Android學習第一章 · 安卓專案目錄結構

src: java原始碼所在目錄 gen:自動生成的資源id(不能修改) Android.jar:匯入安卓jar包才能使用安卓的api Android dependencies:映象,類似於快捷方式,原始檔在libs下 libs:支援包,使低版本支援高版本新特

Angular -- 學習心得第一篇之環境配置

AngularJs(簡稱ng)是一個用於設計動態web應用的結構框架。首先,它是一個框架,不是類庫,是像EXT一樣提供一整套方案用於設計web應用。它不僅僅是一個Javascript框架,因為它的核心其實是對HTML標籤的增強。何為HTML標籤增強?其實就是使你

《演算法導論》學習心得第一章——演算法在計算中的作用

閱讀本文大約需要 2 分鐘。 Hello~好久不見~上個學期的課程量比較大,將很多的計劃都擱置了,所以一直沒有更新公眾號,趁著相對輕鬆的寒假,我準備繼續之前的計劃,學習《演算法導論》,並且將學習的心得體會發在微信公眾號和CSDN部落格。 今天不討論理論的內容

吳恩達深度學習課程第一第二週課程作業

學過吳恩達的Machine Learning課程,現在跟著學深度學習,本來是想付費的,奈何搞半天付款沒有成功,沒辦法只能下載資料集自己搞了。由於門外漢,安裝工具軟體加上完成作業花了一天時間,其實第二週的作業和機器學習課程基本是一樣的,沒有什麼太大難度,都是初級入

python學習筆記第一_Phoenix-晶

Python 概念: 是一種面向物件、直譯式計算機程式語言,具有近二十年的發展歷史,成熟且穩定。它包含了一組完善而且容易理解的標準庫,能夠輕鬆完成很多常見的任務。它的語法簡捷和清晰,儘量使用無異義的英語單詞,與其它大多數程式設計語言使用大括號不一樣,它使用縮排來定義語句塊。

機器學習心得第一

最近在看《白話深度學習與TensorFlow》這本書,書中內容全面豐富、深奧玄妙,但是作者卻以簡單易懂的方式將專業知識呈現在書裡,可謂深入淺出。話不多說,我要開始記錄我的學習體會了,希望自己能夠堅持下來,有所收穫。(手動微笑) 機器學習是什麼 最近幾年人工智慧火爆,網際網

sql 學習心得 第一

distinct  --去重複 建立連線伺服器 exec sp_addlinkedserver   '連線伺服器名稱', '', 'SQLOLEDB', '遠端伺服器名或ip地址'  exec sp_addlinkedsrvlogin  '連線伺服器名稱', 'false

python學習第一

環境python3.6 1.變數定義 2.輸入輸出 格式化輸出%s:代表字串 %d:整型 %f:代表浮點型 3.基本運算子 算數運算子:+ - * / ** % // 分別為加、減、乘、除、次方、取餘、整除 " / "  表示浮點數除法,返回浮

學習Redis第一(Nosql入門和概述)

        現在Redis越來越火,為了適應技術的發展,開始學習一下Redis,在學習Redis之前先學習一下Nosql。 第一部分:入門概述         1.1 網際網路時代背景下大機遇,為什麼用nosql             1.1.1 單機Mysql的美好