Android按鈕的各個樣式設置


安卓開發學習之014 Button應用詳解(樣式、背景、按鈕單擊、長按、雙擊、多擊事件)

一、Button簡介

按鈕也是繼承自TextView
這里寫圖片描述

二、XML定義方法

<Button
            android:id="@+id/button01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button_Click"/>

id設置按鈕唯一編號
text設置按鈕上顯示的文本

三、設置按鈕背景圖片

使用background屬性設置背景圖片

 <!-- 背景設置--> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@mipmap/yxs" android:text="Background"/>

四、設置樣式

主要是定義按鈕三種狀態下分別對應的背景樣式
默認狀態、獲得焦點(android:state_focused=“true”)、
按下時(android:state_pressed=“true”)

 <!-- 使用單一shape定義樣式--> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/bg_border" android:text="Button_Shape"/> <!-- 使用selector定義樣式,其中包括三種狀態下的shape--> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/button_selector" android:text="Button_Selector1"/> <!-- 使用selector定義樣式,其中包括三種狀態下所使用的圖片--> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/selector_button_start" android:text="Button_Selector2"/>

三個文件drawable文件代碼如下:

1.res/drawable/bg_border.xml

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <!-- 圓角 --> <corners android:radius="10dp"/> <!-- 設置圓角半徑 --> <!-- 漸變 --> <gradient android:centerColor="#00ff00" android:endColor="#0000ff" android:startColor="#ff0000" android:type="linear" /> <!-- 間隔 --> <padding android:bottom="2dp" android:left="2dp" android:right="2dp" android:top="2dp"/> <!-- 各方向的間隔 --> <!-- 大小 --> <size android:width="50dp" android:height="50dp"/> <!-- 寬度和高度 --> <!-- 填充 --> <!--<solid--> <!--android:color="@android:color/white"/>--> <!-- 填充的顏色 --> <!-- 描邊 --> <stroke android:width="2dp" android:color="#f0f" /> </shape>

2.res/drawable/button_selector.xml

<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!--按下時樣式--> <item android:state_pressed="true"> <shape> <!-- 描邊 --> <stroke android:width="2dp" android:color="#fad3cf"/> <solid android:color="#87CEFF"/> <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp"/> <!-- 圓角 --> <corners android:bottomLeftRadius="10dp" android:bottomRightRadius="10dp" android:topLeftRadius="10dp" android:topRightRadius="10dp"/> </shape> </item> <!-- 獲得焦點時樣式--> <item android:state_focused="true"> <shape> <gradient android:angle="270" android:centerColor="#00ff00" android:endColor="#ffc2b7" android:startColor="#f0f" android:type="sweep"/> <stroke android:width="2dp" android:color="#dcdcdc"/> <corners android:bottomLeftRadius="10dp" android:bottomRightRadius="10dp" android:topLeftRadius="10dp" android:topRightRadius="10dp"/> <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp"/> </shape> </item> <!-- 默認樣式--> <item> <shape> <!-- 漸變 --> <gradient android:centerColor="#00ff00" android:endColor="#FFFFFF" android:startColor="#ff8c00" android:type="linear"/> <!-- 描邊 --> <stroke android:width="2dp" android:color="#dcdcdc" android:dashGap="3dp" android:dashWidth="5dp"/> <!-- 圓角 --> <corners android:bottomLeftRadius="10dp" android:bottomRightRadius="10dp" android:topLeftRadius="10dp" android:topRightRadius="10dp"/> <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp"/> <!--<solid android:color="#ffc2b7"/>--> </shape> </item> </selector>

效果如下:
這里寫圖片描述
這里寫圖片描述
這里寫圖片描述

3.res/drawable/selector_button_start.xml

<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@mipmap/search_bar_edit_pressed" android:state_pressed="true"/> <item android:drawable="@mipmap/button_start_click" android:state_focused="true"/> <item android:drawable="@mipmap/search_bar_edit_normal"></item> </selector> 

四、按鈕點擊事件的處理方式

按鈕點擊有四種處理方法。
第一種是通過onClick屬性,通過這個屬性設置處理點擊事件的方法名,在Activity中實現這個方法。
第二種是典型的事件監聽機制setOnClickListener的應用形式,下面詳細說明這四種方法。

1.通過onClick屬性設置處理方法

  在XML布局文件中設置Button的屬性:
  android:onClick=”yourMethodName”
  然后在該布局文件對應的Acitivity中實現該方法:
需要注意的是這個方法必須符合三個條件:
1.public
2.返回void
3.只有一個參數View,這個View就是被點擊的這個控件。
也可為多個Button設置同一個方法名,然后在方法內使用switch方法判斷點擊的是哪個按鈕

如下:

<Button
            android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/button_selector" android:onClick="MyClick" android:text="Button_onClick"/> java代碼中 /** * 在XML中配置置android:onClick="MyClick" * 必須設置為public void */ public void MyClick(View view) { // switch (view.getId()) // { // //TODO // } Toast.makeText(ButtonActivity.this, "android:onClick=\"MyClick\"", Toast.LENGTH_SHORT) .show(); }

2.使用setOnClickListener添加監聽器對象

Button button01 = (Button) findViewById(R.id.button01);
        //短按點擊事件監聽 button01.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(ButtonActivity.this, "OnClickListener", Toast.LENGTH_SHORT).show(); } });

此種方法還有幾個變種:
1.自定義類實現OnClickListener接口

//自定義類實現OnClickListener接口 private MyOnClickListener mOnClickListener = new MyOnClickListener(); private class MyOnClickListener implements View.OnClickListener { @Override public void onClick(View v) { switch (v.getId()) { //TODO } } } 然后調用 button01.setOnClickListener(mOnClickListener); button02.setOnClickListener(mOnClickListener);

此種方法的好處是當多個按鈕要處理的事件邏輯是一樣的話,不用每個按鈕都寫一個setOnClickListener監聽事件,並實現Onclick方法

2.使Activity實現OnClickListener接口,並在Activity中實現Onclick方法

public class ButtonActivity extends AppCompatActivity implements View.OnClickListener{ @Override public void onClick(View v) { switch (v.getId()) { //TODO } } } 

3.長按事件監聽

//長按(長按2秒以上)點擊事件監聽 button01.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { Toast.makeText(ButtonActivity.this, "OnLongClickListener", Toast.LENGTH_SHORT) .show(); return true; } });

五、雙擊事件判定

主要代碼如下

    private static int DOUBLE_CLICK_TIME = 1000; private List<Long> times = new ArrayList<>(); private Handler mHandler = new Handler(); private Runnable r; /**雙擊事件判斷*/ private boolean isDoubleClick() { if (times.size() == 2) { //已經完成了一次雙擊,list可以清空了 if (times.get(times.size() - 1) - times.get(0) < DOUBLE_CLICK_TIME) { times.clear(); Toast.makeText(ButtonActivity.this, "雙擊", Toast.LENGTH_SHORT).show(); if (mHandler != null) { if (r != null) { //移除回調 mHandler.removeCallbacks(r); r = null; } } return true; } else { //這種情況下,第一次點擊的時間已經沒有用處了,第二次就是“第一次” times.remove(0); } } //此處可以添加提示 //showTips(); r = new Runnable() { @Override public void run() { Toast.makeText(ButtonActivity.this, "單擊", Toast.LENGTH_SHORT).show(); } }; //DOUBLE_CLICK_TIME時間后提示單擊事件 mHandler.postDelayed(r, DOUBLE_CLICK_TIME); return false; }

使用方法:在onClick(View v)方法中調用

 Button button02 = (Button) findViewById(R.id.button02);
        button02.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { times.add(SystemClock.uptimeMillis()); isDoubleClick(); } });

六、多擊事件

 /**多擊事件判斷*/ private boolean isMultiClick() { int size = times.size(); //處理多擊事件 if (size > 1) { if (times.get(size - 1) - times.get(size - 2) < DOUBLE_CLICK_TIME) { Toast.makeText(ButtonActivity.this, size + "連擊", Toast.LENGTH_SHORT).show(); if (mHandler != null) { if (r != null) { //移除回調 mHandler.removeCallbacks(r); } } return true; } else { //這種情況下,以前存儲的點擊的時間已經沒有用處了,最后一次就是“第一次” long oldtime = times.get(size - 1); times.clear(); times.add(oldtime); } } //此處可以添加提示 //showTips(); r = new Runnable() { @Override public void run() { Toast.makeText(ButtonActivity.this,"單擊", Toast.LENGTH_SHORT).show(); } }; //DOUBLE_CLICK_TIME時間后提示單擊事件 mHandler.postDelayed(r, DOUBLE_CLICK_TIME); return false; }

效果如下:
這里寫圖片描述

開發工具:Android Studio1.4
SDK: Android 6.0
API 23

代碼下載:Button.zip

版權聲明:本文為博主原創文章,如需轉載請注明來源。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM