前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >常用控件之Button详解

常用控件之Button详解

作者头像
下码看花
发布2019-09-02 16:59:38
1.4K0
发布2019-09-02 16:59:38
举报
文章被收录于专栏:AndroidStudio初识

前言

小伙伴们肯定都有在玩儿一些游戏,比如和平精英,在界面上展示的名字,其实就是Android中咱们上一篇介绍到的TextView控件。而今天,我们再给大家带来一个非常好玩儿的控件,这个控件可以结合咱们之前的讲到的内容做很多有趣的事情~

一、结构

public class Button extends TextView

java.lang.Object ↳ android.view.View ↳ android.widget.TextView ↳ android.widget.Button 已知直接子类 CompoundButton 已知间接子类 CheckBox, RadioButton, Switch, ToggleButton

二、典型点击用法如下

Button是Android中一个非常简单的控件,在我们平时的项目中,可以说是非常的常见,使用率也是相当高。用户可以按下或单击按钮来执行操作。

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btn_clickMe"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="我是一个按钮,快点我" />

    <ImageButton
        android:id="@+id/btn_clickImg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/ic_launcher" />
</LinearLayout>
代码语言:javascript
复制
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btnClickMe = (Button) findViewById(R.id.btn_clickMe);
        btnClickMe.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Perform action on click
                Toast.makeText(MainActivity.this, "已点中", Toast.LENGTH_SHORT).show();
            }
        });

        ImageButton btnClickImg = (ImageButton) findViewById(R.id.btn_clickImg);
        btnClickImg.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Perform action on click
                Toast.makeText(MainActivity.this, "已点中图片", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

你还可以通过实现 View.OnClickListener接口并重写 onClick方法,来设置多个点击事件

代码语言:javascript
复制
public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.btn_clickMe).setOnClickListener(this);
        findViewById(R.id.btn_clickImg).setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_clickMe:
                Toast.makeText(MainActivity.this, "已点中", Toast.LENGTH_SHORT).show();
                break;
            case R.id.btn_clickImg:
                Toast.makeText(MainActivity.this, "已点中图片", Toast.LENGTH_SHORT).show();
                break;
            default:
                break;
        }
    }
}

但是,您还可以使用 android:onClick属性为 XML布局中的按钮分配一个方法,而不是对Activity中对按钮实现onClickListener。例如:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="clickButton"
        android:text="我是一个按钮,快点我" />

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/ic_launcher"
        android:onClick="clickImg" />
</LinearLayout>

现在,当用户点击按钮时,Android系统会调用Activity的自定义(视图)方法。此方法必须是公共的,并且接受一个视图作为它的唯一参数。例如:

代码语言:javascript
复制
public class MainActivity extends AppCompatActivity {

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

    public void clickButton(View view) {
        Toast.makeText(MainActivity.this, "已点中", Toast.LENGTH_SHORT).show();
    }

    public void clickImg(View view) {
        Toast.makeText(MainActivity.this, "已点中图片", Toast.LENGTH_SHORT).show();
    }
}

最终效果如下:

三、按钮样式设置

每个按钮都使用系统的默认按钮背景进行样式化,如果您对默认按钮样式不满意,并且希望对其进行自定义以匹配应用程序的设计,那么您可以用可绘制的状态列表替换按钮的背景图像。状态列表可绘制是在XML中定义的可绘制资源,它根据按钮的当前状态更改其图像。一旦定义了一个可以用XML绘制的状态列表,就可以将它应用到具有 android:background属性的按钮上。

1.设置背景图

方法一:在xml布局里直接设置背景图

方法二:在Java代码里给 button设置背景图( setBackgroundsetBackgroundResource两种任意一种即可)

代码语言:javascript
复制
btnClickMe.setBackground(ContextCompat.getDrawable(this, R.mipmap.ic_launcher));
btnClickMe.setBackgroundResource(R.mipmap.ic_launcher);

2.设置背景色

方法一:在xml布局里直接设置背景色

方法二:在Java代码里给 button设置背景色( setBackgroundColor中以下两种方法任意一种即可)

代码语言:javascript
复制
btnClickMe.setBackgroundColor(getResources().getColor(R.color.colorAccent));
btnClickMe.setBackgroundColor(Color.parseColor("#ff0000"));

3.通过 shape设置背景样式

在drawable包下新建xml,我这里命名为 bg_btn_normal.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@color/colorAccent" />
    <corners
        android:bottomLeftRadius="10dp"
        android:bottomRightRadius="50dp"
        android:topLeftRadius="10dp"
        android:topRightRadius="50dp" />
    <stroke
        android:width="3dp"
        android:color="#99CCFF" />
</shape>
  • android:shape="rectangle" //样式为矩形(四个属性: rectangle矩形、 oval椭圆形、 line线性形状、 ring环形)
  • solid:指定内部填充色
  • corners:定义圆角 (radius全部的圆角半径 、 bottomLeftRadius左下角的圆角半径 、 bottomRightRadius右上角的圆角半径 、 topLeftRadius左上角的圆角半径 、 topRightRadius右上角的圆角半径 )
  • stroke:描边属性,可以定义描边的宽度,颜色,虚实线等( width描边的宽度、 color描边的颜色)

方法一:在xml布局里直接设置自定义 shape背景,如果想给按钮内部文字设置边距还可以自己设置 padding

方法二:在Java代码里给 button设置自定义 shape背景( setBackgroundsetBackgroundResource两种任意一种即可)

代码语言:javascript
复制
btnClickMe.setBackground(ContextCompat.getDrawable(this, R.drawable.bg_btn));
btnClickMe.setBackgroundResource(R.drawable.bg_btn);

此时,如果还想要仿iOS一样的按钮点击按下和松开效果,那么可以这样

再在drawable包下新建一个xml,我这里命名为 bg_btn_press.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@color/colorPrimary" />
    <corners
        android:bottomLeftRadius="10dp"
        android:bottomRightRadius="50dp"
        android:topLeftRadius="10dp"
        android:topRightRadius="50dp" />
    <stroke
        android:width="3dp"
        android:color="#99CCFF" />
</shape>

然后再新建一个xml,同样是在drawable包下,使用 <selector../>元素定义了一个 StateListDrawable对象,我这里命名为 bg_btn.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/bg_btn_press" android:state_pressed="true" />
    <item android:drawable="@drawable/bg_btn_normal" android:state_focused="true" />
    <item android:drawable="@drawable/bg_btn_normal" />
</selector>

4.设置显示隐藏

方法一:在xml布局里直接设置

代码语言:javascript
复制
android:visibility="invisible"

方法二:在Java代码里给 button设置

代码语言:javascript
复制
btnClickMe.setVisibility(View.VISIBLE);

下面有清楚的布局讲述

其中 visibility还有三种属性

  • VISIBLE(view可见,占据屏幕区域)、
  • INVISIBLE(view不可见,占据屏幕区域)、
  • GONE(view不可见,不占屏幕空间,原先占有的区域被其他view占据,原先布局会发生变化)。

5.给button设置某一边设置图片

方法一:在xml布局里直接设置

方法二:在Java代码里给 button设置

代码语言:javascript
复制
Button btnClickMe = findViewById(R.id.btn_clickMe);
//代码设置drawableLeft资源图片
Drawable drawableLeft = getResources().getDrawable(R.mipmap.ic_launcher);
btnClickMe.setCompoundDrawablesWithIntrinsicBounds(drawableLeft, null, null, null);
//代码设置drawable和view之间的距离
btnClickMe.setCompoundDrawablePadding(4);
  • drawableLeft左图标
  • drawableRight右图标
  • drawableTop上图标
  • drawableBottom下图标
  • drawablePadding图标与文字的间距
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 下码看花 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 一、结构
      • 二、典型点击用法如下
        • 三、按钮样式设置
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档