目录
- 布局方式
- 线性布局
- 相对布局
- 控件属性
- 基本控件
- TextView
- 设置阴影
- 跑马灯
- 中划线
- 下划线
- EditText
- Button
- RadioButton
- CheckBox
- 监听事件
- ImageView
- 动态设置图片
布局方式
线性布局
LinearLayout需要指定线性布局的方向,设置orientation属性,vertical为垂直布局,horizontal为水平布局
相对布局
RelativeLayout属性详解
控件属性
layout_width:组件宽度
layout_height:组件高度
id:为TextView设置一个id,用来在代码里面找到这个组件
text:设置要显示的文本
textColor:设置文本的颜色
textStyle:设置字体的风格,内置有三个可选项:normal(无效果),bold(加粗),itallc(斜体)
textSize:字体大小,单位为sp
background:控件的背景,可以是颜色或者是图片
gravity:控件中内容的对齐方式
基本控件
TextView,EditText,Button这些控件的layout_width,layout_height,以及id不用多讲,就是控件的宽高和id。还有常用的可供设置的属性有textSize字体大小,textColor字体颜色,background控件的背景,可以引用drawable资源设置为图片,margin类和padding类分别设置控件的外边距和内边距,layout_gravity设置当前控件的对齐方式,gravity设置控件内部控件的对齐方式。
一般来讲,空间大小和控件间的距离用单位dp,字体大小用单位sp。
TextView
maxLines属性用于设置textView的最大显示行数,当实际行数超过最大行数时,可以用ellipsize属性设置textView长度过长时的缩略显示方式,这是关于ellipsize的属性的博客。
设置阴影
shadowColor:设置阴影的颜色,需要与shadowRadius一起使用
shadowRadius:设置阴影的模糊程度,设为0.1就变成字体颜色了,建议使用3.0
shadowDx:设置阴影在水平方向上的偏移
shadowDy:设置阴影在竖直方向上的偏移
跑马灯
跑马灯需要在单行显示即maxLines属性为1,并且文字显示不下的前提下,设置ellipsize属性为marquee(eliipsize表示在哪里省略文本),这时在获取到当前控件焦点的情况下,可以横向滚动,接下来设置focusable属性为true表示可以获取焦点,再设置focusableInTouchMode属性为true,表示可以通过触摸获取焦点,这是关于focusable和focusableInTouchMode的区别的博客。最后设置重复滚动次数marqueeRepeatLimit属性为marquee_forever,表示一直滚动。
示例:
<TextView
android:id="@+id/tv_7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="string/TextView_Text7string/TextView_Text7string/TextView_Text7"
android:textSize="25sp"
android:textColor="@color/YellowColor"
android:layout_gravity="center"
android:layout_marginTop="15dp"
android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:focusable="true"
android:focusableInTouchMode="true"/>
<requestFocus/>
中划线
tv_4.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);
tv_4.getPaint().setAntiAlias(true);
下划线
下划线和中划线不能同时存在
第一种:
tv_5 = findViewById(R.id.tv_5);
tv_5.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);
第二种用xml的方式:
tv_6 = findViewById(R.id.tv_6);
tv_6.setText(Html.fromHtml("<u>TextView_Text6</u>"));
EditText
EditText有一个hint属性,该属性可以设置在EditText没有内容时的提示信息(textColorHint属性设置提示文字的颜色),和TextView一样maxLines属性设置可以显示的最大行数,intputType属性可以设置允许输入的文本类型,如数字number,密码textPassword,当设置为textPassword时,输入内容会用暗文保护。
drawableXxxx在输入框的指定方向添加图片
drawablePadding设置图片与输入框之间的距离
paddingXxxx设置内容与边框的间距
background设置背景色
EditText有用于监视输入改变的监听器
account为一个EditText实例:
account.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
Toast.makeText(EditTextActivity.this,s.toString(),Toast.LENGTH_SHORT).show();
}
});
获取EditText内容可以使用EditText的getText()方法,例如:editText.getText()
Button
Button的Text属性默认是全大写,要按照设置的内容显示需要设置textAllCaps属性为false
Button的两种点击事件设置方法为:
第一种:
在xml文件中设置onClick属性
<Button
android:id="@+id/bt_1"
android:layout_width="150dp"
android:layout_height="50dp"
android:text="@string/Button1"
android:textAllCaps="false"
android:textSize="25sp"
android:textColor="@color/TextColor_red"
android:background="@drawable/bk_filleted_corner"
android:layout_centerHorizontal="true"
android:onClick="showToast"/>
在Activity中写一个与onClick的属性相同名字的方法
public void showToast(View view){
//点击过后弹出一个提示:Button1被点击了
Toast.makeText(this,"Button1被点击了",Toast.LENGTH_SHORT).show();
}
第二种:这种也是比较常用的,给Button设置一个点击监听器
bt_2.setOnClickListener(v -> Toast.makeText(ButtonActivity.this,"Button2被点击了",Toast.LENGTH_SHORT).show());
Button的点击事件的返回值为true时,会导致在其后面检测的click事件不执行
RadioButton
单选框,在一个RadioGroup里的RadioButton可以设置一个默认选中的项,设置checked属性为true,
RadioGroup可以设置布局方向orientation为vertical或者horizontal。当然和其他组件一样,可以设置background。
<RadioGroup
android:id="@+id/radioGroup1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="15dp">
<RadioButton
android:id="@+id/radioButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="男"
android:textSize="25sp"
android:textColor="@color/TextColor_red"
android:checked="true"/>
<RadioButton
android:id="@+id/radioButton2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="女"
android:textSize="25sp"
android:textColor="@color/TextColor_red"/>
</RadioGroup>
为RadioButton设置选项改变的监听事件:
radioGroup.setOnCheckedChangeListener((group, checkedId) -> {
RadioButton radioButton = group.findViewById(checkedId);
Toast.makeText(RadioButtonActivity.this,radioButton.getText(),Toast.LENGTH_SHORT).show();
});
CheckBox
<CheckBox
android:id="@+id/checkbox1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Android"
android:textSize="25sp"
android:textColor="@color/TextColor_green"
android:layout_below="@id/checkbox_textView"
android:layout_marginBottom="15dp"/>
<CheckBox
android:id="@+id/checkbox2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="IOS"
android:textSize="25sp"
android:textColor="@color/TextColor_green"
android:layout_below="@id/checkbox1"
android:layout_marginBottom="15dp"/>
<CheckBox
android:id="@+id/checkbox3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="其他"
android:textSize="25sp"
android:textColor="@color/TextColor_green"
android:layout_below="@id/checkbox2"
android:layout_marginBottom="15dp"/>
监听事件
可以每一个CheckBox设置监听事件
checkBox1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Toast.makeText(CheckBoxActivity.this,isChecked?"Android被选中了":"Android被取消了选中",Toast.LENGTH_SHORT).show();
}
});
也可以自己写一个类实现自所需要设置监听的Listener接口,这里需要实现的接口是CompoundButton.OnCheckedChangeListener,代码如下
//为所有CheckBox按钮设置选中改变事件
public void setListeners(){
OnCheckedChange onCheckedChange = new OnCheckedChange();
checkBox1.setOnCheckedChangeListener(onCheckedChange);
checkBox2.setOnCheckedChangeListener(onCheckedChange);
checkBox3.setOnCheckedChangeListener(onCheckedChange);
checkBox4.setOnCheckedChangeListener(onCheckedChange);
checkBox5.setOnCheckedChangeListener(onCheckedChange);
checkBox6.setOnCheckedChangeListener(onCheckedChange);
}
class OnCheckedChange implements CompoundButton.OnCheckedChangeListener{
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
switch (buttonView.getId()){
case R.id.checkbox1:
Toast.makeText(CheckBoxActivity.this,isChecked?"Android被选中了":"Android被取消了选中",Toast.LENGTH_SHORT).show();
break;
case R.id.checkbox2:
Toast.makeText(CheckBoxActivity.this,isChecked?"IOS被选中了":"IOS被取消了选中",Toast.LENGTH_SHORT).show();
break;
case R.id.checkbox3:
Toast.makeText(CheckBoxActivity.this,isChecked?"其他被选中了":"其他被取消了选中",Toast.LENGTH_SHORT).show();
break;
case R.id.checkbox4:
Toast.makeText(CheckBoxActivity.this,isChecked?"打游戏被选中了":"打游戏被取消了选中",Toast.LENGTH_SHORT).show();
break;
case R.id.checkbox5:
Toast.makeText(CheckBoxActivity.this,isChecked?"做饭被选中了":"做饭被取消了选中",Toast.LENGTH_SHORT).show();
break;
case R.id.checkbox6:
Toast.makeText(CheckBoxActivity.this,isChecked?"其他被选中了":"其他被取消了选中",Toast.LENGTH_SHORT).show();
break;
}
}
}
然后在onCreate方法里设置监听setListeners()就可以了。
ImageView
ImageView有一个用于设置图片展示方式的属性scaleType,Android ImageView ScaleType:图解 fitStart 保持宽高比缩放图片,直到某一边长充满ImageView,可能留白,将图片置于上面或左边
fitCenter 默认值,将图片置于中间
fitEnd 同上,缩放后将图片置于右边或下边
fitXY 将图片进行缩放使其完全填充ImageVIew,图片可能发生形变
center 不缩放,置于中间,超出边界的不显示
centerCrop 保持长宽比缩放,直到完全填充ImageView,图片超出ImageView部分不显示
centerInside 保持宽高比缩放,直到ImageView能够完全显示图片,如果原图小于ImageView,则直接显示在中间,不缩放
matrix 不缩放,从左上角绘制
adjustviewBounds 设置为true,会自动调整ImageView的大小来适应图片大小
加载网络图片可以使用GitHub上的glide库,加载方法:
Glide.with(this).load("http://goo.gl/gEgYUd").into(imageView);
一个使用的例子:
btn_imv.setOnClickListener(v -> Glide.with(ImageViewActivity.this).load("http://img2.ddove.com/upload/20121009/090649003786.jpg").error(R.drawable.picture2).into(imv_2));
error()方法是在加载失败时加载另一张图片。
这里加载的是网络图片,所以需要在AndroidManifest里面申请网络权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
动态设置图片
//动态获取图片
String imageName = "PictureName";
final int resId = context.getResources().getIdentifier(imageName, "drawable", context.getPackageName());
if (resId != 0) {
//打印日志
Log.e("picture load", "successful");
//设置图片资源
holder.imageView.setImageResource(resId);
}
这里的imageName就是图片的名字