20
2014
09

Android开发学习:菜单展开收缩效果

Android开发学习

Android开发中,需要用到模仿QQ联系人的菜单展开收缩效果

新建布局文件:activity_two.xml,使用ExpandableListView控件,代码内容:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  

    android:layout_width="fill_parent"  

    android:layout_height="fill_parent"  

    android:orientation="vertical" >  

    <ExpandableListView   

        android:id="@+id/list"  

android:layout_width="fill_parent"  

android:layout_height="fill_parent"  

        android:background="#ffffff"  

        android:cacheColorHint="#00000000"  

        android:listSelector="#00000000"  

        android:drawSelectorOnTop="false"

        android:layout_weight="1"

        android:groupIndicator="@null"   

        >  

          

    </ExpandableListView>  

</LinearLayout>

实现的TwoActivity.java代码如下:

package com.zhengdecai.contractioninfo;


import android.app.Activity;

import android.graphics.Color;

import android.os.Bundle;

import android.view.Gravity;

import android.view.View;

import android.view.ViewGroup;

import android.view.Window;

import android.widget.AbsListView;

import android.widget.BaseExpandableListAdapter;

import android.widget.ExpandableListAdapter;

import android.widget.ExpandableListView;

import android.widget.ExpandableListView.OnChildClickListener;

import android.widget.ExpandableListView.OnGroupExpandListener;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.TextView;

import android.widget.Toast;


/**

 * 菜单展开收缩效果

 * 

 * @author 郑德才

 *

 */

public class TwoActivity extends Activity{  

 

private int sign= -1;//控制列表的展开  

    protected void onCreate(Bundle savedInstanceState) {  

        // TODO Auto-generated method stub  

        super.onCreate(savedInstanceState);  

        requestWindowFeature(Window.FEATURE_NO_TITLE);  

        setContentView(R.layout.activity_two);  

  

        final ExpandableListAdapter adapter = new BaseExpandableListAdapter() {  

            //设置组视图的图片  

            int[] logos = new int[] { R.drawable.ic_launcher, R.drawable.ic_launcher,R.drawable.ic_launcher};  

            //设置组视图的显示文字  

            private String[] generalsTypes = new String[] { "魏", "蜀", "吴" };  

            //子视图显示文字  

            private String[][] generals = new String[][] {  

                    { "夏侯惇", "甄姬", "许褚", "郭嘉", "司马懿", "杨修" },  

                    { "马超", "张飞", "刘备", "诸葛亮", "黄月英", "赵云" },  

                    { "吕蒙", "陆逊", "孙权", "周瑜", "孙尚香" }

            };

            //子视图图片  

            public int[][] generallogos = new int[][] {  

                    { R.drawable.ic_launcher, R.drawable.ic_launcher,  

                            R.drawable.ic_launcher, R.drawable.ic_launcher,  

                            R.drawable.ic_launcher, R.drawable.ic_launcher },  

                    { R.drawable.ic_launcher, R.drawable.ic_launcher,  

                            R.drawable.ic_launcher, R.drawable.ic_launcher,  

                            R.drawable.ic_launcher, R.drawable.ic_launcher },  

                    { R.drawable.ic_launcher, R.drawable.ic_launcher, R.drawable.ic_launcher,  

                            R.drawable.ic_launcher, R.drawable.ic_launcher } };  

              

            //自己定义一个获得文字信息的方法  

            TextView getTextView() {  

                AbsListView.LayoutParams lp = new AbsListView.LayoutParams(  

                        ViewGroup.LayoutParams.FILL_PARENT, 64);  

                TextView textView = new TextView(  

                TwoActivity.this);

                textView.setLayoutParams(lp);  

                textView.setGravity(Gravity.CENTER_VERTICAL);  

                textView.setPadding(5, 0, 0, 0);  

                textView.setTextSize(20);  

                textView.setTextColor(Color.BLACK);  

                return textView;  

            }  

  

              

            //重写ExpandableListAdapter中的各个方法  

            @Override  

            public int getGroupCount() {  

                // TODO Auto-generated method stub  

                return generalsTypes.length;  

            }  

  

            @Override  

            public Object getGroup(int groupPosition) {  

                // TODO Auto-generated method stub  

                return generalsTypes[groupPosition];  

            }  

  

            @Override  

            public long getGroupId(int groupPosition) {  

                // TODO Auto-generated method stub  

                return groupPosition;  

            }  

  

            @Override  

            public int getChildrenCount(int groupPosition) {  

                // TODO Auto-generated method stub  

                return generals[groupPosition].length;  

            }  

  

            @Override  

            public Object getChild(int groupPosition, int childPosition) {  

                // TODO Auto-generated method stub  

                return generals[groupPosition][childPosition];  

            }  

  

            @Override  

            public long getChildId(int groupPosition, int childPosition) {  

                // TODO Auto-generated method stub  

                return childPosition;  

            }  

  

            @Override  

            public boolean hasStableIds() {  

                // TODO Auto-generated method stub  

                return true;  

            }  

  

            @Override  

            public View getGroupView(int groupPosition, boolean isExpanded,  

                    View convertView, ViewGroup parent) {  

                // TODO Auto-generated method stub  

                LinearLayout ll = new LinearLayout(  

                TwoActivity.this);  

                ll.setOrientation(0);  

                ImageView logo1 = new ImageView(TwoActivity.this);  

                logo1.setImageResource(R.drawable.lt_open);

                if(!isExpanded){

                logo1.setImageResource(R.drawable.lt_norml);

                }

                logo1.setPadding(10, 15, 0, 0);

                                

                ImageView logo = new ImageView(TwoActivity.this);  

                logo.setImageResource(logos[groupPosition]);  

                logo.setPadding(10, 0, 0, 0);

                TextView textView = getTextView();  

                textView.setTextColor(Color.BLACK);  

                textView.setText(getGroup(groupPosition).toString()); 

                

                ll.addView(logo1);

                ll.addView(logo);   

                ll.addView(textView);

  

                return ll;  

            }  

  

            @Override  

            public View getChildView(int groupPosition, int childPosition,  

                    boolean isLastChild, View convertView, ViewGroup parent) {  

                // TODO Auto-generated method stub  

                LinearLayout ll = new LinearLayout(  

                TwoActivity.this);  

                ll.setOrientation(0);  

                ImageView generallogo = new ImageView(  

                TwoActivity.this);  

                generallogo  

                        .setImageResource(generallogos[groupPosition][childPosition]);  

                ll.addView(generallogo);  

                TextView textView = getTextView();  

                textView.setText(getChild(groupPosition, childPosition)  

                        .toString());  

                ll.addView(textView);  

                return ll;  

            }  

  

            @Override  

            public boolean isChildSelectable(int groupPosition,  

                    int childPosition) {  

                // TODO Auto-generated method stub  

                return true;  

            }    

        };  

  

        final ExpandableListView expandableListView = (ExpandableListView) findViewById(R.id.list);  

        expandableListView.setAdapter(adapter);  

        

        expandableListView.setOnGroupExpandListener(new OnGroupExpandListener() {  

         

            @Override  

            public void onGroupExpand(int groupPosition) {  

                // TODO Auto-generated method stub  

                for (int i = 0; i < adapter.getGroupCount(); i++) {  

                    if (groupPosition != i) {  

                    expandableListView.collapseGroup(i);  

                    }  

                }    

            }  

            

            public boolean onGroupClick(ExpandableListView parent, View v,  

                    int groupPosition, long id) {  

                // TODO Auto-generated method stub

                if (sign== -1) {  

                    // 展开被选的group  

                expandableListView.expandGroup(groupPosition);  

                    // 设置被选中的group置于顶端  

                expandableListView.setSelectedGroup(groupPosition);  

                    sign= groupPosition;  

                } else if (sign== groupPosition) {  

                expandableListView.collapseGroup(sign);  

                    sign= -1;  

                } else {  

                expandableListView.collapseGroup(sign);  

                    // 展开被选的group  

                expandableListView.expandGroup(groupPosition);  

                    // 设置被选中的group置于顶端  

                expandableListView.setSelectedGroup(groupPosition);  

                    sign= groupPosition;  

                }  

                return true;  

            } 

  

        });          

          

        //设置item点击的监听器  

        expandableListView.setOnChildClickListener(new OnChildClickListener() {  

  

            @Override  

            public boolean onChildClick(ExpandableListView parent, View v,  

                    int groupPosition, int childPosition, long id) {  

  

                Toast.makeText(  

                TwoActivity.this,  

                        "你点击了" + adapter.getChild(groupPosition, childPosition),  

                        Toast.LENGTH_SHORT).show();  

  

                return false;  

            }  

        });  

    }     

}


模拟器运行效果图:


« 上一篇下一篇 »

评论列表:

1.利用网站送礼  2014/9/24 10:27:57 回复该留言
安卓撸主得好好学啊。。
2.重量  2014/9/24 13:59:54 回复该留言
学习了 感谢分享~
3.进销存软件  2014/9/26 17:43:21 回复该留言
非常不错的文章,过来看看学习,希望博主分享更多好的文章。

【轻松掌柜软件】-关注中小企业及管理软件应用

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。