Android简单控件使用

  • 1. 使用按钮控件
  • 1.1 Button使用
  • 1.2 CheckBox使用
  • 1.3 RadioButton
  • 2.图文控件
  • 2.1 TextView使用
  • 2.2 ImageView使用
  • 2.3 EditView使用


1. 使用按钮控件

Android常用按钮有Button、CheckBox、RadioButton

1.1 Button使用

Button设置监听三种方式
方式一 匿名函数

btn_click_anonymos.setOnClickListener { v ->
 //Kotlin对变量进行类型转换关键字as
 toast("఍ᅩڋԧഴկғ${(v as Button).text}")
}

方式二 内部类

private inner class MyClickListener : View.OnClickListener {
 override fun onClick(v: View) {
 toast("఍ᅩڋԧഴկғ${(v as Button).text}")
 }
}

btn_click_inner.setOnClickListener(MyClickListener())

方式三 接口实现

class ButtonClickActivity : AppCompatActivity(), OnClickListener {
override fun onCreate(savedInstanceState: Bundle?) {
	 super.onCreate(savedInstanceState)
	 ......
	 btn_click_interface.setOnClickListener(this)
	 ......
	}
override fun onClick(v: View) {
	 if (v.id == R.id.btn_click_interface) {
	 toast("఍ᅩڋԧഴկғ${(v as Button).text}")
	 }
 }
}

1.2 CheckBox使用

绑定监听实现

class CheckboxActivity : AppCompatActivity() {
 override fun onCreate(savedInstanceState: Bundle?) {
 super.onCreate(savedInstanceState)
 ......
 ck_select.isChecked = false //默认是未选中状态
 ck_select.setOnCheckedChangeListener { buttonView, isChecked ->
 tv_select.text = "您${if(isChecked) "Checked" else "UnChecked" } 了复选框"
 }
 .....
 }

1.3 RadioButton

绑定监听实现

class RadioButtonActivity : AppCompatActivity() {
	override fun onCreate(savedInstanceState: Bundle?) {
	super.onCreate(savedInstanceState)
	......
	rg_sex.setOnCheckedChangeListener { group, checkedId ->
	 tv_sex.text = when (checkedId) {
	 R.id.rb_male -> "male is checked"
	 R.id.rb_female -> "female is checked"
	 else -> ""
	 }
	 }
	......
	}
}

2.图文控件

常用图文控件主要包括TextView、ImageView及EditText

2.1 TextView使用

tv_marquee.text = "这是一条长文本,这是一条长文本,这是一条长文本,这是一条长文本,这是一条长文本,这是一条长文本"
 tv_marquee.textSize = 17f
 tv_marquee.setTextColor(Color.BLACK)
 tv_marquee.setBackgroundColor(Color.WHITE)
 tv_marquee.gravity = Gravity.LEFT or Gravity.CENTER //左对齐且垂直居中
 tv_marquee.ellipsize = TextUtils.TruncateAt.MARQUEE //从右向左滚动的跑马灯
 tv_marquee.setSingleLine(true) //跑马灯效果务必设置SingleLine单行显示
 tv_marquee.setOnClickListener {
 bPause = !bPause
 tv_marquee.isFocusable = if (bPause) false else true
 tv_marquee.isFocusableInTouchMode = if (bPause) false else 
true
 }

注意:上面设置TextView的gravity属性时,使用到了或运算符,请参考位运算相关章节

Kotlin位运算

2.2 ImageView使用

ImageView相关方法

  • setImageDrawable: 设置图片Drawable对象
  • setImageResource:设置图片的资源ID
  • setImageBitmap:设置图片的位图对象
  • setScaleType: 设置图片拉伸类型

下面表格对图片拉伸类型取值做说明

ScaleType类的拉伸类型

说明

ScaleType.FIT_XY

拉伸图片使之正好填满视图(图片可能被拉伸变形)

ScaleType.FIT_START

拉伸图片使之位于视图上部

ScaleType.FIT_CENTER

拉伸图片使之位于视图中间

ScaleType.FIT_END

拉伸图片使之位于视图下部

ScaleType.CENTER

保持图片原尺寸,使之位于视图中间

ScaleType.CENTER_CROP

拉伸图片使之充满视图,并位于视图中间

ScaleType.CENTER_INSIDE

使图片位于视图中间(只压不拉)。当图片尺寸大于View时,centerInside等同于fitCenter,反之,等同于center

2.3 EditView使用

class EditTextActivity : AppCompatActivity() {
 override fun onCreate(savedInstanceState: Bundle?) {
 super.onCreate(savedInstanceState)
 setContentView(R.layout.activity_edit_text)
 /*不能直接给EditText控件的text属性赋值否则报错Editable与String类型不匹配
 * 只能调用setText方法对EditText设置文本
 */
 et_phone.setText("");
 //显示明文密码
 et_phone.inputType = InputType.TYPE_CLASS_NUMBER
 //隐藏密码
 et_phone.inputType = InputType.TYPE_TEXT_VARIATION_VISIBLE_PASS
WORD
 //给编辑框添加文本变化监听器
 et_phone.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD
 //给编辑框添加文本变化监听器
 et_phone.addTextChangedListener(EditWatcher())
}
 
 private inner class EditWatcher : TextWatcher {
	 override fun beforeTextChanged(s: CharSequence, start: Int, cou
	nt: Int, after: Int) {}
	 override fun onTextChanged(s: CharSequence, start: Int, before:
	 Int, count: Int) {}
	 override fun afterTextChanged(s: Editable) {
	 var str = s.toString()
	 //发现输入回车符或换行符
	 if (str.indexOf("\r") >= 0 || str.indexOf("\n") >= 0) {
	 //去掉回车符或换行符
	 str = str.replace("\r", "").replace("\n", "")
	 }
	 if (str.length >= 11) {
	 tv_phone.text = "您输入的手机号码是:$str"
	 }
 }
 
 }