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
常识:
- background通常指的都是背景,而src指的是内容!!
- 当使用src填入图片时,是按照图片大小直接填充,并不会进行拉伸,而使用background填入图片,则是会根据ImageView给定的宽度来进行拉伸
1.2 adjustViewBounds
ImageView为我们提供了adjustViewBounds属性,用于设置缩放时是否保持原图长宽比! 单独设置不起作用,需要配合maxWidth和maxHeight属性一起使用!而后面这两个属性 也是需要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的部分作裁剪处理