Android应用开发(9)图像按钮(ImageButton)(暂存)

Android应用开发学习笔记——目录索引

 参考android官网:https://developer.android.com/reference/android/widget/ImageButton

 一、 ImageView介绍

ImageButtonImageView派生而来(非继承自Button),ImageButton是显示图片的图像按钮。

ImageButton的图像由XML 中的属性元素android:src 指定或方法 ImageView.setImageResource(int)

如要删除标准按钮背景图像,请自定义背景图像或将背景颜色设置为透明。

要指示不同的按钮状态(聚焦、选择等),可以为每个状态定义不同的图像。例如,默认情况下为蓝色图像,聚焦时为橙色图像,按下时为黄色图像。实现此目的的一个简单方法是使用 XML 可绘制“选择器”。例如:

 <?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:state_pressed="true"
           android:drawable="@drawable/button_pressed" /> <!-- pressed -->
     <item android:state_focused="true"
           android:drawable="@drawable/button_focused" /> <!-- focused -->
     <item android:drawable="@drawable/button_normal" /> <!-- default -->
 </selector>

将 XML 文件保存在项目res/drawable/文件夹中,然后将其引用为 ImageButton 源的可绘制对象(在属性中 android:src)。Android 会根据按钮的状态和 XML 中定义的相应图像自动更改图像。

元素的顺序<item>很重要,因为它们是按顺序求值的。这就是为什么“正常”按钮图像出现在最后,因为它只会在之后应用android:state_pressed并且android:state_focused都被评估为 false。

请参阅Buttons  指南。

ImageButton和Button之间的区别有:

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

ImageButton的使用场合:在某些场合,有的字符无法由输入法打出来,或者某些文字以特殊字体展示,就适合使用ImageButton例如:如特殊的数学公式符号等。

ImageButtonImageView之间的区别有

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

二、ImageButton同时展示文本与图像

同时展示文本与图像的可能途径包括:

  1. 利用LinearLayoutImageViewTextView组合布局
  2. 通过按钮控件Buttondrawable***属性设置文本周围的图标。
属性描述
drawableTop指定文字上方的图片
drawableBottom指定文字下方的图片
drawableLeft指定文字左边的图片
drawableRight指定文字右边的图片
drawablePadding指定图片与文字的间距

mTextView = (TextView) findViewById(R.id.textView);

Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        String string = String.format("%s: 你点击了按键:%s",
                Utils.getNowTimeMs(), ((Button) v).getText());
        mTextView.setText(string);
    }
});

或者


mTextView = (TextView) findViewById(R.id.textView);

Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new MyOnClickListener());

class MyOnClickListener implements View.OnClickListener {
    @Override
    public void onClick(View v) {
        String string = String.format("%s: 你点击了按键:%s",
                Utils.getNowTimeMs(), ((Button) v).getText());
        mTextView.setText(string);
    }
}

但是如果一个activity中有许多按键,给每一个按键都定义自己的监听器,非常的费时费力。

更好的方法的注册统一的监听,在当前activity实现View.OnClickListener接口


public class MainActivity extends AppCompatActivity 
        implements View.OnClickListener {
    private TextView mTextView;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Log.i(TAG, "onCreate: " + Utils.getNowDateTime());
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(this);
        
        mTextView = (TextView) findViewById(R.id.textView);
    }
    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.button) {
            String string = String.format("%s: 你点击了按键:%s",
                    Utils.getNowTimeMs(), ((Button) v).getText());
            mTextView.setText(string);
        }
    }
}
  1. 设置长按事件监听

按键按住超过500ms,触发长按事件,和设置点击事件类似,可通过setOnLongClickListener方法设置长按监听,具体代码如下:


public class MainActivity extends AppCompatActivity 
        implements View.OnLongClickListener {
    private TextView mTextView;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Log.i(TAG, "onCreate: " + Utils.getNowDateTime());
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button buttonLongClick = (Button) findViewById(R.id.longClickButton);
        buttonLongClick.setOnLongClickListener(this);
        
        mTextView = (TextView) findViewById(R.id.textView);
    }
    
    @Override
    public boolean onLongClick(View v) {
        if (v.getId() == R.id.longClickButton) {
            String string = String.format("%s: 你长按了按键:%s",
                    Utils.getNowTimeMs(), ((Button) v).getText());
            mTextView.setText(string);
            return true;
        }
        return false;
    }
}

三、Button的禁用与恢复

在实际业务中,按钮通常拥有两种状态,即不可用状态与可用状态,它们在外观和功能上的区别如下:

(1)不可用按钮:按钮不允许点击,即使点击也没反应,同时按钮变为灰色;

(2)可用按钮:按钮允许点击,点击按钮会触发点击事件;

可以通过xml的android:enabled属性和Java Button控件的setEnabled方法控制。

  1. xml:android:enabled属性值为true时表示允许点击,为false时表示不允许点击。

<Button
    android:id="@+id/button_test"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="5dp"
    android:enabled="false"
    android:text="测试按键" />
  1. Java:Button控件的setEnabled()方法控制


public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Button mButtonEnable, mButtonDisable, mButtonTest;
    private TextView mTextViewForTest;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Log.i(TAG, "onCreate: " + Utils.getNowDateTime());
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 启用、禁用测试
        mButtonEnable = (Button) findViewById(R.id.button_enable);
        mButtonDisable = (Button) findViewById(R.id.button_disable);
        mButtonTest = (Button) findViewById(R.id.button_test);
        mButtonEnable.setOnClickListener(this);
        mButtonDisable.setOnClickListener(this);
        mButtonTest.setOnClickListener(this);
        mTextViewForTest = (TextView) findViewById(R.id.textViewForTest);
    }

    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.button_enable) {
            String string = String.format("%s: 你点击了按键:%s, 请观察【测试按键】的状态",
                    Utils.getNowTimeMs(), ((Button) v).getText());
            mTextViewForTest.setText(string);
            mButtonTest.setEnabled(true);
        } else if (v.getId() == R.id.button_disable) {
            String string = String.format("%s: 你点击了按键:%s, 请观察【测试按键】的状态",
                    Utils.getNowTimeMs(), ((Button) v).getText());
            mTextViewForTest.setText(string);
            mButtonTest.setEnabled(false);
        } else if (v.getId() == R.id.button_test) {
            String string = String.format("%s: 你点击了按键:%s",
                    Utils.getNowTimeMs(), ((Button) v).getText());
            mTextViewForTest.setText(string);
        }
    }
}

四、Button控件测试程序

java:

MainActivity.java

四、测试程序

完整源码

百度网盘链接:百度网盘 请输入提取码 提取码:test

ActivityLifecycleTest目录

点此查看Android应用开发学习笔记的完整目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liuzl_2010

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值