这是我参与【第四届青训营】笔记创作活动的第九天
1.如何去掉应用最上面的导航栏
在AndroidManifest.xml文件中将
android:theme="@style/AppTheme">修改为
android:theme="@style/Theme.AppCompat.Light.NoActionBar">
2.如何设置组件对齐方式
通过设置gravity(元素摆放位置)和layout_gravity(元素相对父控件摆放位置)属性进行调试,对齐方式可多选
gravity属性
| 属性值 | 位置 |
|---|---|
| top | 在布局顶部(horizontal时可用) |
| botton | 在布局底部(horizontal时可用) |
| left | 在布局左侧(vertical时可用) |
| right | 在布局右侧(vertical时可用) |
| center_horizontal | 水平居中(vertical时可用) |
| center_vertical | 垂直居中(horizontal时可用) |
| center | 水平或垂直居中(均有效) |
3.常规View的属性与方法
View类是所有Android控件和容器的父类
通用属性:id,height,width,margin,padding,gravity
通用方法:setId(@IdRes int id),setLayoutParams(ViewGroup.LayoutParams params),setPadding(int left,int top,int right,int bottom)
特定属性与方法:TextView,ImagView,CheckBox,Button,EditText
4.文本框TextView常用属性
//在界面显示一段文本信息
android:text 文字内容
android:textSize 文字大小
android:textStyle 文字格式(normal, bold, italic, bold|italic)
android:textColor 文字颜色
5.输入框 EditText常用属性( 是TextView的子类)
android:hint 提示文字
android:inputType 输入类型,值为:text, number, textPassword…,多类型用|分割。
android:drawableLeft 输入框左侧(其他边也有相应的属性)绘制对象,值通常为一个可绘制资源文件,如@mipmap/xx
android:drawablePadding 可绘制对象的内边距
android:lines 输入框高多少行,值为整数。
6.Button如何设置点击事件(是TextView的子类)
public class ButtonActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_button);
Button btnclick2 = (Button) findViewById(R.id.btnclick2);
Button btnclick3 = (Button) findViewById(R.id.btnclick3);
Button btnclick4 = (Button) findViewById(R.id.btnclick4);
//方式二:设置监听
btnclick2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(ButtonActivity.this,"按钮的第二种监听方式",Toast.LENGTH_LONG).show();
}
});
//方式三:设置监听
btnclick3.setOnClickListener(new MyClickListener());
//方式四:设置监听
btnclick4.setOnClickListener(this);
}
//方式一:通过设置按钮的onClick属性
public void myClick(View view){
Toast.makeText(ButtonActivity.this,"按钮的第一种监听方式",Toast.LENGTH_LONG).show();
}
//方式四:重写onClick方法。一个页面多按钮时使用
@Override
public void onClick(View v) {
Toast.makeText(ButtonActivity.this,"按钮的第四种监听方式",Toast.LENGTH_LONG).show();
}
//方式三:内部类的方式实现OnClickListener接口,并重写OnClick方
class MyClickListener implements View.OnClickListener{
@Override
public void onClick(View v) {
Toast.makeText(ButtonActivity.this,"按钮的第三种监听方式",Toast.LENGTH_LONG).show();
}
}
}
7.单选框RadioButton使用方法
//ViewGroup是LinearLayout的子类,所以ViewGroup默认是垂直的线性布局,可以用android:orientation属性来改变线性方向。
//可以使用andorid:onClick属性来设置单选框的点击事件,代码可以如下:
public void onRadioButtonClicked(View view) {//这个方法名是自己定义的
// Is the button now checked?
boolean checked = ((RadioButton) view).isChecked();
// Check which radio button was clicked
switch(view.getId()) {
case R.id.radio_pirates:
if (checked)
// Pirates are the best
break;
case R.id.radio_ninjas:
if (checked)
// Ninjas rule
break;
}
}
//方法二
private RadioGroup sexgp;
private String selSext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_radio_button);
//获取RadioGroup
sexgp = (RadioGroup)findViewById(R.id.sexgp);
//设置监听
sexgp.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
//获取选中的单选按钮
RadioButton rcheck = (RadioButton) findViewById(checkedId);
//获取选中的值
String checkText = rcheck.getText().toString();
//显示
Toast.makeText(RadioButtonActivity.this,"您选中的是:"+checkText,Toast.LENGTH_LONG).show();
}
});
}
8.多选框CheckBox使用举例
public class CheckBoxActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_check_box);
//获取CheckBox
CheckBox ck1 = findViewById(R.id.ck1);
CheckBox ck2 = findViewById(R.id.ck2);
//设置监听事件
ck1.setOnCheckedChangeListener(this);
ck2.setOnCheckedChangeListener(this);
}
//选中事件
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
//Toast
Toast.makeText(CheckBoxActivity.this,
buttonView.getText()+"被选择",Toast.LENGTH_SHORT ).show();
}else{
Toast.makeText(CheckBoxActivity.this,
buttonView.getText()+"取消选择",Toast.LENGTH_SHORT ).show();
}
}
}
9.计时器 Chronometer
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".ChronometerMainActivity">
<Chronometer
android:id="@+id/timer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="#8BC34A"
android:gravity="center_vertical"
android:textSize="30pt" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/begin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="#FF9800"
android:text="开始计时" />
<Button
android:id="@+id/end"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="#FF9800"
android:text="停止计时" />
<Button
android:id="@+id/goon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="#FF9800"
android:text="恢复计时" />
<Button
android:id="@+id/reset"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="#FF9800"
android:text="重置计时" />
</LinearLayout>
</LinearLayout>
public class ChronometerMainActivity extends AppCompatActivity{
Chronometer ch;//计时器
Button begin;//开始计时按钮
Button end;//结束计时按钮
Button goon;//继续计时按钮
Button reset;//重置计时按钮
long recordingTime;//记录总时间
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chronometer_main);
ch=(Chronometer)findViewById(R.id.timer);
begin=(Button)findViewById(R.id.begin);
end=(Button)findViewById(R.id.end);
goon=(Button)findViewById(R.id.goon);
reset=(Button)findViewById(R.id.reset);
begin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ch.setBase(SystemClock.elapsedRealtime()-recordingTime);//SystemClock.elapsedRealtime()获取的是系统开机到现在的时间,不能被修改
ch.start();//开始计时
begin.setEnabled(false);
end.setEnabled(true);
goon.setEnabled(false);
reset.setEnabled(true);
}
});
end.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ch.stop();//停止计时
recordingTime=SystemClock.elapsedRealtime()-ch.getBase();//保存当前停止的时间
begin.setEnabled(false);
goon.setEnabled(true);
end.setEnabled(false);
reset.setEnabled(true);
}
});
goon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ch.start();
begin.setEnabled(false);
end.setEnabled(true);
goon.setEnabled(false);
reset.setEnabled(true);
}
});
reset.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
recordingTime=0;//将当前时间置为0
ch.start();
ch.setBase(SystemClock.elapsedRealtime());
begin.setEnabled(false);
goon.setEnabled(false);
end.setEnabled(true);
reset.setEnabled(false);
}
});
ch.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {//为Chronomter绑定事件监听器
@Override
public void onChronometerTick(Chronometer chronometer) {
if(SystemClock.elapsedRealtime()-ch.getBase()>3600*1000)//若计时超过了3600s=1 h即停止计时
{
ch.stop();
begin.setEnabled(true);
end.setEnabled(false);
goon.setEnabled(false);
}
}
});
}
}
10.布局类型
①LinearLayout:
线性布局,将其包含的子控件以横向或纵向的方式排列,简言之就是将子元素排列成行或者列
②RelativeLayout:
相对布局,可以通过相对定位的方式让控件出现在布局的任何位置,实际开发中,多用此进行UI设计,可减少UI中的嵌套结构,在代码维护以及运行效率,具备一定优势
属性类型:
属性值为true或false
| 属性名称 | 描述 |
|---|---|
| layout_centerHorizental | 水平居中 |
| layout_centerVertical | 垂直居中 |
| layout_centerInparent | 相对于父控件完全居中 |
| layout_alignParentBottom | 紧贴父控件的下边缘 |
| layout_alignParentLeft | 紧贴父控件的左边缘 |
| layout_alignParentRight | 紧贴父控件的右边缘 |
| layout_alignParentTop | 紧贴父控件的上边缘 |
| layout_alignWithParentIfMissing | 如果对应兄弟控件找不到,就以父控件作为参照物 |
属性值必须为ID的引用名“@id/id-name”
| 属性名称 | 描述 |
|---|---|
| layout_below | 在某元素下方 |
| layout_above | 在某元素上方 |
| layout_toLeftOf | 在某元素左方 |
| layout_toRightOf | 在某元素右方 |
| layout_alignTop | 本元素的上边缘和某元素的上边缘对其 |
| layout_alignLeft | 本元素的左边缘和某元素的左边缘对其 |
| layout_alignBottom | 本元素的下边缘和某元素的下边缘对其 |
| layout_alignRight | 本元素的右边缘和某元素的右边缘对其 |
属性值为具体的像素值,如30dp,40dp
| 属性名称 | 描述 |
|---|---|
| layout_marginBottom | 离某元素底边缘的距离 |
| layout_marginLeft | 离某元素左边缘的距离 |
| layout_marginRight | 离某元素右边缘的距离 |
| layout_marginTop | 离某元素底上边缘的距离 |
③FrameLayout:
帧布局,直接在屏幕上开辟出一块空白的区域,当我们往里面添加控件的时候,会默认把它们放到这块区域的左上角。它将子元素逐个重叠放入栈,最后添加的子元素显示在最上面。虽然默认将控件放置在相应区域的左上角,但是我们可以通过 layout_gravity 属性,将控件指定到其他的位置。FrameLayout 排列方式如图:
FrameLayout 可以设置前景图片,这时需要设置对应的属性,FrameLayout 常用属性如表
| 属性名称 | 描述 |
|---|---|
| android:foreground | 设置帧布局容器的前景图像 |
| android:foregroundGravity | 设置前景图像显示的位置 |
④GridLayout
GridLayout 是将布局按固定的行数、列数分割成固定网格。加入 GridLayout 的控件,按顺序从左到右、或从上到下摆放,也支持直接指定某个位置摆放,GridLayout 的排列方式如图
GridLayout 布局的常用属性
| 属性名称 | 描述 |
|---|---|
| android:columnCount | 最大列数。 |
| android:rowCount | 最大行数 |
| android:orientation | GridLayout中子元素的布局方向 |
| android:alignmentMode | alignBounds:对齐子视图边界 alignMargins :对齐子视距内容,默认值 |
| android:columnOrderPreserved | 使列边界显示的顺序和列索引的顺序相同,默认是true |
| android:rowOrderPreserved | 使行边界显示的顺序和行索引的顺序相同,默认是true |
| android:useDefaultMargins | 没有指定视图的布局参数时使用默认的边距,默认值是false |
GridLayout 子元素的属性:GridLayout 也是容器,可在其中添加其他控件,这些控件将具有以下属性
| 属性名称 | 描述 |
|---|---|
| android:layout_column | 指定该单元格在第几列显示 |
| android:layout_row | 指定该单元格在第几行显示 |
| android:layout_columnSpan | 指定该单元格占据的列数 |
| android:layout_rowSpan | 指定该单元格占据的行数 |
| android:layout_gravity | 指定该单元格在容器中的位置 |
| android:layout_columnWeight | (API21加入)列权重 |
| android:layout_rowWeight | (API21加入) 行权重 |
⑤ ConstraintLayout布局
ConstraintLayout 可以在 API 9 以上的 Android 操作系统使用它,它主要是为了解决布局嵌套过多的问题而出现,以灵活的方式定位和调整小部件。从 Android Studio 2.3起,官方的模板默认使用 ConstraintLayout。
ConstraintLayout 与 RelativeLayout 类似,采用相对定位的布局模式。
ConstraintLayout的灵活性要高于 RelativeLayout,性能更出色!还有一点是 ConstraintLayout 可以按照比例约束控件位置和尺寸,能够更好地适配屏幕大小不同的机型。
• ConstraintLayout 的常用属性
| 属性名称 | 描述 |
|---|---|
| layout_constraintTop_toTopOf | 期望视图的上边对齐另一个视图的上边 |
| layout_constraintTop_toBottomOf | 期望视图的上边对齐另一个视图的底边 |
| layout_constraintTop_toLeftOf | 期望视图的上边对齐另一个视图的左边 |
| layout_constraintTop_toRightOf | 期望视图的上边对齐另一个视图的右边 |
| layout_constraintBottom_toTopOf | 期望视图的下边对齐另一个视图的上边 |
| layout_constraintBottom_toBottomOf | 期望视图的底边对齐另一个视图的底边 |
| layout_constraintBottom_toLeftOf | 期望视图的底边对齐另一个视图的左边 |
| layout_constraintBottom_toRightOf | 期望视图的底边对齐另一个视图的右边 |
| 属性名称 | 描述 |
|---|---|
| layout_constraintLeft_toTopOf | 期望视图的左边对齐另一个视图的上边 |
| layout_constraintLeft_toBottomOf | 期望视图的左边对齐另一个视图的底边 |
| layout_constraintLeft_toLeftOf | 期望视图的左边对齐另一个视图的左边 |
| layout_constraintLeft_toRightOf | 期望视图的左边对齐另一个视图的右边 |
| layout_constraintRight_toTopOf | 期望视图的右边对齐另一个视图的上边 |
| layout_constraintRight_toBottomOf | 期望视图的右边对齐另一个视图的底边 |
| layout_constraintRight_toLeftOf | 期望视图的右边对齐另一个视图的左边 |
| layout_constraintRight_toRightOf | 期望视图的右边对齐另一个视图的右边 |
基线定位:两个 TextView 控件的高度不一致,但是希望将他们的文本对齐,这个时候就可以使用layout_constraintBaseline_toBaselineOf 属性
角度定位:角度定位是指可以用一个角度和一段距离来约束一个控件相对于另一个控件的位置。
ConstraintLayout 角度定位如图
角度定位常用属性
| 属性名称 | 描述 |
|---|---|
| layout_constraintCircle | 参照控件的id |
| layout_constraintCircleAngle | 当前View的中心与目标View的中心的连线与Y轴方向的夹角(取值:0~360) |
| layout_constraintCircleRadius | 两个控件中心连线的距离 |
角度定位的使用
边距定位:在 ConstraintLayout 中,可以使用 layout_margin 及其子属性进行边距定位,如图所示,B 控件可以设置与 A 控件的 margin(边距)属性来进行定位。
边距定位的常用属性
| 属性名称 | 描述 |
|---|---|
| layout_marginBottom | 离某元素底边缘的距离 |
| layout_marginLeft | 离某元素左边缘的距离 |
| layout_marginRight | 离某元素右边缘的距离 |
| layout_marginTop | 离某元素上边缘的距离 |
| layout_marginStart | 如果在LTR布局(从左到右布局)模式下,该属性等同于layout_marginLeft。如果在RTL布局模式下,该属性等同于layout_marginRight。 |
| layout_marginEnd | 如果在LTR布局(从左到右布局)模式下,该属性等同于layout_marginRight。如果在RTL布局模式下,该属性等同于layout_marginLeft。 |
边距定位的应用
在 ConstraintLayout 里面要实现边距定位,必须先约束相应控件在 ConstraintLayout 里的位置,否则将不生效(margin 属性只对其相约束的 View 起作用)。
链定位
链定位很简单,ConstraintLayout 中的控件的排列方式就像一条铁链,铁链中的每一环是一个控件。控件通过下图所示的方式约束在一起,可以认为他们是一条链(图为横向的链,纵向同理)。
11.如何设置主页面
在建立一个页面控制文件Activity时,AndroidManifest会将之引入,只要将以下过滤器相关代码引入即可将此页面作为主页面。
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
12.Android Studio常用快捷键有哪些
13.日志工具的使用
import android.util.Log;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG, "onCreate: running");
}
}
| 方法 | 作用 |
|---|---|
| Log.v() | 用于打印琐碎的日志信息。对应级别为verbose,是Android日志里面级别最低的一种。 |
| Log.d() | 用于打印调试信息。对应级别debug, 比verbose高一级。 |
| Log.i() | 用于打印程序员设置的信息,如变量值等。帮助分析程序运行行为,对应级别info。 |
| Log.w() | 用于打印警告信息。提示程序在这个地方可能有潜在的危险,最好去处理一下,对应级别warn,比info高一级。 |
| Log.e() | 用于打印程序中的错误信息。一般代表程序出现了严重问题,必须尽快修复。对应级别为error,比warn高一级。 |
14.在xml文件中定义数组数据
//在res/values 资源目录下创建arrays.xml 数组资源文件
<resources>
<string-array name="array_movie_names">
<item>肖申克的救赎</item>
<item>这个杀手不太冷</item>
<item>霸王别姬</item>
<item>盗梦空间</item>
<item>阿甘正传</item>
</string-array>
</resources>
15.ImageView控件
ImageView 控件的功能是显示 Bitmap 位图或 Drawable 图片资源,主要用于图片展示。
| 属性名称 | 描述 |
|---|---|
| srcCompat | 在图片框所展示的图片内容 |
| background | 可设置背景颜色、背景图片等作为背景展示 |
| setAlpha | 透明度(取值0—1) |
| scaleType | 缩放类型 |
ImageView控件的使用:使用 ImageView 控件显示一张 Android 默认图片,同时设置其背景颜色及透明度,如图:
ImageView 控件的 scaleType 缩放属性值,可使图片以不同的缩放方式显示,但不能控制background 属性所设置的背景图。scaleType 各属性的图片显示效果如图:
我们除了可以在布局文件中设置显示的图片,还可以通过编码的方式设置 ImageView 控件的图片,参考代码如下:
//1.使用 setImageResource()方法设置图片
imageView1.setImageResource(R.mipmap.ic_launcher);
//2.使用 setImageDrawable()方法设置图片
imageView1.setImageDrawable(getResources().getDrawable(R.mipmap.ic_launcher));
//3.使用 setImageBitmap()方法设置图片
String path = "";//图片本地路径
Bitmap bm = BitmapFactory.decodeFile(path);
imageView1.setImageBitmap(bm);
16.ImagButton控件
ImageButton 是 Android 中一个常用的操作按钮控件。ImageButton 控件可以理解为 Button功能和 ImageView 功能的结合,与按钮相关的则和 Button 的用法基本类似,与图片相关的则和ImageView 的用法基本类似。
17. ProgressBar控件
ProgressBar是进度条控件,ProgressBar 的应用场景很多,比如 用户登录时,后台发送请求,以及进行等待服务器返回信息等一些比较耗时的操作。这个时候如果没有提示,用户可能会以为程序崩溃了或手机死机了,会大大降低用户体验,所以在需要进行耗时操作的地方,添加上进度条,让用户知道当前的程序在执行,也可以直观地告诉用户当前任务的执行进度等。
常用属性
18.Toast控件
Android 中提供一种简单的消息提示框机制,Toast 控件可以在用户单击了某些按钮后,提示用户一些信息,提示的信息不能被用户单击,Toast 控件的提示信息根据用户设置的显示时间可自动消失。Toast 控件是通过代码的方式使用的,语法如下:
makeText(Context context, CharSequence text, int duration)
该语法说明如下:
参数 context 表示 Toast 控件显示在哪个上下文,通常是当前 Activity。
参数 text 可以自己写消息内容。
参数 duration 指定显示时间,Toast 控件默认有 LENGTH_SHORT 和 LENGTH_LONG两个常量,分别表示短时间显示和长时间显示。
| 方法名称 | 描述 |
|---|---|
| makeText | 定义消息内容 |
| setGravity | 设置布局位置 |
| getView | 获取Toast视图 |
| show | 显示 |
控件使用
19.PopupWindows控件
PopupWindow(弹窗)是一个可以在 Activity 上显示任意 View 的控件。PopupWindow 控件在 Android 中经常使用,其效果与 Dialog 的效果类似,不同点在于它可以控制显示的位置,比如底部显示等。
| 方法名称 | 描述 |
|---|---|
| PopupWindow | 构造函数,常用参数表: contentView – 弹窗界面内容 width – 弹窗宽度 height – 弹窗高度 focusable – 能否聚焦 |
| setTouchable | 是否支持点击操作 |
| showAtLocation | 按指定位置弹出显示自定义视图 |
| showAsDropDown | 下拉弹出显示自定义视图 |
20.AlertDialog控件
AlertDialog(警告窗体)控件可以在当前的界面上显示一个对话框。这个对话框是置于所有界面元素之上的,能够屏蔽其他控件的交互能力,因此 AlertDialog 一般用于提示一些非常重要的内容或者警告信息 。
控件创建: 在 代 码 中 通 过 构 造 器(AlertDialog.Builder)来构造标题、图标和按钮等内容。创建 AlertDialog 控件的常用方法如表
| 方法名称 | 描述 |
|---|---|
| AlertDialog.Builder | 警告窗体构造器的构造函数 |
| builder.create | 创建警告窗体 |
| 方法名称 | 描述 |
|---|---|
| show | 显示警告窗体 |
| isShowing | 判断警告窗体是否处于显示状态 |
| setTitle | 设置警告窗体标题 |
| setIcon | 设置图标 |
| setMessage | 设置警告内容正文 |
| setButton | 设置操作按钮 |
使用步骤:
创建构造器 AlertDialog.Builder 的对象。
通过构造器对象调用 setTitle()、setMessage()、setIcon()等方法构造对话框的标题、信息和图标等内容。
根据需要调用 setPositive/Negative/NeutralButton()方法设置正面按钮、负面按钮和中立按钮。
调用构造器对象的 create()方法创建 AlertDialog 对象。
AlertDialog 对象调用 show()方法,让对话框在界面上显示。
21.ListView控件
ListView 控件是 Android 操作系统为我们提供的一种列表显示的控件。它以列表的形式展示具体数据内容,并且能够根据数据的长度自适应屏幕显示。
ListView 控件允许用户通过上下滑动来将屏幕外的数据滚动到屏幕内,同时将屏幕内原有的数据滚动出屏幕,从而显示更多的数据内容。
ListView的用法:
1.UI布局设计
在activity_main.xml中加入ListView控件
设计列表每行显示内容的布局,每行显示一张图片和文本的
2.使用适配器显示数据
//显示ListView
//1.获取ListView
myListView = findViewById(R.id.myListView);
//2.创建适配器对象
myAdapter = new ArrayAdapter<String>
(MainActivity.this, android.R.layout.simple_list_item_1,books);
//3.加载适配器
myListView.setAdapter(myAdapter);
常用适配器
•BaseAdapter:•即基本的适配器。它实际上就是一个抽象类,该类拥有四个抽象方法。根据这几个抽象方法来对ListView进行数据适配
•SimpleAdapter:•SimpleAdapter继承自BaseAdapter,实现了BaseAdapter的四个抽象方法,分别是getCount()、getItem()、getItemId()、getView()方法。
•ArrayAdapter:•ArrayAdapter也继承自BaseAdapter,与SimpleAdapter相同。ArrayAdapter通常用于适配TextView控件,例如Android系统中的设置菜单(Setting)。