目錄
-
1.Button的繼承關(guān)系
-
2.Button 點擊事件
-
3.Button 簡單使用舉例
-
4.自定義Button選擇器
具體操作
一、Button的繼承關(guān)系
Button繼承TextView,其具體關(guān)系如下:
>java.lang.Object
? android.view.View
? android.widget.TextView
? android.widget.Button
二、Button 點擊事件
實現(xiàn)Button點擊事件的方法(一)-onClick 屬性
1.在xml文件配置一個onClick屬性,設(shè)置一下點擊事件的方法名
-
xml布局使用
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Edit"
android:textColor="#ff0000"
android:textSize="25sp"
android:onClick="login"
/>
-
java代碼中點擊實現(xiàn) 效果
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void login(View view){
System.out.println("點擊了");
}
}
實現(xiàn)Button點擊事件的方法(二)-通過java代碼實現(xiàn)
-
xml布局使用
<Button
android:id="@+id/bt_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Edit"
android:textColor="#ff0000"
android:textSize="25sp"
/>
-
java代碼中點擊實現(xiàn)效果
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//通過id號找到按鈕
btn=findViewById(R.id.bt_login);
//給按鈕添加點擊事件
btn.setOnClickListener(this);
}
@Override
public void onClick(View view) {
//因為view里面沒有Button類型,所以使用的時候轉(zhuǎn)換為對應的子類類型
Button btn=(Button)view;
//更改按鈕的標題
btn.setText("退出");
}
}
!!!按鈕的點擊事件 通常接收一個參數(shù):View . 當按鈕被點擊,系統(tǒng)接收這個事件,并把這個事件回調(diào)給監(jiān)聽者
三、Button 簡單使用舉例
Button簡單小demo(一)
實現(xiàn)一個按鈕(比如:按鈕的標題是
Done,點擊一下后標題就變成了Edit,類似這樣,隨著不同的點擊,按鈕的標題在Done和Edit之間不斷的切換)
未命名文件.jpg
- 第一種方法:
1.xml布局使用
<Button
android:tag="1"
android:id="@+id/bt_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Edit"
android:textColor="#ff0000"
android:textSize="25sp"
/>
2.java代碼中點擊實現(xiàn)效果
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//通過id號找到按鈕
btn=findViewById(R.id.bt_login);
//給按鈕添加點擊事件
btn.setOnClickListener(this);
}
@Override
public void onClick(View view) {
//因為view里面沒有Button類型,所以使用的時候轉(zhuǎn)換為對應的子類類型
Button btn=(Button)view;
if(btn.getText().equals("Edit")){
//更改按鈕的標題
btn.setText("Done");
}else{
btn.setText("Edit");
}
}
}
該方法是有局限的,因為不能保證程序里面一定是文本!!!
- 第二種方法:(添加一個boolean變量)
1.xml布局使用
<Button
android:tag="1"
android:id="@+id/bt_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Edit"
android:textColor="#ff0000"
android:textSize="25sp"
/>
2.java代碼中點擊實現(xiàn)效果
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
boolean isnormal=true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//通過id號找到按鈕
btn=findViewById(R.id.bt_login);
//給按鈕添加點擊事件
btn.setOnClickListener(this);
}
@Override
public void onClick(View view) {
//因為view里面沒有Button類型,所以使用的時候轉(zhuǎn)換為對應的子類類型
Button btn=(Button)view;
//判斷狀態(tài)
if(isnormal){
btn.setText("Done");
}else{
btn.setText("Edit");
}
isnormal=!isnormal;
}
}
這個方法可能還不太好。因為無形之中添加了一個boolean變量,可能會出現(xiàn)一個問題:按鈕的狀態(tài)不能直接被知道,而是要通過boolean變量是True還是false,間接被知道
未命名文件(1).jpg
- 第三種方法:(按鈕本身自動獲取按鈕自己的點擊狀態(tài),通過添加一個Tag值)
1.xml布局使用
<Button
android:tag="1"
android:id="@+id/bt_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Edit"
android:textColor="#ff0000"
android:textSize="25sp"
/>
-
java代碼中點擊實現(xiàn)效果
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//通過id號找到按鈕
btn=findViewById(R.id.bt_login);
//給按鈕添加點擊事件
btn.setOnClickListener(this);
}
@Override
public void onClick(View view) {
//因為view里面沒有Button類型,所以使用的時候轉(zhuǎn)換為對應的子類類型
Button btn=(Button)view;
if(btn.getTag().equals(1)){
btn.setText("Done");
btn.setTag("0");
}else{
btn.setText("Edit");
btn.setTag("1");// btn.setTag(1); 這樣不行
}
}
}
設(shè)置tag值的時候,tag值應該用雙引號括起來.例如:
btn.setTag("1"); 正確
btn.setTag(1); 錯誤
Button簡單小demo(二)
在demo(一)的基礎(chǔ)上,再設(shè)置兩個按鈕,實現(xiàn)點擊其中一個按鈕,則另一個按鈕才有效(才能點擊),否則該按鈕無效
未命名文件(2).jpg
- 第一種方法
1.xml布局使用
<Button
android:tag="1"
android:id="@+id/bt_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Edit"
android:textColor="#ff0000"
android:textSize="25sp"
/>
<Button
android:id="@+id/bt_done"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="完成"
android:layout_below="@+id/bt_login"
android:layout_marginTop="20dp"
android:enabled="false"/>
<Button
android:id="@+id/bt_edit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="編輯"
android:layout_alignTop="@+id/bt_done"
android:layout_alignRight="@+id/bt_login"
/>
2.java代碼中點擊實現(xiàn)效果
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
Button btn;
Button done;
Button edit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//通過id號找到按鈕
btn=findViewById(R.id.bt_login);
done=findViewById(R.id.bt_done );
edit=findViewById(R.id.bt_edit);
//給按鈕添加點擊事件
btn.setOnClickListener(this);
done.setOnClickListener(this);
edit.setOnClickListener(this);
}
@Override
public void onClick(View view) {
//因為view里面沒有Button類型,所以使用的時候轉(zhuǎn)換為對應的子類類型
Button btn=(Button)view;
if(btn.getId()==R.id.bt_login) {
if (btn.getTag().equals(1)) {
btn.setText("Done");
btn.setTag("0");
} else {
btn.setText("Edit");
btn.setTag("1");// btn.setTag(1); 這樣不行
}
}
if(btn.getId()==R.id.bt_edit){
done.setEnabled(true);
edit.setEnabled(false);
}
if(btn.getId()==R.id.bt_done){
done.setEnabled(false);
edit.setEnabled(true);
}
}
- 第二種方法
xml中代碼和第一種方法一樣
java代碼中點擊實現(xiàn)效果
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
Button btn;
Button done;
Button edit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//通過id號找到按鈕
btn=findViewById(R.id.bt_login);
done=findViewById(R.id.bt_done );
edit=findViewById(R.id.bt_edit);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (btn.getTag().equals(1)) {
btn.setText("Done");
btn.setTag("0");
} else {
btn.setText("Edit");
btn.setTag("1");// btn.setTag(1); 這樣不行
}
}
});
done.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
done.setEnabled(false);
edit.setEnabled(true);
}
});
edit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
done.setEnabled(true);
edit.setEnabled(false);
}
});
- 第三種方法(使用lamda表達式)
1.xml中代碼和第一種方法一樣
2.java代碼中點擊實現(xiàn)效果
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
Button btn;
Button done;
Button edit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//通過id號找到按鈕
btn=findViewById(R.id.bt_login);
done=findViewById(R.id.bt_done );
edit=findViewById(R.id.bt_edit);
btn.setOnClickListener(view -> {
if (btn.getTag().equals(1)) {
btn.setText("Done");
btn.setTag("0");
} else {
btn.setText("Edit");
btn.setTag("1");// btn.setTag(1); 這樣不行
}
});
done.setOnClickListener(view->{
done.setEnabled(false);
edit.setEnabled(true);
});
edit.setOnClickListener(view -> {
done.setEnabled(true);
edit.setEnabled(false);
});
}
4.自定義Button選擇器
1.xml布局使用
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="分享"
android:textColor="@drawable/test_color" />
2.Button背景選擇器實現(xiàn)
新建一個配置文件
drawable->new->Drawable resource file
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!--按下狀態(tài)的顏色 pressed-->
<item android:color="#ff0000"
android:state_pressed="true"/>
<!--無效 無法點擊的顏色 enable-->
<item android:color="#00ff00"
android:state_enabled="false"/>
<!--默認狀態(tài)-->
<item android:color="#000000"/>
</selector>


