Android控件——Button与ImageView

1. Button

1.1 Button 基本使用

Button是程序用于和用户交互的重要控件,可配置的属性与TextView相似。

  • 系统会对Button中的所有英文字母自动进行大写转换,可以使用如下配置禁止这一默认特性:

    android:textAllCaps="false"
    
  • 可以为Button注册一个监听器,每当点击按钮就会执行监听器的onClick()方法。前述文档都是采用匿名类的方式注册监听器,也可以使用接口的方式。

  public class MainActivity extends AppCompatActivity implements View.OnClickListener {
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          Button button = (Button) findViewById(R.id.button);
          button.setOnClickListener(this);
      }
  
      @Override
      public void onClick(View v) {
          switch (v.getId()) {
              case R.id.button:
                  break;
              default:
                  break;
          }
      }
  }

1.2 StateListDrawable简介

StateListDrawable是Drawable资源的一种,可以根据不同的状态,设置不同的图片效果,关键节点 < selector >,我们只需要将Button的background属性设置为该drawable资源即可轻松实现,按下 按钮时不同的按钮颜色或背景!

对于StateListDrawable,可以设置的属性有:

  • drawable:引用的Drawable位图,我们可以把他放到最前面,就表示组件的正常状态~
  • state_focused:是否获得焦点
  • state_window_focused:是否获得窗口焦点
  • state_enabled:控件是否可用
  • state_checkable:控件可否被勾选,eg:checkbox
  • state_checked:控件是否被勾选
  • state_selected:控件是否被选择,针对有滚轮的情况
  • state_pressed:控件是否被按下
  • state_active:控件是否处于活动状态,eg:slidingTab
  • state_single:控件包含多个子控件时,确定是否只显示一个子控件
  • state_first:控件包含多个子控件时,确定第一个子控件是否处于显示状态
  • state_middle:控件包含多个子控件时,确定中间一个子控件是否处于显示状态
  • state_last:控件包含多个子控件时,确定最后一个子控件是否处于显示状态

示例:按下按钮时不同的按钮颜色或背景

  • 在drawable文件夹下新建btn_bg1.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/ic_course_bg_fen"/>
    <item android:state_enabled="false" android:drawable="@drawable/ic_course_bg_pressed"/>
    <item android:drawable="@drawable/ic_course_bg_cheng"/>
</selector>
  • 修改布局文件activity_main.xml
<Button
        android:id="@+id/btnOne"
        android:layout_width="match_parent"
        android:layout_height="64dp"
        android:background="@drawable/btn_bg1"
        android:text="按钮"/>
    
    
    <Button
        android:id="@+id/btnTwo"
        android:layout_width="match_parent"
        android:layout_height="64dp"
        android:text="按钮不可用"/>
  • 修改MainActivity.java代码
public class MainActivity extends AppCompatActivity {

    private Button btnOne,btnTwo;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnOne = (Button) findViewById(R.id.btnOne);
        btnTwo = (Button) findViewById(R.id.btnTwo);
        btnTwo.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if(btnTwo.getText().toString().equals("按钮不可用")){
                    btnOne.setEnabled(false);
                    btnTwo.setText("按钮可用");
                }else{
                    btnOne.setEnabled(true);
                    btnTwo.setText("按钮不可用");
                }
            }
        });
    }

}

2. ImageView

ImageView是用于在界面上展示图片的一个控件。图片通常都放在以drawable开头的目录下。

2.1 src与background属性区别

<ImageView
        android:id="@+id/image_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/img_1" />

使用android:src属性给ImageView指定了一张图片,由于宽高未知,最好选择wrap_content。

ImageView有两个可以设置图片的属性,分别是:src和background

常识:

  1. background通常指的都是背景,而src指的是内容!!
  2. 当使用src填入图片时,是按照图片大小直接填充,并不会进行拉伸,而使用background填入图片,则是会根据ImageView给定的宽度来进行拉伸

1.2 adjustViewBounds

ImageView为我们提供了adjustViewBounds属性,用于设置缩放时是否保持原图长宽比! 单独设置不起作用,需要配合maxWidthmaxHeight属性一起使用!而后面这两个属性 也是需要adjustViewBounds为true才会生效的

  • android:maxHeight:设置ImageView的最大高度
  • android:maxWidth:设置ImageView的最大宽度
<ImageView
        android:id="@+id/imageView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5px"
        android:adjustViewBounds="true"
        android:maxHeight="200px"
        android:maxWidth="200px"
        android:src="@mipmap/meinv" />

1.3 scaleType

如果想要在代码中动态设置ImageView:

前景(对应src属性):setImageDrawable( );
背景(对应background属性):setBackgroundDrawable( );

android:scaleType用于设置显示的图片如何缩放或者移动以适应ImageView的大小 Java代码中可以通过imageView.setScaleType(ImageView.ScaleType.CENTER);来设置~ 可选值如下:

  • fitXY:

    对图像的横向与纵向进行独立缩放,使得该图片完全适应ImageView,但是图片的横纵比可能会发生改变

  • fitStart:

    保持纵横比缩放图片,直到较长的边与Image的边框相等,缩放完成后将图片放在ImageView的左上角

  • fitCenter:

    同上,缩放后放于中间;

  • fitEnd:

    同上,缩放后放于右下角;

  • center:

    保持原图的大小,显示在ImageView的中心。当原图的size大于ImageView的size,超过部分裁剪处理

  • centerCrop:

    保持横纵比缩放图片,直到完全覆盖ImageView,可能会出现图片的显示不完全

  • centerInside:

    保持横纵比缩放图片,直到ImageView能够完全地显示图片

  • matrix:

    默认值,不改变原图的大小,从ImageView的左上角开始绘制原图, 原图超过ImageView的部分作裁剪处理

猜你喜欢

转载自blog.csdn.net/weixin_43499030/article/details/89339767