`

ExpandableListView小图标替换

阅读更多
ExpandableListView的小图标有个状态,一个是不点击的情况,一个是点击后展开的情况,用xml配置如下:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
       <item android:state_expanded="true" android:drawable="@drawable/narrow_select" />
       <item android:drawable="@drawable/narrow" />
</selector>

Java的代码如下:
ExpandableListView listView = getExpandableListView();
listView.setGroupIndicator(this.getResources().getDrawable(R.drawable.group_icon_selector));

注意:不知道为什么,使用自定义的GroupIndicator会发生图片被拉伸的现象,为了解决这个问题需要定义一个长度为groups.length的boolean数组:
private boolean[] isOpen=new boolean[groups.length];

然后重写OnGroupCollapseListener和OnGroupExpandListener用于修改当前group的状态:
expandableListView.setOnGroupCollapseListener(onGroupCollapseListener);
expandableListView.setOnGroupExpandListener(onGroupExpandListener);
expandableListView.setGroupIndicator(null);//不要自带的了!!!
OnGroupCollapseListener onGroupCollapseListener=new OnGroupCollapseListener(){

			@Override
			public void onGroupCollapse(int groupPosition) {
				// TODO Auto-generated method stub
				isOpen[groupPosition]=false;
			}
			
		};
		
OnGroupExpandListener onGroupExpandListener=new OnGroupExpandListener(){

			@Override
			public void onGroupExpand(int groupPosition) {
				// TODO Auto-generated method stub
				isOpen[groupPosition]=true;
			}
			
		};

最后在getGroupView()中应用,代码片段如下:
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
					View convertView, ViewGroup parent) {
				// TODO Auto-generated method stub
				TextView textView=null;
				if(convertView==null){
					textView=new TextView(mContext);
					AbsListView.LayoutParams lp = new AbsListView.LayoutParams(  
		                    ViewGroup.LayoutParams.FILL_PARENT, 50);  
		            textView.setLayoutParams(lp);
		            textView.setGravity(Gravity.CENTER);
		            textView.setPadding(10, 0, 0, 0);
		            textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16.0f);
		            textView.setTextColor(0xFFC6B39C);
		            textView.setBackgroundResource(R.drawable.bg_tv);//bg_tv_expand
		            convertView=textView;
				}else{
					textView=(TextView)convertView;
				}
				//为了处理图标被拉伸的问题!这里采用偷懒的办法让textView傍边产生一个图标,如果GroupView只是一个TextView的话,推荐这样做!
				if(isOpen[groupPosition]){
					Drawable leftDrawable= resources.getDrawable(R.drawable.arrow_down_on);
	            	leftDrawable.setBounds(0, 0, leftDrawable.getMinimumWidth(), leftDrawable.getMinimumHeight());
	            	textView.setCompoundDrawables(leftDrawable, null, null, null);
				}else{
					Drawable leftDrawable= resources.getDrawable(R.drawable.arrow_right_off);
					leftDrawable.setBounds(0, 0, leftDrawable.getMinimumWidth(), leftDrawable.getMinimumHeight());
					textView.setCompoundDrawables(leftDrawable, null, null, null);
				}
				textView.setText(((Market)getGroup(groupPosition)).market);
	            return textView;
}


over!

Android版手风琴(ExpandableListView)

创新源于模仿之四:增强的ExpandableListView

android api里的例子:

import android.app.ExpandableListActivity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Gravity;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.AbsListView;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ExpandableListView.ExpandableListContextMenuInfo;

import com.example.android.apis.R;

/**
 * Demonstrates expandable lists using a custom {@link ExpandableListAdapter}
 * from {@link BaseExpandableListAdapter}.
 */
public class ExpandableList1 extends ExpandableListActivity {

    ExpandableListAdapter mAdapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Set up our adapter
        mAdapter = new MyExpandableListAdapter();
        setListAdapter(mAdapter);
        registerForContextMenu(getExpandableListView());
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
        menu.setHeaderTitle("Sample menu");
        menu.add(0, 0, 0, R.string.expandable_list_sample_action);
    }
    
    @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 + ": Child " + childPos + " clicked in group " + groupPos,
                    Toast.LENGTH_SHORT).show();
            return true;
        } else if (type == ExpandableListView.PACKED_POSITION_TYPE_GROUP) {
            int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition); 
            Toast.makeText(this, title + ": Group " + groupPos + " clicked", Toast.LENGTH_SHORT).show();
            return true;
        }
        
        return false;
    }

    /**
     * A simple adapter which maintains an ArrayList of photo resource Ids. 
     * Each photo is displayed as an image. This adapter supports clearing the
     * list of photos and adding a new photo.
     *
     */
    public class MyExpandableListAdapter extends BaseExpandableListAdapter {
        // Sample data set.  children[i] contains the children (String[]) for groups[i].
        private String[] groups = { "People Names", "Dog Names", "Cat Names", "Fish Names" };
        private String[][] children = {
                { "Arnold", "Barry", "Chuck", "David" },
                { "Ace", "Bandit", "Cha-Cha", "Deuce" },
                { "Fluffy", "Snuggles" },
                { "Goldy", "Bubbles" }
        };
        
        public Object getChild(int groupPosition, int childPosition) {
            return children[groupPosition][childPosition];
        }

        public long getChildId(int groupPosition, int childPosition) {
            return childPosition;
        }

        public int getChildrenCount(int groupPosition) {
            return children[groupPosition].length;
        }

        public TextView getGenericView() {
            // Layout parameters for the ExpandableListView
            AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT, 64);

            TextView textView = new TextView(ExpandableList1.this);
            textView.setLayoutParams(lp);
            // Center the text vertically
            textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
            // Set the text starting position
            textView.setPadding(36, 0, 0, 0);
            return textView;
        }
        
        public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
                View convertView, ViewGroup parent) {
            TextView textView = getGenericView();
            textView.setText(getChild(groupPosition, childPosition).toString());
            return textView;
        }

        public Object getGroup(int groupPosition) {
            return groups[groupPosition];
        }

        public int getGroupCount() {
            return groups.length;
        }

        public long getGroupId(int groupPosition) {
            return groupPosition;
        }

        public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
                ViewGroup parent) {
            TextView textView = getGenericView();
            textView.setText(getGroup(groupPosition).toString());
            return textView;
        }

        public boolean isChildSelectable(int groupPosition, int childPosition) {
            return true;
        }

        public boolean hasStableIds() {
            return true;
        }

    }
}




Android UI 之实现多级列表TreeView
http://blog.csdn.net/carrey1989/article/details/10227165
  • 大小: 28.4 KB
分享到:
评论

相关推荐

    ExpandableListView小项目展示

    在这个小项目中,开发者通过`ExpandableListView`创建了一个演示应用,以便于其他开发者学习和借鉴。 首先,我们要理解`ExpandableListView`的基本使用方法。它继承自`AdapterView`,因此需要一个适配器(`...

    Android改变ExpandableListView的indicator图标实现方法

    本文实例讲述了Android改变ExpandableListView的indicator图标实现方法。分享给大家供大家参考,具体如下: 1)定义xml文件先,命名为expand_list_indicator.xml &lt;?xml version=1.0 encoding=UTF-8?&gt; &lt;...

    ExpandableListView

    在Android开发中,`ExpandableListView`是一种非常实用的控件,它允许用户展示具有层级关系的数据,类似于树形结构。这种控件非常适合用来显示有组织的、分组的信息,例如菜单、目录或者分类数据。在本教程中,我们...

    自定义ExpandableListView结合Sqlite

    `Fragment`是Android中用于构建动态、模块化应用的组件,它可以在Activity中独立存在和替换,便于实现多屏设备上的布局切换。为了在`Fragment`中使用`ExpandableListView`,你需要创建一个新的`Fragment`类,然后在`...

    ExpandableListView实现下拉功能

    默认情况下,`ExpandableListView`会显示一个加号或减号图标来表示组是否展开。要“去掉了下拉标志”,我们需要自定义适配器(Adapter),覆盖`getGroupView()`方法,不再显示这个图标。可以通过设置组视图的布局来...

    ExpandableListView 点击和长按事件

    在Android开发中,`ExpandableListView` 是一个非常实用的控件,用于展示可以展开和折叠的列表。这个控件允许用户对数据进行分组,增强了用户体验,特别是处理层次结构数据时。本篇文章将深入探讨如何处理`...

    ExpandableListView的使用实例

    在Android开发中,`ExpandableListView`是一种常用的控件,它允许用户展开和折叠分组,每个分组下可以包含多个子项。这种控件在显示层次结构数据时非常实用,比如目录结构、菜单列表或者分类信息展示。下面将详细...

    ExpandableListView实现购物车页面

    在Android应用开发中,"ExpandableListView实现购物车页面"是一个常见的需求,它涉及到用户界面设计、数据管理和交互。ExpandableListView是Android SDK提供的一种可扩展的列表视图,允许用户展示分组数据,每组内...

    ExpandableListView 长按事件demo

    在Android开发中,`ExpandableListView`是一种常用的控件,它允许用户展示可折叠的列表,其中每个父项可以展开显示多个子项。这个控件非常适合于需要层次结构数据展示的应用,例如目录树、菜单或者分类信息。在这个...

    带全选的ExpandableListView

    在Android开发中,`ExpandableListView`是一种常用的控件,用于展示可以展开和折叠的分组数据。这个项目“带全选的ExpandableListView”显然着重于增强这种控件的功能,使其具有全选子项的能力。这样的功能在处理...

    expandablelistview自定义实现单选效果

    在Android开发中,ExpandableListView是一个非常有用的控件,它允许我们展示可折叠的列表,通常用于层次结构的数据展示。本教程将详细讲解如何自定义ExpandableListView,使其一级标题具有类似于RadioButton的单选...

    Android之ExpandableListView控件

    在Android开发中,`ExpandableListView`是一种常用的控件,它扩展了标准的`ListView`功能,允许子项可以被展开或折叠,呈现层次结构的数据。这个控件非常适合用来展示具有树状结构的信息,比如菜单、目录或者组织...

    一个ExpandableListView的例子

    在Android开发中,`ExpandableListView`是一种常用的控件,它允许用户展开和折叠分组,通常用于显示具有层次结构的数据。在这个例子中,我们将会深入探讨如何利用`ExpandableListView`来创建一个多级菜单分类展示的...

    ExpandableListView仿QQ列表的实现

    在Android开发中,`ExpandableListView`是一种常用的控件,它可以展示可折叠的子列表,类似于QQ应用中的联系人列表。这个"ExpandableListView仿QQ列表的实现" demo旨在教你如何利用`ExpandableListView`创建类似QQ...

    ExpandableListView实现二级列表购物车

    "ExpandableListView实现二级列表购物车" ExpandableListView是Android中的一种视图组件,用于显示二级列表的数据。它可以将数据分组显示,方便用户浏览和操作。下面我们来详细介绍如何使用ExpandableListView实现...

    android ExpandableListView

    在Android开发中,`ExpandableListView`是一种特殊的`ListView`,它允许子项可以展开或折叠,呈现层次结构的数据。这种视图控件通常用于显示具有分组和子项的复杂数据,例如联系人列表、菜单目录或者层级结构的任务...

    ExpandableListView展开折叠动画效果

    在Android开发中,`ExpandableListView`是一种常用的控件,用于展示可以展开和折叠的列表。这个控件允许用户在一级列表项下显示更详细的数据,通常用于构建层级结构清晰的列表,例如菜单、目录或者分类信息。在给定...

Global site tag (gtag.js) - Google Analytics