StateListDrawable
StateListDrawable:StateListDrawable就是对应于selector标签,也是表示一个Drawable集合,每个Drawable都对应View的一种状态
StateListDrawable用途:设置可单击的View的背景,常和ShapeDrawable一起使用
StateListDrawable常用属性
- drawable: 引用的drawable位图
- state_focused: 是否获得焦点
- state_pressed: 控件是否被按下
- state_enaabled: 控件是否可用
- state_selected: 控件时是否被选择,针对有滚轮的情况
- state_checked: 控件是否被勾选
- state_checkable: 控件可否被勾选
Button继承自TextView,基本属性大致相同
1.在app/src/main/res/drawable目录下创建一个drawable资源文件
![](../Android-Button/drawableFile.jpg)
![](../Android-Button/drawableCreate.jpg)
2.导入几张drawable图片
![](../Android-Button/drawablePictrue.jpg)
3.在资源文件中写入对应的item标签
1 2 3 4 5 6 7 8 9
| <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_baseline_accessible_24" android:state_pressed="false"/>
<item android:drawable="@drawable/ic_baseline_accessible_forward_24" android:state_pressed="true"/> </selector>
|
4.将按钮的背景设置为drawable文件
1 2 3 4 5 6
| <Button android:layout_width="80dp" android:layout_height="80dp" android:id="@+id/btn1" android:background="@drawable/button1" android:text="按钮"/>
|
5.当按钮按下时,背景为ic_baseline_accessible_forward_24,松开时为ic_baseline_accessible_24
单击事件
1 2 3 4 5 6 7 8
| btn1 = findViewById(R.id.btn1);
btn1.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { tv_one.setText("大丈夫生居天地间,岂能郁郁久居人下"); } });
|
单击事件还可以在xml中对某控件添加
1 2 3 4 5 6 7 8
| <Button android:layout_width="80dp" android:layout_height="80dp" android:id="@+id/btn1" <!-- 需要有对应的TestClick()方法--> android:onClick="TestClick" android:background="@drawable/button1" android:text="按钮"/>
|
长按事件
1 2 3 4 5 6 7 8 9 10
| btn1 = findViewById(R.id.btn1);
btn1.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { tv_one.setText("须知少时凌云志,曾许人间第一流");
return true; } });
|
触摸事件
触摸事件分为三种
- ACTION_UP = 1(离开)
- ACTION_DOWM = 0(按下)
- ACTION_MOVE = 2(移动)
1 2 3 4 5 6 7 8
| btn1.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { tv_one.setText("他日若遂凌云志,敢笑黄巢不丈夫");
return false; } });
|
- RadioButton是安卓中用来实现单选功能的组件
- RadioGroup是一个可以容纳多个RadioButton的容器
在没有RadioGroup的情况下,RadioButton可以全部选中,RadioGroup中的RadioButton只能选中一个
常用方法
1 2 3 4 5 6 7 8 9 10 11
| RadioGroup.getCheckedRadioButtonId();
RadioGroup.clearCheck();
RadioGroup.check();
RadioGroup.setOnCheckedChangeListener();
|
操作方式
布局文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:layout_height="match_parent" android:layout_width="match_parent" android:orientation="vertical" android:gravity="center" xmlns:android="http://schemas.android.com/apk/res/android"> <RadioGroup android:id="@+id/group1" android:background="@color/lightyellow" android:layout_width="match_parent" android:gravity="center" android:layout_height="200dp">
<RadioButton android:id="@+id/btn1" android:text="炎龙铠甲" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <RadioButton android:id="@+id/btn2" android:text="风鹰铠甲" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <RadioButton android:id="@+id/btn3" android:text="黑犀铠甲" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <RadioButton android:id="@+id/btn4" android:text="地虎铠甲" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <RadioButton android:id="@+id/btn5" android:text="雪獒铠甲" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </RadioGroup> </LinearLayout>
|
java代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.Toast;
public class MainActivity extends AppCompatActivity { private RadioGroup group; private RadioButton btn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
group = findViewById(R.id.group1);
group.check(R.id.btn1);
group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) {
btn = findViewById(checkedId); Toast.makeText(MainActivity.this,btn.getText(),Toast.LENGTH_SHORT).show(); } }); } }
|
checkBox(多选按钮)
为其设置check=”true”属性则选中
常用方法
1 2 3 4 5
| check.isChecked();
check.setOnCheckedChangeListener();
|
实例
提示选中的复选框的文本内容,当没有复选框被选中时,按钮不可点击
布局文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:layout_height="match_parent" android:id="@+id/linear1" android:layout_width="match_parent" android:orientation="vertical" android:gravity="center" xmlns:android="http://schemas.android.com/apk/res/android"> <CheckBox android:id="@+id/checkBox1" android:text="炎龙铠甲" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <CheckBox android:id="@+id/checkBox2" android:text="风鹰铠甲" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <CheckBox android:id="@+id/checkBox3" android:text="黑犀铠甲" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <CheckBox android:id="@+id/checkBox4" android:text="地虎铠甲" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <CheckBox android:id="@+id/checkBox5" android:text="雪獒铠甲" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
<Button android:id="@+id/btn1" android:text="选中状态" android:enabled="false" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout>
|
java代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.LinearLayout; import android.widget.Toast;
import java.util.ArrayList; import java.util.List;
public class MainActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener { private CheckBox[] checkBoxes = new CheckBox[5]; private Button btn1; private LinearLayout linear1; private int count; private List<String> list = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
linear1 = findViewById(R.id.linear1);
for (int i = 0;i < linear1.getChildCount();i++){
View view = linear1.getChildAt(i);
if (view instanceof CheckBox){
checkBoxes[i] = (CheckBox) view; checkBoxes[i].setOnCheckedChangeListener(this); } }
btn1 = findViewById(R.id.btn1); btn1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String str = ""; for (int i = 0;i < list.size();i++){ str += list.get(i) + ";"; } Toast.makeText(MainActivity.this,str,Toast.LENGTH_SHORT).show(); } }); }
@Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked){ count++; list.add(buttonView.getText().toString());
if (!btn1.isEnabled()){ btn1.setEnabled(true); } } else { count--; list.remove(buttonView.getText().toString());
if (count == 0){ btn1.setEnabled(false); } } } }
|