一、TextView
TextView是最基本的控件,直接继承了View,是众多控件的的父类
- Android中各种组件监听器
组件 | 监听器 |
---|---|
ImageView | OnClickListener |
Button | OnClickListener |
RadioGroup | OnCheckedChangeListener |
RatingBar | OnRatingBarChangeListener |
ToggleButton | OnClickListener |
SeekBar | OnSeekBarChangeListener |
二、实现监听器的四种方式
-
法一:创建内部类并实现OnClickListener
布局文件:
<?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"> <Button android:id="@+id/btn01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="按钮" android:background="@mipmap/ic_launcher"/> </LinearLayout>
MainActivity.java:
package com.example.lenovo.ui_project; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private Button button01; /*为按钮添加监听器的步骤 * 1.在XML布局文件中添加<Button/>控件,并为其设置id * 2.在java代码中,通过setContentView,装载Button所在的XML布局 * 3.通过id在java中获得Button对象 * 4.为button按钮添加监控事件(四种方式) * * 法一:创建内部类并实现OnClickListener * 步骤: * 1.在内部类中重写onClick方法 * 2.生成内部类的对象 * 3.为按钮添加监听器 * */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_linearlayout); button01=(Button)findViewById(R.id.btn01); // 2.生成内部类的对象 MyButtonListener myButtonListener=new MyButtonListener(); // 3.为按钮添加监听器 button01.setOnClickListener(myButtonListener); } class MyButtonListener implements View.OnClickListener{ @Override //1.重写接口里面的方法 public void onClick(View v) { //该方法将在绑定的按钮被点击时调用,v对象为绑定控件 //使用吐司 Toast.makeText(MainActivity.this,"我被点了!",Toast.LENGTH_SHORT).show(); } } }
效果图:
-
法二:匿名内部类(使用最频繁)
布局文件同上
SecondActivity.java:
package com.example.lenovo.ui_project; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; /** * Created by LENOVO on 2018/10/27. */ //匿名内部类(使用最频繁) public class SecondActivity extends Activity { /* * 1.获取Button对象 * 2.直接调用button的setOnClickListener方法 * */ private Button btn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_linearlayout); btn=(Button)findViewById(R.id.btn01); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //当按钮点击时调用 Toast.makeText(SecondActivity.this,"我又被点了!(匿名内部类)",Toast.LENGTH_SHORT).show(); } }); } }
效果图:
-
法三:通过Activity直接添加监听器(不推荐,在代码量大的时候容易出现混乱)
ThirdActivity.java:
package com.example.lenovo.ui_project; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; /** * Created by LENOVO on 2018/10/27. */ public class ThridActivity extends Activity implements View.OnClickListener { private Button btn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_linearlayout); btn=(Button)findViewById(R.id.btn01); btn.setOnClickListener(this); } @Override public void onClick(View v) { Toast.makeText(ThridActivity.this,"我又被点了!(Activity实现接口)",Toast.LENGTH_SHORT).show(); } }
效果图:
-
通过XML实现添加监听事件(使用较少,灵活性比较差)
布局文件:(添加onclick事件)
<?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"> <Button android:id="@+id/btn01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="按钮" android:background="@mipmap/ic_launcher" android:onClick="MyButtonClick"/> </LinearLayout>
FourthActivity.java
package com.example.lenovo.ui_project; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Toast; /** * Created by LENOVO on 2018/10/27. */ public class FourthActivity extends Activity { /*实现步骤 * 1.现在XML文件中,为Button添加onclick属性 * 2.在对应的Activity中,创建一个以onclick属性值为名字的方法 * (注意: * 修饰符为public * 返回值为void * 传入参数为View类型 * ) * */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_linearlayout); } public void MyButtonClick(View v){ Toast.makeText(FourthActivity.this,"我又被点了!(XML实现)",Toast.LENGTH_SHORT).show(); } }
效果图: