当前位置: 首页 > news >正文

【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属性,它用来接管用户的点击动作,指定了点击按钮时要触发哪个方法。

例:

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button"
        android:textColor="@color/black"
        android:textSize="17sp"/>

二、点击事件和长按事件

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

有两种常用的监听器:

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

1、点击事件

例:

XML

   <Button
        android:id="@+id/btn_click_single"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="点击事件"
        android:textColor="#000000"
        android:textSize="15sp"/>

    <TextView
        android:id="@+id/tv_result"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="5dp"
        android:gravity="center"
        android:textColor="#000000"
        android:textSize="15sp"
        android:text="查看点击结果"/>

java

public class ButtonClickActivity extends AppCompatActivity {
    private TextView tv_result;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_button_click);

        tv_result = findViewById(R.id.tv_result);//保存id为tv_result的视图
        Button btn_click_single = findViewById(R.id.btn_click_single);
        btn_click_single.setOnClickListener(new MyOnClickListener(tv_result));//监听器
    }
    static class MyOnClickListener implements View.OnClickListener{
        private final TextView tv_result;
        public MyOnClickListener(TextView tv_result){//构造函数
            this.tv_result = tv_result;
        }
        public void onClick(View v){
            String desc = String.format("您点击了按钮");
            tv_result.setText(desc);
        }
    }
}

点击事件按钮

 2、长按点击事件

例:

xml文件同上;

java

public class ButtonClickActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_button_click);

        TextView tv_result = findViewById(R.id.tv_result);
        Button btn_click_single = findViewById(R.id.btn_click_single);
        btn_click_single.setOnLongClickListener(v -> {//v -> 内部匿名类的替换形式
            String desc = String.format("您长按点击了按钮");
            tv_result.setText(desc);
            return true;//返回true则表示消耗掉长按,不再往上级视图传递,为false则长按会涉及到上级视图
        });
    }
}

 三、禁用和恢复按钮

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

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

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

例:

xml

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btn_enable"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:text="启用按钮"
            android:textColor="#000000"
            android:textSize="17sp"/>
        <Button
            android:id="@+id/btn_disable"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:text="禁用按钮"
            android:textColor="#000000"
            android:textSize="17sp"/>
    </LinearLayout>
    <Button
        android:id="@+id/btn_test"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="按钮"
        android:textColor="#000000"
        android:textSize="17sp"
        android:enabled="false"/>
    <TextView
        android:id="@+id/tv_result"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="你点击了按钮"
        android:textColor="#000000"
        android:textSize="17sp"/>

java


public class ButtonEnableActivity extends AppCompatActivity implements View.OnClickListener {
    private TextView tv_result;
    private Button btn_test;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_button_enable);

        Button btn_enable = findViewById(R.id.btn_enable);
        Button btn_disable = findViewById(R.id.btn_disable);
        btn_test = findViewById(R.id.btn_test);
        tv_result = findViewById(R.id.tv_result);

        btn_enable.setOnClickListener(this);
        btn_disable.setOnClickListener(this);
        btn_test.setOnClickListener(this);

    }
    public void onClick(View v){
        switch (v.getId()){
            case R.id.btn_enable:
                btn_test.setEnabled(true);
                break;
            case R.id.btn_disable:
                btn_test.setEnabled(false);
                break;
            case R.id.btn_test:
                String desc = String.format("点击了按钮");
                tv_result.setText(desc);
                break;
        }
    }

    @Override
    public void onPointerCaptureChanged(boolean hasCapture) {
        super.onPointerCaptureChanged(hasCapture);
    }
}

 四、图像视图ImageView

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

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

例:

xml

    <ImageView
        android:id="@+id/iv_scale"
        android:layout_width="match_parent"
        android:layout_height="220dp"
        android:layout_marginTop="5dp"/>

java

public class ImageScaleActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_image_scale);
        ImageView iv_scale = findViewById(R.id.iv_scale);
        iv_scale.setImageResource(R.drawable.mc);
    }
}

 图像视图的缩放类型

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:图片与文字的间距。

例:

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="图标在左"
        android:drawableLeft="@drawable/ic_launcher_background"/>

 


相关文章:

  • 什么是文件格式的幻数
  • 【数据结构】绪论
  • C++的4种管理数据内存的方式
  • 中秋节的月亮怎么拍?不用手机和相机,程序员照样能拍出大片的感觉
  • Windows性能监控工具ypeperf
  • Python基础语法(二)—— 条件语句(if)+循环语句(for+while)
  • webpack基础使用
  • 基于蜜蜂算法求解电力系统经济调度(Matlab代码实现)
  • 我的vue的学习之旅
  • 【新学期、新Flag】快来参与活动、获取丰厚的奖励吧
  • Selenium操作已经打开的Chrome(只怪自己尝试的太迟)
  • 都这麽大了还不了解防火墙?
  • Vue的入门学习
  • AI作画飞入平民百姓家——stable diffusion初体验
  • [基于瑞芯微RV1126调试RTL8818FU WIFI模组支持STA和AP模式]
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 【Linux系统编程】快速查找errno错误码信息
  • bootstrap创建登录注册页面
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • GitUp, 你不可错过的秀外慧中的git工具
  • JavaScript 基本功--面试宝典
  • mockjs让前端开发独立于后端
  • Netty 4.1 源代码学习:线程模型
  • SpriteKit 技巧之添加背景图片
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • 前端性能优化——回流与重绘
  • 微信支付JSAPI,实测!终极方案
  • 我的zsh配置, 2019最新方案
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • ​【已解决】npm install​卡主不动的情况
  • ​2020 年大前端技术趋势解读
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • # centos7下FFmpeg环境部署记录
  • ###C语言程序设计-----C语言学习(3)#
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (C#)一个最简单的链表类
  • (Note)C++中的继承方式
  • (rabbitmq的高级特性)消息可靠性
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (图)IntelliTrace Tools 跟踪云端程序
  • (原)Matlab的svmtrain和svmclassify
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)jdk与jre的区别
  • (转)Mysql的优化设置
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .net 设置默认首页
  • .NET 使用 XPath 来读写 XML 文件