复杂点的常用View:Spinner、GridView、ListView、ScrollView、RecyclerView、AdapterView
-
Spinner(下拉列表框)
-
常见属性:
- entries :通过在
strings.xml
中定义数组资源,并在此处引用,来设置下拉列表的选项。例如,在strings.xml
中定义<string - array name="fruits_array"><item>苹果</item><item>香蕉</item><item>橙子</item></string - array>
,在Spinner
中使用android:entries="@array/fruits_array"
。 - prompt :设置当点击
Spinner
时显示的提示信息,用于告知用户选择的内容类型,如android:prompt="请选择水果"
。此属性在对话框样式的Spinner
中更有用。
- entries :通过在
-
常见事件:
- 选项选择监听 :通过
AdapterView.OnItemSelectedListener
监听用户选择的选项。
- 选项选择监听 :通过
-
kotlin
kotlin
val spinner: Spinner = findViewById(R.id.spinner)
spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>, view: View?, position: Int, id: Long) {
val selectedItem = parent.getItemAtPosition(position).toString()
// 根据选择的选项执行相应逻辑
}
override fun onNothingSelected(parent: AdapterView<*>) {
// 用户未选择任何选项时的逻辑(通常较少使用)
}
}
-
GridView(网格视图)
-
常见属性:
- numColumns :设置网格视图的列数,可以是具体数字(如
android:numColumns="3"
表示 3 列),也可以设置为auto_fit
让系统根据屏幕宽度自动适配列数。 - verticalSpacing :设置网格项之间的垂直间距,单位为像素或其他尺寸单位,如
android:verticalSpacing="10dp"
。 - horizontalSpacing :设置网格项之间的水平间距,类似
android:horizontalSpacing="10dp"
。
- numColumns :设置网格视图的列数,可以是具体数字(如
-
常见事件:
- 项点击监听 :通过
AdapterView.OnItemClickListener
监听网格项的点击事件。
- 项点击监听 :通过
-
kotlin
ini
val gridView: GridView = findViewById(R.id.grid_view)
gridView.onItemClickListener = AdapterView.OnItemClickListener { parent, view, position, id ->
// 处理网格项点击逻辑,position 为点击项的位置
}
-
ListView(列表视图)
-
常见属性:
- divider :设置列表项之间的分隔线,可以是颜色(如
android:divider="#CCCCCC"
)或图片资源(如android:divider="@drawable/divider_line"
)。 - dividerHeight :设置分隔线的高度,如
android:dividerHeight="1dp"
。
- divider :设置列表项之间的分隔线,可以是颜色(如
-
常见事件:
- 项点击监听 :使用
AdapterView.OnItemClickListener
监听列表项的点击。
- 项点击监听 :使用
-
kotlin
ini
val listView: ListView = findViewById(R.id.list_view)
listView.onItemClickListener = AdapterView.OnItemClickListener { parent, view, position, id ->
// 处理列表项点击逻辑,position 为点击项的位置
}
- 项长按监听 :通过
AdapterView.OnItemLongClickListener
监听列表项的长按事件。
kotlin
arduino
listView.onItemLongClickListener = AdapterView.OnItemLongClickListener { parent, view, position, id ->
// 处理列表项长按逻辑,返回 true 表示事件已处理,不再触发其他长按相关操作
true
}
-
ScrollView(滚动视图)
-
常见属性:
- scrollbars :设置滚动条的显示方式,取值有
none
(不显示滚动条)、horizontal
(仅显示水平滚动条)、vertical
(仅显示垂直滚动条)、both
(显示水平和垂直滚动条),例如android:scrollbars="vertical"
。 - fillViewport :设置为
true
时,ScrollView
会尝试填满可用空间,常用于需要自适应屏幕高度的场景,如android:fillViewport="true"
。
- scrollbars :设置滚动条的显示方式,取值有
-
常见事件:
- 滚动监听 :可以通过自定义一个继承自
ViewTreeObserver.OnScrollChangedListener
的监听器来监听滚动事件。
- 滚动监听 :可以通过自定义一个继承自
-
kotlin
kotlin
val scrollView: ScrollView = findViewById(R.id.scroll_view)
scrollView.viewTreeObserver.addOnScrollChangedListener(object : ViewTreeObserver.OnScrollChangedListener {
override fun onScrollChanged() {
val scrollY = scrollView.scrollY
// 根据滚动的 Y 坐标执行相应逻辑,如加载更多数据
}
})
-
RecyclerView(回收视图)
-
常见属性:
- 本身没有太多直接设置外观的属性,主要依赖于
LayoutManager
和ItemDecoration
。例如,通过LinearLayoutManager
来控制布局方向(垂直或水平)。在代码中设置RecyclerView
的LayoutManager
:
- 本身没有太多直接设置外观的属性,主要依赖于
-
kotlin
ini
val recyclerView: RecyclerView = findViewById(R.id.recycler_view)
val layoutManager = LinearLayoutManager(this)
recyclerView.layoutManager = layoutManager
-
常见事件:
- 项点击监听 :由于
RecyclerView
没有内置的点击事件监听方法,通常在ViewHolder
中为项视图设置点击监听器。
- 项点击监听 :由于
kotlin
arduino
class MyViewHolder(view: View) : RecyclerView.ViewHolder(view) {
init {
view.setOnClickListener {
val position = adapterPosition
if (position!= RecyclerView.NO_POSITION) {
// 处理项点击逻辑,position 为点击项的位置
}
}
}
}
- ScrollView(滚动视图)
AdapterView
是一个抽象类,它是 ListView
、GridView
、Spinner
等视图类的基类,用于显示由 Adapter
提供的数据。以下是 AdapterView
常见的属性和事件介绍:
属性
-
android:choiceMode
-
说明 :用于设置列表项的选择模式。在
ListView
等AdapterView
的子类中常用。取值有:none
:默认值,不允许选择列表项。singleChoice
:只允许单选列表项。multipleChoice
:允许多选列表项。multipleChoiceModal
:多选模式,并且会显示一个操作栏用于处理选中的项(通常在 Android 3.0 及以上版本使用)。
-
示例 :在 XML 布局文件中,对于
ListView
可以设置android:choiceMode="singleChoice"
。
-
-
android:drawSelectorOnTop
- 说明 :设置为
true
时,选中项的选择器(通常是背景颜色变化等效果)会绘制在列表项内容的上方;设置为false
时,选择器绘制在内容下方。 - 示例 :
android:drawSelectorOnTop="false"
- 说明 :设置为
-
android:fastScrollEnabled
- 说明:控制是否启用快速滚动条。当列表数据较多时,启用此属性可在列表边缘显示一个快速滚动条,方便用户快速定位到指定位置。
- 示例 :
android:fastScrollEnabled="true"
-
android:footerDividersEnabled
- 说明 :用于控制是否在添加到列表底部的页脚视图之间绘制分隔线。通常在使用
addFooterView(View v)
方法添加了页脚视图后起作用。 - 示例 :
android:footerDividersEnabled="true"
- 说明 :用于控制是否在添加到列表底部的页脚视图之间绘制分隔线。通常在使用
-
android:headerDividersEnabled
- 说明 :与
android:footerDividersEnabled
类似,用于控制是否在添加到列表顶部的页眉视图之间绘制分隔线,配合addHeaderView(View v)
方法使用。 - 示例 :
android:headerDividersEnabled="true"
- 说明 :与
事件
-
OnItemClickListener
-
说明:当用户点击列表中的某一项时触发该事件。
-
示例代码:
-
java
java
AdapterView<?> adapterView = findViewById(R.id.adapter_view);
adapterView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// parent 是触发点击事件的 AdapterView
// view 是被点击的列表项视图
// position 是被点击列表项在 Adapter 中的位置
// id 是被点击列表项的唯一标识符,通常与 Adapter 中 getItemId(int position) 方法返回值对应
Object item = parent.getItemAtPosition(position);
// 在此处理点击后的逻辑,例如根据点击的项进行不同操作
}
});
-
OnItemLongClickListener
-
说明:当用户长按列表中的某一项时触发该事件。
-
示例代码:
-
java
java
adapterView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
// 处理长按逻辑
// 返回 true 表示事件已处理,不会再触发 OnItemClickListener;返回 false 则反之
return true;
}
});
-
OnItemSelectedListener
-
说明 :用于监听
AdapterView
中某一项被选中的事件,常用于Spinner
和处于单选模式下的ListView
等。 -
示例代码:
-
java
less
adapterView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// 当有项被选中时触发,处理选中后的逻辑
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// 当没有项被选中时触发,通常在 Spinner 初始状态或取消所有选择时调用
}
});