常用控件:
下列属性均指在xml文件中使用(Java中也可以设置:见文章底)
Textview(显示文本信息)
android:layout_width = " * " 设置文本控件的宽度
android:layout_height= " * " 高度
android:id 唯一标识
android:backgroud 背景
android:layout_margin 设置当前控件与屏幕边界或周围控件、布局的距离
android:padding 设置控件边界与控件内 内容的距离
android:text 设置文本
android:textColor 文字颜色
android:textSize 文字大小(推荐单位”sp“)
android:gravity 设置内容的位置
android:maxLength 设置文本最大长度,超过的那你内容不显示
android:lines 设置行数,超出不显示
android:maxLines 设置最大行数,超出不显示
android:ellipsize 设置当文本超出Textview规定范围的
显示方式("start"[在文本开始处显示"..."],"middle"[中间],"end"[末尾])
android:drawableTop(Bottom/Left/Right) 文本顶部(下面,左,右)显示图片
(图片推荐放在【res/drawable】)
android:lineSpacingExtra 设置行间距
android:textStyle 设置文本样式(”bold 粗体“,”italic 斜体 “,”normal 正常“)
Button(按钮)
Button 控件继承自TextView控件,既可以显示文本,也能显示图片,同时允许用户点击操作,被点击时背景会有动态切换效果。
Button控件设置点击事件
1.在布局文件中用onClick属性
<Button
......
android:onClick = " 改名字要与Java中的点击事件方法名一致 ">
2.使用匿名内部类
在Activity中编写
btn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
//实现点击事件
}
});
Activity实现OnClickListener接口
public class MainSctivity extends AppCompatActivity implements View.onClickListener{
@Override
protected void onCreate(Bundle saveInstanceState) {
.......
btn.setOnClickListener(this);
}
@Override
public void onClick (View view) {
//实现的代码
}
}
上述代码中,MainAcctivity通过实现View.OnClickListener接口中的onClick方法来设置点击事件,要注意的是在实现onClick方法之前,必须调用Butoon控件中的setOnClickListener()方法设置点击监听事件,否则点击不会生效
前两种方法适合按钮比较少的情况,如果按钮比较多建议用第三种。
EditText(编辑文本框)
它是TextView的子类
额外属性:
android:hint 控件中内容为空时显示的提示问问信息
android:textColor 空间内容为空时,提示文本信息的颜色
android:password 输入文本框中的内容显示为” . “
android:phoneNumber 设置输入文本框中的内容只能为数字
android:minLines 设置文本最小行数
android:scrollHorizontally 设置文本信息超出控件范围的情况下,是否出现横拉条
android:editable 是否可编辑
ImageView(图片)
继承自View
属性:
android:layout_width = " * " 设置文本控件的宽度
android:layout_height= " * " 高度
android:id 唯一标识
android:backgroud 背景
android:layout_margin 设置当前控件与屏幕边界或周围控件、布局的距离
android:src 图片路径
android:scaleType 将图片资源缩放或移动,以适应控件宽高
android:tint 将图片渲染成指定的颜色
RadioButton(单选按钮)
RadioButton单选按钮,他是Button的子类。每个按钮都有“选中”,“未选中”两种状态,通过android:checked属性指定true/false。
RadioGroup是单选组合框,经常与单选按钮一起使用,其中可以收纳多个单选按钮,在RadioGroup中不会出现多个单选按钮同时选中的情况。
<RadioGroup
android: 属性名 = " 属性值 " >
<RadioButton
android:属性名 = " 属性值 "
..../>
<RadioGroup/>
public class MainActivity extends AppCompatActivity {
//初始化控件
private RadioGroup radioGroup;
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
radioGroup=(RadioGroup) findViewById(R.id.rdg);
textView=(TextView) findViewById(R.id.tv);
//利用setOnCheckedChangeListener()为RadioGroup设置监听
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
//判断点击的被点击的是哪个RadioButton
if (checkedId==R.id.rbtn){
textView.setText("您的性别是:男");
}else{
textView.setText("您的性别是女");
}
}
});
}
}
CheckBox(复选框)
CheckBox是Button的子类,可以实现多选功能。与单选框相同的属性决定选中和未选中状态。
public class MainActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener {
private TextView hobby;
private String hobbys;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化多选控件
CheckBox shuttlecock=(CheckBox)findViewById(R.id.like_shuttlecock);
CheckBox basketball=(CheckBox)findViewById(R.id.like_basketball);
CheckBox pingpong=(CheckBox)findViewById(R.id.like_pingpong);
shuttlecock.setOnCheckedChangeListener(this);
basketball.setOnCheckedChangeListener(this);
pingpong.setOnCheckedChangeListener(this);
//初始化文本显示控件
hobby=(TextView)findViewById(R.id.hobby);
hobbys=new String();
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
String motion = buttonView.getText().toString();
if (isChecked){
if (!hobbys.contains(motion)){
hobbys=hobbys+motion;
hobby.setText(hobbys);
}else {
if (hobbys.contains(motion)){
hobbys=hobbys.replace(motion,"");
hobby.setText(hobbys);
}
}
}
}
}
AlerDialog(提示框)
1.AlerDialog概括
使用AlerDialog创建的对话框一般包含标题、内容、按钮三个区域。
步骤:
(1)调用AlerDialog的静态内部类Builder创建AlerDialog.Builder的对象。
(2)调用AlerDialog.Builder的setTitle()和setIcon()方法分别设置AlerDialog对话框的标题名称和图表。
(3)调用AlerDialog.Builder的setMessage()、setSingleChoiceItems()或者setMultiChoiceItems()方法设置AlerDialog对话框的内容为简单文本、单选列表或者多选列表。
(4)调用AlerDialog.Builder的setPositiveButton()和setNegetiveButton()方法设置AlerDialog对话框的确定和取消按钮。
(5)调用AlerDialog.Builder的create()方法,创建AlerDialog对象。
(6)调用AlerDialog对象的show()方法显示该对话框。
(7)调用AlerDialog对象的dismiss()方法取消该对话框
2.单选提示框
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private TextView textView;
private int[] textSizeArr={10,20,25,30,40};
int textSize=1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate ( savedInstanceState );
setContentView ( R.layout.activity_main );
//设置Button监听事件
findViewById ( R.id.bt ).setOnClickListener ( this );
textView =(TextView) findViewById ( R.id.tv );
}
@Override
public void onClick(View v) {
AlertDialog dialog;
AlertDialog.Builder builder=new AlertDialog.Builder ( this )
//设置标题
.setTitle ( "设置字体大小" )
//设置图标
.setIcon ( R.mipmap.ic_launcher )
//设置单选按钮
.setSingleChoiceItems ( new String[]{"小号", "默认", "中号", "大号", "超大"}, textSize, new DialogInterface.OnClickListener () {
@Override
public void onClick(DialogInterface dialog, int which) {
//把单选名称数组的下标给单选参数数组,使之名称和值一一对应。
textSize=which;
}
} )
//设置“确定”按钮
.setPositiveButton ( "确定", new DialogInterface.OnClickListener () {
@Override
public void onClick(DialogInterface dialog, int which) {
//为TextView设置在单选对话框中选择的字体大小
textView.setTextSize (textSizeArr[textSize] );
//关闭对话框
dialog.dismiss ();
}
} )
//设置“取消”按钮
.setNegativeButton ( "取消", new DialogInterface.OnClickListener () {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss ();
}
} );
dialog=builder.create ();
dialog.show ();
}
}
ListView(多条目,列表)
1.属性
ListView是一个比较常用的控件,他以列表的形式展示数据内容,并能够根据列表的高度自适应屏幕显示。
常用属性:
android:listSelector 当条目被点击后,改变条目的背景颜色
android:divider 设置分割线的颜色
android:dividerHeight 设置分割线的高度
android:scrollbars 是否显示滚动条
android:fadingEdge 去掉上边和下边的黑色阴影
2.常用的数据适配器(Adapter)
在为ListView控件添加数据的时候会用到数据适配器。
数据适配器是数据与视图之间的桥梁,它类似于一个转换器,将复杂的数据转换为用户可以接受的方式进行呈现。
(1)BaseAdapter
BaseAdapter是基本的适配器。实际上是一个抽象类,通常在自定义适配器时会继承BaseAdapter,该类有四个抽象方法。
方法:
public int getCount()
获取Item条目的总数。
public Object getItem(int position)
根据position(位置)获取某个Item的对象。
public long getItemId(int position)
根据position获取某个Item的id。
public View getView(int position,View convertView,ViewGroup parent)
获取相应的position对应的Item视图,position是当前Item的位置,convertView用于复用旧视图,parent用于加载xml布局。
(2)SimpleAdapter
SimpleAdapter继承自BaseAdapter,实现了BaseAdapter的四个抽象方法并进行封装。因此在使用SimpleAdapter时,只需要在构造方法中传入相应的参数即可。
public SimpleAdapter ( Context context , List< ? extends Map<String , ? > > data , int resource , String[ ] from , int[ ] to )
context:表示上下文对象
data:数据集合,data中的每一项对应ListView控件中的条目的数据
resource:Item布局的资源id
from:Map集合中的key值
to:Item布局中对应的控件
(3)ArrayAdapter
ArrayAdapter也是BaseAdaper的子类,用法与SimpleAdapter类似,开发者只需要在构造方法里面传入相应的参数即可。
ArrayAdapter通常用于适配TextView控件,例如安卓手机里的设置菜单
构造方法:
public ArrayAdapter(Context context,int resource);
public ArrayAdapter(Context context,int resource,int textViewResourceId);
public ArrayAdapter(Context context,int resource,T[ ] objects);
public ArrayAdapter(Context context,int resource,int textViewResourceId,T[ ] objects);
public ArrayAdapter(Context context,int resource,List<T> objects);
public ArrayAdapter(Context context,int resource,int textViewResourceId,List<T> objects);
List<T> objects:需要适配的List类型的数据
textViewResourceId:Item布局中相应TextView的id
T[ ] objects:需要适配的数组类型的数据
(4)添加适配器
通过ListView对象的setAdapter()方法添加。
例如:将继承BaseAdapter的MyBaseAdapter实例添加到ListView中:
//初始化ListView控件
ListView mListView=(ListView) findViewById(R.id.lv);
//创建一个Adapter的实例
MyBaseAdapter mAdapter = new MyBaseAdapter ( );
//设置Adapter
mListView.setAdapter( mAdapter);
简单的实验程序: activity_main.mxl
list_item.mxl
MainActivity.java
public class MainActivity extends Activity {
private ListView mListView;
//商品名称与价格数据集合
private String[] titles ={"桌子","苹果","蛋糕","线衣","猕猴桃","围巾"};
private String[] prices ={"1800元","10元/kg","300元","350元","10元/kg","280元"};
//图片数据集合
private int[] icons={
R.drawable.table,R.drawable.apple,R.drawable.cake,R.drawable.wireclothes,R.drawable.kiwifruit,
R.drawable.scarf
};
protected void onCreate(Bundle savedInstanceState) {
super.onCreate ( savedInstanceState );
setContentView ( R.layout.activity_main );
//初始化ListView控件
mListView=(ListView) findViewById ( R.id.lv );
//创建一个Adapte实例,适配器
MyBaseAdapter mAdapter=new MyBaseAdapter();
//为listview设置Adapter(适配器)
mListView.setAdapter ( mAdapter );
}
//适配器的功能实现
class MyBaseAdapter extends BaseAdapter{
@Override
public int getCount() {
//获取item的总数
//返回ListView Item条目总数
return titles.length;
}
@Override
public Object getItem(int position) {
//返回Item的数据对现象
return titles[position];
}
@Override
public long getItemId(int position) {
//返回Item的id
return position;
}
//得到Item的View视图
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//加载list_item.mxl布局文件
View view=View.inflate ( MainActivity.this,R.layout.list_item,null );
TextView title=(TextView)view.findViewById ( R.id.title );
TextView price=(TextView) view.findViewById ( R.id.price );
ImageView iv=(ImageView) view.findViewById ( R.id.iv );
title.setText ( titles[position] );
price.setText ( prices[position] );
iv.setBackgroundResource (icons[position] );
return view;
}
}
}
ListView加载数据优化以后更新说明。
RecyclerView(ListView加强版)
RecyclerView控件与ListView类似,但是RecyclerView的功能更加强大。
(1)展示效果
RecyclerView控件可以通过LayoutManager类实现横向或竖向的列表效果、瀑布效果和GridView效果。ListView只能实现竖向。
(2)适配器
RecyclerView控件使用的是RecyclerView.Adapter适配器,该适配器将BaseAdapter中的getView()方法拆分为onCreateViewHolder()方法和onBindViewHolder()方法,强制使用ViewHolder类,使代码规范化,避免了初学者写的代码性能不佳。
(3)复用效果
RecyclerView控件复用Item对象的工作由该控件自己实现,而ListView控件复用Item对象的工作需要开发者通过convertView的setTag()和getTag()方法进行操作。
(4)动画效果
RecyclerView控件可以通过setItemAnimator()方法为Item添加动画效果。
实例: activity_main.mxl
recycler_item.xml
MainActivity.java
public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
private HomeAdapter mAdapter;
private String[] names = {"小猫","哈士奇","小黄鸭","小鹿","老虎"};
private int[] icons = {
R.drawable.apple,R.drawable.apple,R.drawable.apple,R.drawable.apple,R.drawable.apple
};
private String[] introduces = {
"猫**************************************************",
"哈士奇**********************************************",
"鸭子************************************************",
"小鹿************************************************",
"老虎************************************************"
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate ( savedInstanceState );
setContentView ( R.layout.activity_main );
mRecyclerView=(RecyclerView) findViewById ( R.id.id_recyclerview );
mRecyclerView.setLayoutManager ( new LinearLayoutManager ( this ) );
mAdapter=new HomeAdapter ();
mRecyclerView.setAdapter ( mAdapter );
}
class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder>{
@Override
public MyViewHolder onCreateViewHolder( ViewGroup parent, int viewType) {
MyViewHolder holder = new MyViewHolder (
LayoutInflater.from( MainActivity.this ).inflate ( R.layout.recycler_item,parent,false )
);
return holder;
}
@Override
public void onBindViewHolder( MyViewHolder holder, int position) {
holder.name.setText(names[position]);
holder.iv.setImageResource ( icons[position] );
holder.introduce.setText ( introduces[position] );
}
@Override
public int getItemCount() {
return names.length;
}
class MyViewHolder extends RecyclerView.ViewHolder{
TextView name;
ImageView iv;
TextView introduce;
public MyViewHolder( View view) {
super ( view );
name =(TextView) view.findViewById ( R.id.name );
iv=(ImageView) view.findViewById ( R.id.iv );
introduce=(TextView) view.findViewById ( R.id.introduce );
}
}
}
}
(5)添加recyclerview库
之后更新会说明。
自定义View
自定义View常用方法
(1)onMeasure()方法
该方法用于测量尺寸,在该控件下可以设置控件或者子控件的宽高。
onMeasure(int widthMeasureSpec,int heightwidthMeasureSpec)
widthMeasureSpec和 heightwidthMeasureSpec表示获取父容器指定该控件的宽度和高度。
widthMeasureSpec和 heightwidthMeasureSpec参数不仅包含父容器指定的属性值,还包括父容器指定的测量模式:
三种模式: EXACTLY:定义宽高时用具体的数值时使用。精确值
AT_MOST:宽高为“wrap_content”时使用。容量最大空间值 UNSPECIFIED:当父容器没有指定自定义控件宽高时使用。
注意:虽然widthMeasureSpec和 heightwidthMeasureSpec是父容器指定该控件的宽高,但是该控件还需要通过setMeasureDimension(int,int)方法设置具体宽高。
(2)onDraw()方法
该方法用于绘画图像:
onDraw(Canvas canvas)
canvas表示画布,该类经常与Paint类(笔)配合使用
(3)onLayout()方法
用于指定布局中子控件的位置,该方法通常在ViewGroup中重写
onLayout(boolean changed,int left,int top,int right,int bottom)
changed表示自定义View的大小和位置是否发生变化,其余四个都是与父容器四个边的距离
Java编写:
用控件名定义,属性用set赋值 例如:
TextView textView=new TextView ( this );
textView.setTextViewColor( )