PS:终于考完试了,总算是解脱了...可以正式上手项目开发了....

学习内容:

1.掌握如何使用树形菜单...

  对知识点进行一下补充...居然忘记了去学习树形菜单...不过在这里补上...

ExpandableListView树形菜单...

  树形菜单其实就是一个列表,只不过是在列表中再次嵌套一个或者是多个子菜单项,子菜单项中可以包括很多的内容...其实就拿QQ来说,就是使用了一个树形菜单...QQ中的分组管理其实就是树形菜单的一个应用...树形菜单继承与ListView...这里我们使用的是ExpandableListView...一般只要是涉及到了ListView类的列表控件,那么不用多想,肯定会使用到适配器...适配器的目的我想大家都知道,其实就是设置这些列表项以怎样的方式在画布上进行显示...这里我们使用一个BaseExpandableListAdapter适配器...我们只需要在适配器中定义显示的模式就可以了...

  用一个简单的小例子来实现一下...这里就简单的使用一个二级的树形菜单...

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" > <TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="树形菜单..."
android:textSize="18dp"
android:gravity="center"/>
<ExpandableListView
android:id="@+id/expandablelistview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffff">
</ExpandableListView> </LinearLayout>

  上面就是一个简单的布局文件...只有一个ExpandableListView控件在画布上进行显示...有的时候我们可以看到非常好看的属性菜单,那么我们其实可以通过属性值background属性来设置,可以把其背景色改成其他的颜色或者是其他的图片背景...这里实现过程还是比较重要的...使用ExpandableListView需要重写其内部的方法...必须要进行覆盖的两个方法...

  getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent);

  getChildView(int groupPosition, int chlidPosition, boolean isLastChild, View convertView, ViewGroup parent);

  这是两个必须要继承的方法...其实看起来并不是很麻烦。这个方法的目的就是,先把这个菜单当成了一个视图...groupPosition这个参数就是来表明树形菜单从属的位置,isExpanded这个参数来判断某一个树形菜单是展开的还是封闭的...说白了就是点击开了,还是给点击关了,convertView是一个视图对象,因为这个方法View形的,那么必然需要传递View对象才能够完成该方法的调用...parent参数就是判断这个树形菜单的每一个选项是否有自己的父菜单...另一个方法的参数基本类似,其实就是对每一子菜单项的一些操作...

package com.example.expandablelistview;

import android.os.Bundle;
import android.app.Activity;
import android.database.DataSetObserver;
import android.graphics.Color;
import android.view.Gravity;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//设置一个ExpandableListView设置一个适配器...然后在总画布上进行显示...
final ExpandableListAdapter adapter=new ExpandableListAdapter() {
private String[] MainView=new String[]{"一班","二班","三班"};//一级列表所要显示的内容...
//列表组件需要使用到适配器...这个适配器的使用,目的是列表下的子选项以什么样的格式进行展示...
private String[][] SubView=new String[][]{{"aa","bb","cc","dd","ee"},{"aaa","bbb","ccc","ddd","eee"},{"a","b","c","d","e"}};//树形菜单子列表的内容...
TextView getTextView(){ @SuppressWarnings("deprecation")
AbsListView.LayoutParams lp=new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,64);//定义了一个布局,设置其长度和宽度...
TextView textview=new TextView(MainActivity.this);
textview.setLayoutParams(lp);//目的是把自身放在lp这个布局中进行显示...
textview.setGravity(Gravity.CENTER_VERTICAL);//设置居中显示...
textview.setPadding(36, 0, 0, 0);//设置相对位置...
textview.setTextSize(16);//设置字体的大小...
textview.setTextColor(Color.BLACK);//设置字体的颜色...
return textview;
}
@Override
public void unregisterDataSetObserver(DataSetObserver observer) {
// TODO Auto-generated method stub } @Override
public void registerDataSetObserver(DataSetObserver observer) {
// TODO Auto-generated method stub } @Override
public void onGroupExpanded(int groupPosition) {
// TODO Auto-generated method stub } @Override
public void onGroupCollapsed(int groupPosition) {
// TODO Auto-generated method stub } @Override
public boolean isEmpty() {
// TODO Auto-generated method stub
return false;
} @Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return true;
} @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(MainActivity.this);
ll.setOrientation(0);
TextView textview=getTextView();
textview.setTextColor(Color.BLACK);
textview.setText(getGroup(groupPosition).toString());//设置主视图的数据信息...
ll.addView(textview);
return ll;
} @Override
public long getGroupId(int groupPosition) {
// TODO Auto-generated method stub
//获取被触发列表项的定位...
return groupPosition;
} @Override
public int getGroupCount() {
// TODO Auto-generated method stub
//返回父菜单项的字符数组长度...
return MainView.length;
} @Override
public Object getGroup(int groupPosition) {
// TODO Auto-generated method stub
//返回一个字符串对象...这个字符串我们自己可以定义其值...
return MainView[groupPosition];
} @Override
public long getCombinedGroupId(long groupId) {
// TODO Auto-generated method stub
return 0;
} @Override
public long getCombinedChildId(long groupId, long childId) {
// TODO Auto-generated method stub
return 0;
} @Override
public int getChildrenCount(int groupPosition) {
// TODO Auto-generated method stub
//返回子菜单项的数组长度...
return SubView[groupPosition].length;
}
//设置子视图的布局...显示的信息,以及如何显示...
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
LinearLayout ll=new LinearLayout(MainActivity.this);//设置一个布局...
ll.setOrientation(0);
TextView textview=new TextView(MainActivity.this);
textview.setText(getChild(groupPosition, childPosition).toString());//textView所要显示的内容...
ll.addView(textview);//将这个布局中添加textView控件...
return ll;
} @Override
public long getChildId(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return childPosition;
} @Override
public Object getChild(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
//这里返回父菜单下的子菜单项的字符数组对象...
return SubView[groupPosition][childPosition];
} @Override
public boolean areAllItemsEnabled() {
// TODO Auto-generated method stub
return false;
}
};
ExpandableListView expandableListView=(ExpandableListView) findViewById(R.id.expandablelistview);//获取组件...
expandableListView.setAdapter(adapter);//绑定适配器...
expandableListView.setOnChildClickListener(new OnChildClickListener() {
//这里设置了一个监听,就是当每一个子菜单被点击的时候,我们也可以触发一些操作...
@Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "您刚才点击了"+adapter.getChild(groupPosition, childPosition), Toast.LENGTH_LONG).show();
return false;
}
}); } @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} }

  这就是一个简单的实现过程...树形菜单的应用是非常广泛的,我们设置是可以在子菜单项被点击之后再次设置一个布局来显示更多的数据信息...但是在使用树形菜单的时候我们需要注意就是一定要让所有的菜单项目能够充分的展开显示在画布之上....这一点我们需要注意...

Android学习笔记之树形菜单的应用...的更多相关文章

  1. 【转】 Pro Android学习笔记(三五):Menu(6):XML方式 & PopUp菜单

    目录(?)[-] 利用XML创建菜单 XML的有关属性 onClick事件 Pop-up菜单 利用XML创建菜单 在代码中对每个菜单项进行设置,繁琐且修改不灵活,不能适配多国语言的要求,可以利用资源进 ...

  2. 【转】 Pro Android学习笔记(三三):Menu(4):Alternative菜单

    目录(?)[-] 什么是Alternative menu替代菜单 小例子说明 Alternative menu代码 关于Category和规范代码写法 关于flags 多个匹配的itemId等参数 什 ...

  3. Pro Android学习笔记 ActionBar(1):Home图标区

     Pro Android学习笔记(四八):ActionBar(1):Home图标区 2013年03月10日 ⁄ 综合 ⁄ 共 3256字 ⁄ 字号 小 中 大 ⁄ 评论关闭 ActionBar在A ...

  4. 【转】 Pro Android学习笔记(五二):ActionBar(5):list模式

    可以在action bar中加入spinner的下来菜单,有关spinner,可以参考Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner. list的样式和 ...

  5. 【转】Pro Android学习笔记(三十):Menu(1):了解Menu

    目录(?)[-] 创建Menu MenuItem的属性itemId MenuItem的属性groupId MenuItem的属性orderId MenuItem的属性可选属性 Menu触发 onOpt ...

  6. 【转】Pro Android学习笔记(十):了解Intent(上)

    目录(?)[-] Intent基本含义 系统的Intent Android引入了Intent的概念来唤起components,component包括:1.Activity(UI元件) 2.Servic ...

  7. Android学习笔记(一)

    目录 Android学习笔记(一) 一.JDK.Android SDK 二.部分项目结构 三.字符串引用 四.外层build.gradle详解 五.app->build.gradle详解 六.日 ...

  8. Android 学习笔记之Volley(七)实现Json数据加载和解析...

    学习内容: 1.使用Volley实现异步加载Json数据...   Volley的第二大请求就是通过发送请求异步实现Json数据信息的加载,加载Json数据有两种方式,一种是通过获取Json对象,然后 ...

  9. Android学习笔记进阶之在图片上涂鸦(能清屏)

    Android学习笔记进阶之在图片上涂鸦(能清屏) 2013-11-19 10:52 117人阅读 评论(0) 收藏 举报 HandWritingActivity.java package xiaos ...

随机推荐

  1. Unity3D Shader入门指南(一)

    动机 自己使用Unity3D也有一段时间了,但是很多时候是流于表面,更多地是把这个引擎简单地用作脚本控制,而对更深入一些的层次几乎没有了解.虽然说Unity引擎设计的初衷就是创建简单的不需要开发者操心 ...

  2. YChaos生成混沌图像

    YChaos是一款通过数学公式生成混沌图像的软件,展示混沌之美,数学之美.软件中定义一套简易的脚本语言,用于描述数学表达式.使用时需要先要将数学表达式写成该脚本的形式,解析脚本代码以生成相应的图形与图 ...

  3. visual webgui theme designer

  4. [Aaronyang]谈谈2015年AY对WPF全面技术总结40多篇WPF,炫到没朋友的AYUI来了

             原著:AY WPF博客- 把wpf推广出去,让那些鄙视的人说不 大家好! 我是AY,首先声明,我在做一件很枯燥的事情,我是个91后程序员,每天熬夜完成计划的过着下班后的生活. 那天有 ...

  5. Linux--U盘安装Ubuntu12.04

    前言 最近一直在研究Android内核驱动开发的相关事宜,使用VMware虚拟机虽然可以更方便的开发,但是对于开发环境硬件的要求还是比较高的,若用于开发,效率太低了,所以考虑使用单独PC去装载Linu ...

  6. Activemq消息持久化

    官方文档: http://activemq.apache.org/persistence.html ActiveMq持久化相关配置:/usr/local/apache-activemq-5.11.1/ ...

  7. 用户管理 之 Linux 系统中的超级权限的控制

    在Linux操作系统中,root的权限是最高的,也被称为超级权限的拥有者.普通用户无法执行的操作,root用户都能完成,所以也被称之为超级管理用户. 在系统中,每个文件.目录和进程,都归属于某一个用户 ...

  8. [SQL SERVER 2005]数据库差异备份及还原

    因为之前遇到还原差异备份,最开始遇到SQLServer报错:”无法还原日志备份或差异备份,因为没有文件可用于前滚“.查阅很多资料后,终于得到解决.收集整理成这篇随笔. 问题原因:出现这种错误绝大多数是 ...

  9. MAC 磁盘清理工具 ncdu

    下载命令:brew install ncdu 使用命令:ncdu . 它会将当前目录下的所有文件.文件夹大小安倒叙排列,方便清除

  10. 关于imp无法导出空表

    前天在业务库中导出完整库时,再导入到新库时发现部分表丢失. 看日志后分析是部分空表没有导出.查google知,11G中新特性,当表无数据时,不分配segment,以节省空间.而使用exp命令时,无Se ...