一、Textview
match_parent:表示让当前控件大小与父布局大小一样
wrap_content:控件大小刚好能包含住里面的内容
android:gravity:指定文字对齐方式
(与android:layout_gravity对比,用于指定控件在布局中的对齐方式)
android:textSize:文字大小,用sp作单位
二、Button
android:textAllaps:取消默认字母全部大写
三、EditText
android:hint:显示提示性文本
android:maxLines:设置文本框最大行数
四、ImageView
setImageResource():设置需要显示的图片
五、ProgressBar
默认为圆形转动的进度条,通过style属性可以指定为水平进度条
style=”?android:attr/progressBarStyleHorizontal”
六、AlertDialog
在当前界面弹出一个对话框
setPositiveButton():为对话框设置确定按钮的点击事件
setNegativeButton():设置取消按钮的点击事件
七、ProgressDialog
在对话框中显示一个进度条,一般用于表示当前操作比较耗时,让用户耐心等待。
八、加载布局
1 | LayoutInflater.from(context).inflate(R.layout.title, this); |
LayoutInflater的from()方法可以构建出一个LayoutInflater对象,然后调用inflate()方法可以动态加载一个布局文件,inflate第一个参数为要加载的布局文件的id,第二个参数是给加载好的布局再添加一个父布局。
九、RecyclerView
创建一个显示许多水果的界面。

设置布局文件
在展示的activity对应的布局xml文件中添加使用recyclerView的标签
1
2
3
4
5
6
7
8
9
10
11
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/recycler_view" />
</LinearLayout>新建存储每一个列表项的布局xml文件,如fruit_item.xml,每一个item需要展示一个图片和一段描述文字,因此fruit_item.xml文件中需要包含一个ImageView和一个TextView
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/fruit_image"
android:layout_gravity="center_horizontal" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:id="@+id/fruit_name"
android:layout_marginTop="10dp" />
</LinearLayout>
编码
创建存储每一个列表项的类fruit.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19public class Fruit {
private String name;
private int imageId;
public Fruit(String name, int imageId) {
this.name = name;
this.imageId = imageId;
}
public String getName() {
return name;
}
public int getImageId() {
return imageId;
}
}为RecyclerView准备一个适配器FruitAdapter,该适配器继承自RecyclerView.Adapter,并将泛型指定为FruitAdapter.ViewHolder,该ViewHolder是FruitAdapter中定义的一个内部类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> {
private List<Fruit> mFruitList;
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit_item, parent, false);
ViewHolder holder = new ViewHolder(view);
return holder;
}
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
Fruit fruit = mFruitList.get(position);
holder.fruitImage.setImageResource(fruit.getImageId());
holder.fruitName.setText(fruit.getName());
}
public int getItemCount() {
return mFruitList.size();
}
static class ViewHolder extends RecyclerView.ViewHolder {
View fruitView;
ImageView fruitImage;
TextView fruitName;
public ViewHolder(View view) {
super(view);
fruitView = view;
fruitImage = (ImageView) view.findViewById(R.id.fruit_image);
fruitName = (TextView) view.findViewById(R.id.fruit_name);
}
}
public FruitAdapter(List<Fruit> fruitList) {
mFruitList = fruitList;
}
}在活动中设置布局方式(线性布局、网格布局等)
1
2
3
4
5
6
7
8
9
10
11
12protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initFruits();
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
//StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL);
//layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);//添加之后可以横向滚动
recyclerView.setLayoutManager(layoutManager);
FruitAdapter adapter = new FruitAdapter(fruitList);
recyclerView.setAdapter(adapter);
}适配器中notifyiteminserted()方法用于通知列表有新的数据插入,这样才能将新增的消息在RecyclerView中显示出来;RecyclerView的scrollToPosition()方法将显示的数据定位到最后一行,保证一定可以看到最后发出的消息。