在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Android/ 第三章-交互之王Button控件
第十八章-ViewPager+FragmentStatePagerAdapter實(shí)現(xiàn)仿微信Tab
第十五章-GridView實(shí)現(xiàn)動(dòng)態(tài)添加和刪除子項(xiàng)
第九章-進(jìn)度條ProgressBar
第十二章-經(jīng)典的ListView
第十四章-GridView控件
第八章-時(shí)間相關(guān)控件
第七章-下拉框Spinner控件
第二章-EditText探秘
第二十章-Android菜單之上下文菜單
第十一章-各種對(duì)話框Dialog集錦
第二十一章-Android菜單之子菜單
第六章-切換類TextSwitcher和ImageSwitcher
第十七章-ViewPager切換界面
第五章-開(kāi)關(guān)按鈕ToggleButton和Switch
第二十二章-PopupWindow浮動(dòng)窗
第十六章-幻燈片ViewFlipper
第二十四章-RecyclerView動(dòng)態(tài)添加、刪除及點(diǎn)擊事件
第三章-交互之王Button控件
第二十三章-全新控件RecyclerView
第一章-好玩的TextView
第十三章-ListView擴(kuò)展(多選、全選、反選)
第四章-玩轉(zhuǎn)單選和多選按鈕
第十章-可以拖動(dòng)的ProgressBar-SeekBar
第十九章-Android菜單之選項(xiàng)菜單

第三章-交互之王Button控件

Button按鈕是Android應(yīng)用中最常用到的控件,說(shuō)它為交互之王一點(diǎn)都不過(guò)分,每個(gè)應(yīng)用中都包含了多個(gè)Button響應(yīng)和解決用戶各種點(diǎn)擊交互事件,下面我們看一下API文檔中怎么定義Button控件的吧,其繼承結(jié)構(gòu)如下:

public class
Button
extends TextView
java.lang.Object
   ?    android.view.View
       ?    android.widget.TextView
           ?    android.widget.Button

可以看出Button控件繼承自TextView控件,自然TextView的屬性和方法在Button中也同樣適用。實(shí)現(xiàn)Button控件的單擊監(jiān)聽(tīng)有兩種方式。

經(jīng)典方式,獲取Button對(duì)象,設(shè)置其監(jiān)聽(tīng)事件,參考API提供的方法:

 public class MyActivity extends Activity {
     protected void onCreate(Bundle icicle) {
         super.onCreate(icicle);
         setContentView(R.layout.content_layout_id);
         final Button button = (Button) findViewById(R.id.button_id);
         button.setOnClickListener(new View.OnClickListener() {
             public void onClick(View v) {
                 // Perform action on click
             }
         });
     }
 }

第二種,在布局文件中配置onClick屬性,并設(shè)置相應(yīng)的監(jiān)聽(tīng)方法名:

 <Button
     android:layout_height="wrap_content"
     android:layout_width="wrap_content"
     android:text="@string/self_destruct"
     android:onClick="selfDestruct" />

在Activity中編寫(xiě)同名方法,在方法中處理單擊邏輯:

 public void selfDestruct(View view) {
     // Kabloey
 }

下面通過(guò)一個(gè)具體實(shí)例,來(lái)看一下這兩種方式是如何實(shí)現(xiàn)的

布局文件如下:(activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="實(shí)現(xiàn)單擊監(jiān)聽(tīng)接口"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="test"
        android:layout_below="@+id/btn"
        android:text="onClick實(shí)現(xiàn)單擊監(jiān)聽(tīng)"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />
</RelativeLayout>

可以看出第二個(gè)Button配置了onClick屬性。

Activity程序(MainActivity.java)

public class MainActivity extends Activity {
    private Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button=(Button)findViewById(R.id.btn);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this,"通過(guò)調(diào)用單擊監(jiān)聽(tīng)接口實(shí)現(xiàn)單擊監(jiān)聽(tīng)",Toast.LENGTH_SHORT).show();
            }
        });
    }
    public  void test(View view){
        Toast.makeText(MainActivity.this,"通過(guò)配置onClick屬性實(shí)現(xiàn)單擊監(jiān)聽(tīng)",Toast.LENGTH_SHORT).show();
    }
}

第一個(gè)Button實(shí)現(xiàn)了單擊監(jiān)聽(tīng)接口,采用匿名內(nèi)部類的方式,第二個(gè)Button通過(guò)編寫(xiě)的test方法實(shí)現(xiàn)單擊監(jiān)聽(tīng)。 運(yùn)行實(shí)例如下:

http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/3-1.png" alt="這里寫(xiě)圖片描述" /> http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/3-2.png" alt="這里寫(xiě)圖片描述" />

一般APP都有用戶注冊(cè)功能,用戶注冊(cè)需要獲取手機(jī)驗(yàn)證碼,點(diǎn)擊驗(yàn)證碼短信平臺(tái)通過(guò)短信的形式發(fā)送到用戶手機(jī),為了防止用戶多次點(diǎn)擊并提高用戶體驗(yàn),下面引入一個(gè)實(shí)例,提供點(diǎn)擊一次即將Button設(shè)為不可點(diǎn)擊并在Button上顯示倒計(jì)時(shí)的功能,顯示倒計(jì)時(shí)是為了告知用戶下一次可以獲取驗(yàn)證碼的剩余時(shí)間,提高用戶體驗(yàn)。 布局文件如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@+id/btn" />
    <Button
        android:id="@+id/btn"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:text="獲取驗(yàn)證碼" />
</RelativeLayout>

Activity程序(MainActivity.java)

public class MainActivity extends Activity {
    private Button buttonClock;
    private TimeCount timeCount;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        buttonClock=(Button)findViewById(R.id.btn);
        timeCount=new TimeCount(60*1000,1000);//實(shí)例化TimeCount類
        buttonClock.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                timeCount.start();//調(diào)用start方法開(kāi)始倒計(jì)時(shí)
            }
        });
    }
    class  TimeCount extends CountDownTimer{
        //構(gòu)造方法
       public  TimeCount(long totalTime,long interval){
           super (totalTime,interval);
       }
        @Override
        public void onTick(long millisUntilFinished) {//覆寫(xiě)方法-計(jì)時(shí)中
            buttonClock.setEnabled(false);//按鈕不可點(diǎn)擊
            //參數(shù)millisUntilFinished表示剩余時(shí)間
            buttonClock.setText(millisUntilFinished/1000+"秒");
        }
        @Override
        public void onFinish() {//覆寫(xiě)方法,即時(shí)結(jié)束
            buttonClock.setEnabled(true);//恢復(fù)按鈕可點(diǎn)擊
            buttonClock.setText("重新獲取");//修改按鈕提示文字
        }
    }
}

這里需要說(shuō)明: 這里用到了CountDownTimer類,它是一個(gè)抽象類,這個(gè)類可以實(shí)現(xiàn)倒計(jì)時(shí)功能,覆寫(xiě)onTick方法可以實(shí)現(xiàn)定期通知的操作,覆寫(xiě)onFinish方法,執(zhí)行定時(shí)結(jié)束后的相關(guān)操作。API中給出了參考實(shí)例:

new CountDownTimer(30000, 1000) {
     public void onTick(long millisUntilFinished) {
         mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
     }
     public void onFinish() {
         mTextField.setText("done!");
     }
  }.start();

CountDownTimer類實(shí)例化時(shí)需要傳遞兩個(gè)參數(shù),第一個(gè)參數(shù)是倒計(jì)時(shí)總時(shí)長(zhǎng),第二個(gè)參數(shù)是時(shí)間間隔。從樣例代碼中也可以看出,實(shí)現(xiàn)該抽象類同時(shí)覆寫(xiě)了兩個(gè)方法onTick方法(根據(jù)實(shí)例化CountDownTimer類時(shí)傳入的時(shí)間間隔,定期調(diào)用的方法,樣例中利用它實(shí)現(xiàn)了信息更新的操作)和onFinish方法(倒計(jì)時(shí)結(jié)束時(shí)調(diào)用的方法)。最后調(diào)用其start方法,開(kāi)始倒計(jì)時(shí),從API文檔中可以看出start方法考慮了線程安全問(wèn)題。

運(yùn)行項(xiàng)目實(shí)例: 首先Button上顯示”獲取驗(yàn)證碼”信息。

http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/3-3.png" alt="這里寫(xiě)圖片描述" />

點(diǎn)擊后顯示倒計(jì)時(shí)秒數(shù),此時(shí)Button不可點(diǎn)擊。

http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/3-4.png" alt="這里寫(xiě)圖片描述" />

倒計(jì)時(shí)結(jié)束后,Button上顯示“重新獲取”字樣,Button可點(diǎn)擊。

http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/3-5.png" alt="這里寫(xiě)圖片描述" />