Android Button及其子类(上)

简介: Button实例基础版Button进阶版Button1.在res/drawable目录下新建文件 bg_btn_frame_gradient.xml2.在res/drawable目录下新建文件 bg_btn_selector_bg.xml3.修改布局文件添加两个Buttonxml小结

开局一张图


image.png

本文旨在介绍Button和他的 子类


微信图片_20220519182124.png


Button


       Button 用户可以点击或长按等操作的用户界面元素,具有正常状态和点击状态,Button 继承自 TextView ,所以可以使用 TextView 的那些属性。


       实际开发中,无非是对按钮的几个状态做相应的操作,比如:按钮按下的时候 用一种颜色,弹起又一种颜色,或者按钮不可用的时候一种颜色这样。


实例


       咱们来写有1个基础版Button,2个进阶版Button。


基础版Button


       在布局文件中添加一个Button

 <Button
        android:id="@+id/btn_1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="基本Button" />


  不仅样式丑陋而且文字显示为大写BUTTON。


进阶版Button


       在基础版Button上新增一些xml属性。


1.在res/drawable目录下新建文件 bg_btn_frame_gradient.xml


<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <!--radius四个圆角统一设置,也可以单独对某一个圆角设置。例:topLeftRadius-->
    <corners android:radius="8dp"/>
    <!--边框宽度width、颜色color-->
    <stroke android:width="1dp" android:color="@color/color_ff0000" />
    <gradient
        android:startColor="@color/color_188FFF"
        android:centerColor="@color/color_FF773D"
        android:endColor="@color/color_ff0000"
        android:type="linear"
        />
</shape>


2.在res/drawable目录下新建文件 bg_btn_selector_bg.xml


1.<?xml version ="1.0" encoding ="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!--简单版仅颜色,直接设置android:radius="8dp"无效-->
    <!--未点击显示颜色-->
    <item android:drawable="@color/color_FF773D" android:state_pressed="false" />
    <!--点击显示颜色-->
    <item android:drawable="@color/color_188FFF" android:state_pressed="true" />
    <!--复杂版带圆角-->
    <!--未点击显示颜色-->
    <item android:state_pressed="false">
        <shape>
            <solid  android:color="@color/color_FF773D" />
            <corners android:radius="8dp" />
        </shape>
    </item>
    <!--点击显示颜色-->
    <item android:state_pressed="true">
        <shape>
            <solid  android:color="@color/color_188FFF" />
            <corners android:radius="8dp" />
        </shape>
    </item>
</selector>


3.修改布局文件添加两个Button


<Button
        android:id="@+id/btn_2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/dimen_20"
        android:background="@drawable/bg_btn_frame_gradient"
        android:padding="@dimen/dimen_10"
        android:text="背景色渐变的Button"
        android:textAllCaps="false"
        android:textColor="@color/white"
        android:textSize="@dimen/text_size_18" />
    <Button
        android:id="@+id/btn_3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/dimen_20"
        android:background="@drawable/bg_btn_selector_bg"
        android:onClick="btn3OnClick"
        android:padding="@dimen/dimen_10"
        android:textAllCaps="false"
        android:text="带按下效果的Button"
        android:textColor="@color/white"
        android:textSize="@dimen/text_size_18" />


咱们看运行效果


image.png


xml小结


       此时已经完成了上面的效果图。 我们将 Button 的 android:background 属性设置为该 drawable 资源即可轻松实现按下 按钮时不同的按钮颜色或背景


  • btn_2因为直接使用drawable,并且未使用selector。所以无点击效果。不管点击还是未点击「始终显示渐变色」。


StateListDrawable 是 Drawable 资源的一种,可以根据不同的状态,设置不同的图片效果,关键节点 < selector >


  • btn_3使用了selector,对item标签下android:state_pressed进行不同状态的设置背景色和圆角。根据控件是否被按下展示(color_FF773D/color_188FFF)


交互事件


       Button的核心还是在于和用户的交互,否则使用TextView即可。


1.Activity 实现 View.OnClickListener方法


public class ButtonActivity extends AppCompatActivity implements View.OnClickListener {
    private Button btn_1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.view_button);//加载布局文件
        initViewButton();
    }
    private void initViewButton(){
        btn_1 = findViewById(R.id.btn_1);
        btn_1.setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btn_1:
                Toast.makeText(this,"btn_1点击事件",Toast.LENGTH_SHORT).show();
                break;
            default:
                break;
        }
    }
}


2.在布局文件中声明


  • 给button添加 android:onClick="btn3OnClick"属性
  • 在activity中添加对应名称的方法,满足以下条件
  • 方法的修饰符是 public;
  • 返回值是 void 类型;
1.    //不需要关联控件
    public void btn3OnClick(View view){
        Toast.makeText(this,"btn_3点击事件",Toast.LENGTH_SHORT).show();
    }


3.匿名内部类实现


       附送一个长按匿名内部类,需要注意的是「onLongClick」返回「false」会继续「执行onClick事件」,如果返回true,则不执行onClick事件。


btn_2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(ButtonActivity.this,"btn_2点击事件",Toast.LENGTH_SHORT).show();
            }
        });
        btn_2.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                Toast.makeText(ButtonActivity.this,"btn_2长按点击事件",Toast.LENGTH_SHORT).show();
                return false;
            }
        });


4.内部类实现


//使用
    btn_1.setOnClickListener(new MyOnClickListener());
    //内部类实现OnClickListener接口
    class MyOnClickListener implements View.OnClickListener{
        @Override
        public void onClick(View v) {
            Toast.makeText(ButtonActivity.this,"btn_1点击事件MyOnClickListener",Toast.LENGTH_SHORT).show();
        }
    }


交互事件小结


  • Button的setOnClickListener优先级比xml中android:onClick高,如果同时设置点击事件,只有setOnClickListener有效。


  • TextView也可以实现onClick事件,如果部分Button使用麻烦可以考虑使用TextView来代替。


Button显示字母大写


       解决方案:设置属性android:textAllCaps="false"即可解决


Button设置backgroud无效


       解决方案:默认的颜色设置来自于res/values/themes.xml。


       将里面的主题parent="Theme.MaterialComponents.DayNight.DarkActionBar"改为(其他主题也可以)parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge"。


Button点击文字变色


方法一


       定义一个drawable文件,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="@color/white"></item>
    <item android:color="@color/black"></item>
</selector>


方法二


       1.首先你要在你的color文件下加入几个你需要的色值,注意不同的是不是一般的color标签,而是drawable标签,代码如下:


<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="color_ff0000">#ff0000</color>
    <drawable name="drawable_color_black">#000000</drawable>
    <drawable name="drawable_color_white">#FFFFFF</drawable>
</resources>


2.定义一个drawable文件,就和正常的selector文件差不多,唯一的区别就是把drawable字段变成color在里面引入你刚刚定义的颜色,代码如下:


<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="false" android:state_enabled="true" android:state_pressed="false"
        android:color="@drawable/drawable_color_black" />
    <item android:state_enabled="false" android:color="@drawable/drawable_color_black" />
    <item android:state_pressed="true" android:color="@drawable/drawable_color_white" />
    <item android:state_focused="true"  android:color="@drawable/drawable_color_white" />
</selector>


把drawable文件设置为textColor选项就可以了。


以上就是本文Button的全部内容,咱们下面看看他的子类。

相关文章
|
6月前
|
XML Java Android开发
15. 【Android教程】按钮 Button/ImageButton
15. 【Android教程】按钮 Button/ImageButton
91 2
|
7月前
|
XML Android开发 数据格式
Android下自定义Button样式
Android下自定义Button样式
51 3
|
XML Android开发 数据格式
Android中利用shape属性自定义设置Button按钮
Android中利用shape属性自定义设置Button按钮
265 0
|
Android开发
Android button 点击跳转页面
Android button 点击跳转页面
Android button 点击跳转页面
|
XML Android开发 数据格式
Android Button 属性介绍与使用
Android Button 属性介绍与使用
321 0
|
Android开发
#5,Android Studio Android 按钮 button
#5,Android Studio Android 按钮 button
|
Android开发
Android Button 设置 android:background=“@drawable/xxx“ 无效
Android Button 设置 android:background=“@drawable/xxx“ 无效
183 0
|
Android开发
Android开发中Button背景颜色不能修改问题及解决方法
Android开发中Button背景颜色不能修改问题及解决方法
1812 0
|
XML 程序员 Android开发
【Android开发】三种方法实现Button点击事件响应
【Android开发】三种方法实现Button点击事件响应
536 0
【Android开发】三种方法实现Button点击事件响应
|
XML Android开发 数据格式
Android ImageView及其子类 介绍+实例(下)
ImageButton 什么是ImageButton 通过实例了解ImageButton 1、创建布局文件 运行效果如下: ImageButton灰色边框的产生原因和解决方案 QuickContactBadge 什么是QuickContactBadge QuickContactBadge的调用方法 通过实例了解QuickContactBadge 1、创建布局文件 2、让QuickContactBadge与特定联系人建立联系 3、运行效果
222 0
Android ImageView及其子类 介绍+实例(下)