日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Button控件的基本使用(初识封装、减少代码冗余性、代码优化)

發布時間:2025/4/5 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Button控件的基本使用(初识封装、减少代码冗余性、代码优化) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Button是程序用于和用戶進行交互的一個重要控件,它的配置屬性和TextView差不多,這里我們可以注意觀察一下Button眾多屬性中的兩種:

1.屬性名android:textAllCaps? ?(用于設置Button控件中的英文字母大小寫)

2.屬性名android:visibility? ? ? ? (用于設置Button控件是否可見,以及不可見的時候是否占據屏幕空間)

?

下面我們具體看下這兩個屬性的具體值的功能:

1.android:textAllCaps="true"? ?

? ?這個是系統默認的值,將英文字母全部默認大寫顯示? ?例:android:text="abcDEfg"? ? 顯示:ABCDEF

? ?android:textAllCaps="false"

? 當我們將值設置為false之后,英文字母都按照你所獲取的文本內容來顯示.例:androidtext="AbCDefg"?顯示:AbCDefg

2.android:visibility="gone"? ?將Button控件設置為不可見,并且不占據屏幕空間

? ?android:visibility="invisible"? 將Button控件設置為不可見,但占據屏幕空間

? ?android:visibility="visible"? ? ?將Button控件設置為可見,占據屏幕空間

?

接下來就是Button控件的點擊監聽了:

在使用Button控件之前,首先你得在相應Activity的布局文件中來定義Button控件,這里我就定義兩個Button控件吧,順便將上面兩個屬性給使用一下。

activity_main.xml中:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Buttonandroid:id="@+id/btn1"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="abcDEfg"android:textAllCaps="true"android:visibility="visible" /><Buttonandroid:id="@+id/btn2"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="AbCDefg"android:textAllCaps="false"android:visibility="visible" /> </LinearLayout>

MainActivity.java中:

package com.example.administrator.activitydemo;import android.content.Intent; import android.net.Uri; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button;public class MainActivity extends AppCompatActivity implements View.OnClickListener {private Button btn1, btn2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();//初始化UI控件}private void initView() {btn1 = (Button) findViewById(R.id.btn1);btn2 = (Button) findViewById(R.id.btn2);btn1.setOnClickListener(this);btn2.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn1:btn1.setText("textAllCaps=true 英文字母全大寫"+"\n visibility=visible 控件可見" );break;case R.id.btn2:btn2.setText("textAllCaps=false 英文字母根據內容來顯示"+"\n visibility=visible 控件可見");break;default:break;}}}

運行效果:

點擊btn1、btn2:

接下來我來將MainActivity.java中的代碼分析一下,

1.首先在最上方我們聲名了兩個Button類型的變量 btn1,btn2

2.在重寫的onCreate()方法中定義了一個initView()方法,這個方法專門用來初始化UI控件的,因為只有初始化好了控件,我們才能為其設置點擊監聽,要么就會出現java.lang.NullPointException(空指針異常),至于為何我們要在onCreate()方法中初始化UI控件呢,這是因為根據Activity的生命周期,onCreate()方法是Activity被創建的時候,系統自動調用的方法,我們在這里初始化UI控件意思就是在Activity一旦被創建后,就可以使用UI控件了。

3.在initView()方法中初始化完UI控件后,就調用Button類中的setOnClickListener(OnClickListener listener)方法,這里的參數是個引用類型(類、接口、數組),這里的OnClickListener是個接口,所以我們需要傳入一個OnClickListener接口的實現類的對象,一般有兩種寫法:

第一種是btn1.setOnClickListener(this);? ?這里的this就是MainActivity類的引用??

用MainActivity類去實現View類中的OnClickListener接口

public class MainActivity extends AppCompatActivity implements View.OnClickListener

然后重寫onClick(View v)方法,這里一般搭配switch case語句,根據所點擊Button控件的id來判斷是點擊的哪個Button

private void initView() {btn1 = (Button) findViewById(R.id.btn1);btn2 = (Button) findViewById(R.id.btn2);btn1.setOnClickListener(this);btn2.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn1:btn1.setText("textAllCaps=true 英文字母全大寫"+"\n visibility=visible 控件可見" );break;case R.id.btn2:btn2.setText("textAllCaps=false 英文字母根據內容來顯示"+"\n visibility=visible 控件可見");break;default:break;}}

?

?

第二種是直接傳入一個匿名的接口實現類對象

btn1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {}}); new View.OnClickListener() {@Overridepublic void onClick(View v) {} } 這就是OnClickListener接口的匿名實現類對象,將這個整體,作為參數傳入setOnCliskListener()方法中就可以實現點擊監聽了。在onClick(View v){} 中可以寫你需要做的邏輯代碼。例如下面的代碼: btn1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {btn1.setText("textAllCaps=true 英文字母全大寫"+"\n visibility=visible 控件可見" );}});btn2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {btn2.setText("textAllCaps=false 英文字母根據內容來顯示"+"\n visibility=visible 控件可見");}});

?

? ?最后,不知道有沒有同學發現一個問題,在點擊監聽中直接將文字設置到Button控件上,這種做法其實很不好,因為如果文字過多,或者我們在獲取文字的過程中過于復雜,很耗時的話,就會出現問題。在Android中,主線程是不能進行耗時操作的,我們一般會把一些耗時的操作,單獨放入一個子線程中,讓子線程來操作,Android中剛好有一個專門用來在主線程中跟新UI的子線程。

runOnUiThread(new Runnable() {@Overridepublic void run() {}});

然后我們將耗時操作放入run()方法中就好了,代碼如下:

方法1:

@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn1:runOnUiThread(new Runnable() {@Overridepublic void run() {btn1.setText("textAllCaps=true 英文字母全大寫"+"\n visibility=visible 控件可見" ); }});break;case R.id.btn2:runOnUiThread(new Runnable() {@Overridepublic void run() {btn2.setText("textAllCaps=false 英文字母根據內容來顯示"+"\n visibility=visible 控件可見"); }});break;default:break;}}

方法2:

btn1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {runOnUiThread(new Runnable() {@Overridepublic void run() {btn1.setText("textAllCaps=true 英文字母全大寫"+"\n visibility=visible 控件可見" );}});}});btn2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {runOnUiThread(new Runnable() {@Overridepublic void run() {btn2.setText("textAllCaps=false 英文字母根據內容來顯示"+"\n visibility=visible 控件可見");}});}});

回顧前面的代碼,有沒有發現,重復的代碼有點多?

這里為了減少代碼的冗余性,我們可以為這些多次使用的重復代碼加以封裝和優化,就用兩個函數封裝一下,然后調用就好了。

?

實現1:

@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn1:function1();//更新btn1的顯示內容break;case R.id.btn2:function2();//更新btn2的顯示內容break;default:break;}}public void function1() {updateUI(btn1, "textAllCaps=true 英文字母全大寫" + "\n visibility=visible 控件可見");}public void function2() {updateUI(btn2, "textAllCaps=false 英文字母根據內容來顯示\"+\"\\n visibility=visible 控件可見");}public void updateUI(final Button btn, final String str) {runOnUiThread(new Runnable() {@Overridepublic void run() {if (btn == btn1) {btn1.setText(str);}if (btn == btn2) {btn2.setText(str);}}});}

實現2:

public void function1() {updateUI(btn1, "textAllCaps=true 英文字母全大寫" + "\n visibility=visible 控件可見");}public void function2() {updateUI(btn2, "textAllCaps=false 英文字母根據內容來顯示\"+\"\\n visibility=visible 控件可見");}public void updateUI(final Button btn, final String str) {runOnUiThread(new Runnable() {@Overridepublic void run() {if (btn == btn1) {btn1.setText(str);}if (btn == btn2) {btn2.setText(str);}}});}btn1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {function1();//更新btn1的顯示內容}});btn2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {function2();//更新btn2的顯示內容}});

如果新同學看不太明白封裝,可以買本java基礎,認真學習一下java基礎,等你java有了基礎之后,學習Android就會比較輕松了。記得我1年前學習Android也是很吃力的,后來買了本書,也看了些老師的視頻教學,多練習之后,明顯有所進步,然后發現封裝真的很厲害,它很有利于同事工作之間的代碼協調,規定好具體封裝形式,干凈整潔,也不容易暴露核心技術,舒服。

?

?

?

總結

以上是生活随笔為你收集整理的Button控件的基本使用(初识封装、减少代码冗余性、代码优化)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。