• 【Android】-- 如何使用按钮和图片(点击事件、长按点击、同时展示文本和图像、ImageView)


    目录

    一、按钮控件Button

    按钮控件button由TextView派生而来,它们的区别:

    按钮控件的新增属性

    二、点击事件和长按事件

    有两种常用的监听器:

    1、点击事件

     2、长按点击事件

     三、禁用和恢复按钮

    按钮通常有两种状态,即不可用状态与可用状态,区别如下:

     四、图像视图ImageView

    图像视图展示的图片通常位于res/drawable目录,设置方式有两种:

     图像视图的缩放类型

    五、图像按钮ImageButton

    ImageButton和Button的区别:

    ImageButton的使用场合

    ImageButton和ImageView之间的区别有:

    六、同时展示文本与图像

    实现方式:

     


    一、按钮控件Button

    按钮控件button由TextView派生而来,它们的区别:

    • Button拥有默认的按钮背景,而TextView默认无背景。
    • Button的内部文本默认居中对齐,而TextView的内部文本默认靠左对齐。
    • Button默认将英文字母转为大写,而TextView保持原始大小写。

    按钮控件的新增属性

    与TextView相比,Button增加两个新属性:

    • textAllCaps属性,指定了是否将英文字母转为大写,为true是表示自动转为大写,false表示不自动,默认为true。
    • onClick属性,它用来接管用户的点击动作,指定了点击按钮时要触发哪个方法。

    例:

    1. <TextView
    2. android:layout_width="match_parent"
    3. android:layout_height="wrap_content"
    4. android:text="TextView"/>
    5. <Button
    6. android:layout_width="match_parent"
    7. android:layout_height="wrap_content"
    8. android:text="Button"
    9. android:textColor="@color/black"
    10. android:textSize="17sp"/>

    二、点击事件和长按事件

    监听器:专门监听控件的动作行为,只有控件发生了指定的动作,监听器才会触发开关去执行对应的代码逻辑。

    有两种常用的监听器:

    • 点击监听器:通过setOnClickListener方法设置,按钮被按住少于500ms时,触发点击事件。
    • 长按监听器:通过setOnLongClickListener方法设置,按钮被按住超过500ms,触发。

    1、点击事件

    例:

    XML

    1. <Button
    2. android:id="@+id/btn_click_single"
    3. android:layout_width="match_parent"
    4. android:layout_height="wrap_content"
    5. android:text="点击事件"
    6. android:textColor="#000000"
    7. android:textSize="15sp"/>
    8. <TextView
    9. android:id="@+id/tv_result"
    10. android:layout_width="match_parent"
    11. android:layout_height="wrap_content"
    12. android:padding="5dp"
    13. android:gravity="center"
    14. android:textColor="#000000"
    15. android:textSize="15sp"
    16. android:text="查看点击结果"/>

    java

    1. public class ButtonClickActivity extends AppCompatActivity {
    2. private TextView tv_result;
    3. @Override
    4. protected void onCreate(Bundle savedInstanceState) {
    5. super.onCreate(savedInstanceState);
    6. setContentView(R.layout.activity_button_click);
    7. tv_result = findViewById(R.id.tv_result);//保存id为tv_result的视图
    8. Button btn_click_single = findViewById(R.id.btn_click_single);
    9. btn_click_single.setOnClickListener(new MyOnClickListener(tv_result));//监听器
    10. }
    11. static class MyOnClickListener implements View.OnClickListener{
    12. private final TextView tv_result;
    13. public MyOnClickListener(TextView tv_result){//构造函数
    14. this.tv_result = tv_result;
    15. }
    16. public void onClick(View v){
    17. String desc = String.format("您点击了按钮");
    18. tv_result.setText(desc);
    19. }
    20. }
    21. }

    点击事件按钮

     2、长按点击事件

    例:

    xml文件同上;

    java

    1. public class ButtonClickActivity extends AppCompatActivity {
    2. @Override
    3. protected void onCreate(Bundle savedInstanceState) {
    4. super.onCreate(savedInstanceState);
    5. setContentView(R.layout.activity_button_click);
    6. TextView tv_result = findViewById(R.id.tv_result);
    7. Button btn_click_single = findViewById(R.id.btn_click_single);
    8. btn_click_single.setOnLongClickListener(v -> {//v -> 内部匿名类的替换形式
    9. String desc = String.format("您长按点击了按钮");
    10. tv_result.setText(desc);
    11. return true;//返回true则表示消耗掉长按,不再往上级视图传递,为false则长按会涉及到上级视图
    12. });
    13. }
    14. }

     三、禁用和恢复按钮

    按钮通常有两种状态,即不可用状态与可用状态,区别如下:

    • 不可用按钮:按钮不允许点击,即使点击也没有反应,同时按钮文字为灰色;
    • 可用按钮:允许点击,点击触发点击事件,同时按钮文字为正常。

    是否允许点击由enabled属性控制,属性值为true时表示允许点击,false则不允许。

    例:

    xml

    1. <LinearLayout
    2. android:layout_width="match_parent"
    3. android:layout_height="wrap_content"
    4. android:orientation="horizontal">
    5. <Button
    6. android:id="@+id/btn_enable"
    7. android:layout_width="0dp"
    8. android:layout_weight="1"
    9. android:layout_height="wrap_content"
    10. android:text="启用按钮"
    11. android:textColor="#000000"
    12. android:textSize="17sp"/>
    13. <Button
    14. android:id="@+id/btn_disable"
    15. android:layout_width="0dp"
    16. android:layout_weight="1"
    17. android:layout_height="wrap_content"
    18. android:text="禁用按钮"
    19. android:textColor="#000000"
    20. android:textSize="17sp"/>
    21. </LinearLayout>
    22. <Button
    23. android:id="@+id/btn_test"
    24. android:layout_width="match_parent"
    25. android:layout_height="wrap_content"
    26. android:text="按钮"
    27. android:textColor="#000000"
    28. android:textSize="17sp"
    29. android:enabled="false"/>
    30. <TextView
    31. android:id="@+id/tv_result"
    32. android:layout_width="match_parent"
    33. android:layout_height="wrap_content"
    34. android:text="你点击了按钮"
    35. android:textColor="#000000"
    36. android:textSize="17sp"/>

    java

    1. public class ButtonEnableActivity extends AppCompatActivity implements View.OnClickListener {
    2. private TextView tv_result;
    3. private Button btn_test;
    4. @Override
    5. protected void onCreate(Bundle savedInstanceState) {
    6. super.onCreate(savedInstanceState);
    7. setContentView(R.layout.activity_button_enable);
    8. Button btn_enable = findViewById(R.id.btn_enable);
    9. Button btn_disable = findViewById(R.id.btn_disable);
    10. btn_test = findViewById(R.id.btn_test);
    11. tv_result = findViewById(R.id.tv_result);
    12. btn_enable.setOnClickListener(this);
    13. btn_disable.setOnClickListener(this);
    14. btn_test.setOnClickListener(this);
    15. }
    16. public void onClick(View v){
    17. switch (v.getId()){
    18. case R.id.btn_enable:
    19. btn_test.setEnabled(true);
    20. break;
    21. case R.id.btn_disable:
    22. btn_test.setEnabled(false);
    23. break;
    24. case R.id.btn_test:
    25. String desc = String.format("点击了按钮");
    26. tv_result.setText(desc);
    27. break;
    28. }
    29. }
    30. @Override
    31. public void onPointerCaptureChanged(boolean hasCapture) {
    32. super.onPointerCaptureChanged(hasCapture);
    33. }
    34. }

     四、图像视图ImageView

    图像视图展示的图片通常位于res/drawable目录,设置方式有两种:

    • 在XML文件中,通过属性android:src设置图片资源,属性值格式形如:@drawable/图片名称(无拓展名)
    • 在java代码调用setImageResource设置图片资源,格数如:R.drawable.图片名称(无拓展名)

    例:

    xml

    1. <ImageView
    2. android:id="@+id/iv_scale"
    3. android:layout_width="match_parent"
    4. android:layout_height="220dp"
    5. android:layout_marginTop="5dp"/>

    java

    1. public class ImageScaleActivity extends AppCompatActivity {
    2. @Override
    3. protected void onCreate(Bundle savedInstanceState) {
    4. super.onCreate(savedInstanceState);
    5. setContentView(R.layout.activity_image_scale);
    6. ImageView iv_scale = findViewById(R.id.iv_scale);
    7. iv_scale.setImageResource(R.drawable.mc);
    8. }
    9. }

     图像视图的缩放类型

    ImageView本身默认图片居中显示,若要改变图片的显示方式,通过scaleType属性设定,属性取值如下:

     java类中设置

    iv_scale.setScaleType(ImageView.ScaleType.CENTER);

    xml

    android:scaleType="center"

    五、图像按钮ImageButton

    ImageButton是显示图片的图像按钮,但它继承自ImageView,而非继承Button。

    ImageButton和Button的区别:

    • Button既可显示文本也可显示图片,ImageButton只能显示图片不能显示文本。
    • Button通过背景设置的图像会拉伸变形,ImageButton的图像可按比例缩放。
    • Button只能靠背景显示一张图片,而ImageButton可分别在前景和背景显示,可实现两张图片叠加效果。

    ImageButton的使用场合

    在某些情况,有的字符无法由输入法打出来,或某些字体以特殊字体展示。

    ImageButton和ImageView之间的区别有:

    • ImageButton有默认的按钮背景,ImageView默认无背景。
    • ImageButton默认的缩放类型为center,ImageView默认为fitCenter。

    六、同时展示文本与图像

    实现方式:

    • 利用LinearLayout对ImageView和TextView组合布局。
    • 通过按钮控件Button的drawable属性设置文本周围的图标。
    • drawableTop:指定文字上方的图片。
    • drawableBottom:指定文字下方的图片。
    • drawableLeft:文字左边的图片。
    • drawableRight:文字右边的图片。
    • drawablePadding:图片与文字的间距。

    例:

    1. <Button
    2. android:layout_width="wrap_content"
    3. android:layout_height="wrap_content"
    4. android:text="图标在左"
    5. android:drawableLeft="@drawable/ic_launcher_background"/>

     


  • 相关阅读:
    【无需卸载,丝滑关闭奇安信天擎开机自启动(步骤超简单)】
    使用匿名函数在Golang中的好处
    得物云原生全链路追踪Trace2.0架构实践
    Prompt-to-Prompt Image Editing with Cross Attention Control
    【C++】:静态转换(static_cast)与动态类型转换(dynamic_cast)
    【毕业设计】机器视觉停车位识别检测系统 - python 深度学习
    数据仓库之雪花模型
    附录3-form标签常用属性
    前端面试题日常练-day74 【面试题】
    LeetCode54.螺旋矩阵
  • 原文地址:https://blog.csdn.net/Tir_zhang/article/details/126794900