ActivityMain .java
package study.com.android; import android.app.ExpandableListActivity; import android.os.Bundle; import android.view.ContextMenu; import android.view.MenuItem; import android.view.View; import android.view.ContextMenu.ContextMenuInfo; import android.widget.ExpandableListAdapter; import android.widget.ExpandableListView; import android.widget.TextView; import android.widget.Toast; import android.widget.ExpandableListView.ExpandableListContextMenuInfo; public class ActivityMain extends ExpandableListActivity { private ExpandableListAdapter mAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setTitle("ExpandableList"); mAdapter = new MyExpandableListAdapter(this); setListAdapter(mAdapter); registerForContextMenu(this.getExpandableListView()); } // 为列表的每一项创建上下文菜单(即长按后 呼出的菜单) @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { menu.setHeaderTitle("ContexMenu"); menu.add(0, 0, 0, "ContextMenu"); } // 单击上下文菜单后的逻辑 @Override public boolean onContextItemSelected(MenuItem item) { ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) item .getMenuInfo(); String title = ((TextView) info.targetView).getText().toString(); int type = ExpandableListView .getPackedPositionType(info.packedPosition); if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) { int groupPos = ExpandableListView .getPackedPositionGroup(info.packedPosition); int childPos = ExpandableListView .getPackedPositionChild(info.packedPosition); Toast.makeText( this, title + "-Group Index" + groupPos + "Child Index:" + childPos, Toast.LENGTH_SHORT).show(); return true; } return false; } }
MyExpandableListAdapter.java
package study.com.android; import android.content.Context; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.BaseExpandableListAdapter; import android.widget.TextView; public class MyExpandableListAdapter extends BaseExpandableListAdapter { private Context mContext; // 父列表数据 private String[] groups = { "group1", "group2", "group3", "group4", "" }; // 子列表数据 private String[][] children = { { "child1" }, { "child1", "child2" }, { "child1", "child2", "child3" }, { "child1", "child2", "child3", "child4" }, }; MyExpandableListAdapter(Context context) { mContext = context; } @Override public Object getChild(int groupPosition, int childPosition) { // TODO Auto-generated method stub return children[groupPosition][childPosition]; } @Override public long getChildId(int groupPosition, int childPosition) { // TODO Auto-generated method stub return childPosition; } // 取子列表中的某一项的view @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { TextView textView = getGenericView(); ; textView.setText(getChild(groupPosition, childPosition).toString()); return textView; } @Override public int getChildrenCount(int groupPosition) { // TODO Auto-generated method stub return children[groupPosition].length; } @Override public Object getGroup(int groupPosition) { return groups[groupPosition]; } @Override public int getGroupCount() { // TODO Auto-generated method stub return groups.length; } @Override public long getGroupId(int groupPosition) { // TODO Auto-generated method stub return groupPosition; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { TextView textView = getGenericView(); textView.setText(getGroup(groupPosition).toString()); return textView; } @Override public boolean hasStableIds() { // TODO Auto-generated method stub return true; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { // TODO Auto-generated method stub return true; } // 获取某一项的view的逻辑 private TextView getGenericView() { AbsListView.LayoutParams lp = new AbsListView.LayoutParams( ViewGroup.LayoutParams.FILL_PARENT, 48); TextView textView = new TextView(mContext); textView.setLayoutParams(lp); textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT); textView.setPadding(32, 0, 0, 0); return textView; } }
相关推荐
在Android应用开发中,`ExpandableListView`是一个非常有用的控件,它允许用户展示一个可折叠/展开的列表,这种列表通常用于显示层次结构的数据,如目录结构、菜单或者RSS阅读器中的文章分类。在这个例子中,我们...
Android 列表控件实现展开、收缩功能 Android 列表控件是一种常见的用户界面控件,它可以显示大量的数据信息。为了提高用户体验,Android 列表控件提供了展开和收缩功能,使用户可以自由地展开或收缩列表项,以便更...
`ExpandableListView`是Android平台中一个非常实用的列表控件,它允许用户展示层次结构的数据,例如,一个父项可以展开显示多个子项。在Android应用开发中,当需要展示具有嵌套关系的数据时,`ExpandableListView`是...
1. **折叠/展开机制**:Android中实现收缩控件的核心是折叠/展开机制。这通常通过监听用户的触摸事件或者编程触发来实现。例如,可以使用`OnClickListener`来监听点击事件,当用户点击特定按钮时,执行收缩或展开...
"Android日历可左右活动上下定位收缩"这个项目的核心在于实现一个高度自定义的日历控件,以下将详细解释实现这一功能的关键知识点。 首先,我们需要了解Android的View体系结构。在Android中,自定义视图通常继承自...
Android 更多条目收缩展开控件ExpandView 是一个非常实用的控件,能够帮助开发者快速实现列表控件中的多条目数据的收缩和展开功能。在 Android 开发中,我们经常使用列表控件,而有时候列表控件条目中又会是多条目...
以上就是Android中实现类似QQ好友列表的收缩与展开功能的基本步骤。通过`ExpandableListView`,你可以创建更复杂的分组列表,同时提供良好的用户体验。记得在实际开发中,还可以添加更多功能,如点击事件处理、动画...
`ExpandableListView`是`ListView`的一个扩展,继承了其基本的列表展示功能,并增加了可折叠/展开的特性。它的核心概念包括父组(Group)和子项(Child),其中每个父组可以包含多个子项。在实际应用中,开发者需要...
通过以上步骤,你就能实现一个基本的展开收缩功能的ExpandableListView。为了提高用户体验,还可以考虑添加动画效果,优化性能,如使用ViewHolder模式减少视图查找,以及根据数据量动态加载子项等。记住,关键是理解...
"Android ListView项收缩效果"指的是为ListView的每一项添加一种交互式的动画效果,即当用户点击某一项时,该项会进行收缩或展开操作,通常用于实现如折叠菜单、详细信息的隐藏与显示等功能。这种效果不仅提升了用户...
这种效果常见于许多应用程序的展开式菜单、抽屉导航或折叠式控件中,为用户提供更丰富的视觉体验。 首先,属性动画与传统的视图动画(View Animation)有所不同。视图动画只是模拟动画效果,但实际上并未改变对象的...
在Android开发中,`ExpandListView`是一个非常实用的控件,它允许用户展开或收缩列表项,以此来显示或隐藏更多的子项内容。这个控件为用户提供了更丰富的交互体验,尤其是在展示层次结构数据时。标题"可展开可收缩的...
总之,创建一个可向四周展开的自定义菜单控件涉及到Android视图体系的深入理解,包括绘图、触摸事件处理、动画和布局管理等多个方面。通过这样的实践,开发者不仅可以提升自身的技术能力,还能为应用程序带来独特的...
在Android应用开发中,设计一个美观且功能丰富的用户界面是至关重要的。"Android菜单控件,可旋转,鸿洋大神菜单控件"是专为Android平台设计的一种高级交互控件,它允许开发者创建出动态、吸引人的菜单,提供丰富的...
这个自定义视图需要继承自Android原生的TextView,并添加一些额外的功能来处理动画。在代码中,我们需要维护一个变量来记录当前TextView的显示状态(展开或收缩),并提供一个方法供外部调用来切换状态。 ```java ...
在Android开发中,ListView是一种常用的控件,用于展示大量数据列表。它允许用户滚动查看多个行项目,并且可以通过自定义适配器(Adapter)来显示各种类型的数据。本示例"ListView的item点击可扩展(类似百度云)"显然...
Google的Material Design提供了丰富的过渡和动画指南,如升入、滑出、展开和收缩等,开发者可以通过遵循这些指南来创建符合Material Design规范的加载动画。 10. **优化性能** 尽管动画能提升用户体验,但过多或...
在Android开发中,ExpandableView是一种常见的用户界面组件,它允许用户点击后展开或收缩内容,以展示更多或更少的信息。这种视图通常用于列表项、菜单或者设置页面,为用户提供更加灵活的交互体验。标题...
是普通的列表控件进阶版, 可以自由的把列表进行收缩, 非常的方便兼好看。 首先看看我完成的截图, 虽然界面不漂亮, 但大家可以自己去修改界面。 该控件需要一个主界面XML 一个标题界面XML及一个列表内容界面XML ...