Android(安卓)多级菜单
16lz
2021-12-04
效果:
main.xml:
- <?xmlversion= "1.0" encoding= "utf-8" ?>
- <RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="horizontal" android:layout_width= "fill_parent"
- android:layout_height="wrap_content" >
- <ImageViewandroid:id="@+id/icon" android:layout_width= "wrap_content"
- android:layout_height="fill_parent" android:layout_marginRight= "6.0dip"
- android:layout_alignParentTop="true" android:layout_alignParentBottom= "true" />
- <!--<TextViewandroid:id="@+id/text" android:layout_gravity= "center_vertical"
- android:layout_weight="1.0" android:layout_height= "wrap_content" android:layout_width= "0dip"
- android:textAppearance="?android:attr/textAppearanceMedium" android:singleLine= "true"
- android:textColor="#ffffff" />-->
- <TextViewandroid:textAppearance="?android:textAppearanceMedium"
- android:gravity="center_vertical" android:id= "@+id/text"
- android:textColor="#ffffff" android:layout_width= "fill_parent"
- android:layout_height="fill_parent" android:singleLine= "true"
- android:layout_toRightOf="@id/icon" android:layout_alignParentTop= "true"
- android:layout_alignParentBottom="true" />
- </RelativeLayout>
TreeElement.java:
- package com.iaiai;
- import java.util.ArrayList;
- /**
- *
- *<p>
- *Title:TreeElement.java
- *</p>
- *<p>
- *E-Mail:176291935@qq.com
- *</p>
- *<p>
- *QQ:176291935
- *</p>
- *<p>
- *Http:iaiai.iteye.com
- *</p>
- *<p>
- *Createtime:2011-8-20
- *</p>
- *
- *@author丸子
- *@version0.0.1
- */
- public class TreeElement{
- private Stringid;
- private StringoutlineTitle;
- private boolean mhasParent;
- private boolean mhasChild;
- private TreeElementparent;
- private int level;
- private ArrayList<TreeElement>childList= new ArrayList<TreeElement>();
- public StringgetId(){
- return id;
- }
- public void setId(Stringid){
- this .id=id;
- }
- public StringgetOutlineTitle(){
- return outlineTitle;
- }
- public void setOutlineTitle(StringoutlineTitle){
- this .outlineTitle=outlineTitle;
- }
- public boolean isMhasParent(){
- return mhasParent;
- }
- public void setMhasParent( boolean mhasParent){
- this .mhasParent=mhasParent;
- }
- public boolean isMhasChild(){
- return mhasChild;
- }
- public void setMhasChild( boolean mhasChild){
- this .mhasChild=mhasChild;
- }
- public int getLevel(){
- return level;
- }
- public void setLevel( int level){
- this .level=level;
- }
- public boolean isExpanded(){
- return expanded;
- }
- public void setExpanded( boolean expanded){
- this .expanded=expanded;
- }
- public ArrayList<TreeElement>getChildList(){
- return childList;
- }
- public TreeElementgetParent(){
- return parent;
- }
- public void setParent(TreeElementparent){
- this .parent=parent;
- }
- //privateOutlineElementoutlineElement;
- private boolean expanded;
- public void addChild(TreeElementc){
- this .childList.add(c);
- this .mhasParent= false ;
- this .mhasChild= true ;
- c.parent=this ;
- c.level=this .level+ 1 ;
- }
- public TreeElement(Stringid,Stringtitle){
- super ();
- this .id=id;
- this .outlineTitle=title;
- this .level= 0 ;
- this .mhasParent= true ;
- this .mhasChild= false ;
- this .parent= null ;
- }
- public TreeElement(Stringid,StringoutlineTitle, boolean mhasParent,
- boolean mhasChild,TreeElementparent, int level, boolean expanded){
- super ();
- this .id=id;
- this .outlineTitle=outlineTitle;
- this .mhasParent=mhasParent;
- this .mhasChild=mhasChild;
- this .parent=parent;
- if (parent!= null ){
- this .parent.getChildList().add( this );
- }
- this .level=level;
- this .expanded=expanded;
- }
- }
TreeView.java:
- package com.iaiai;
- import java.util.ArrayList;
- import java.util.List;
- import android.app.ListActivity;
- import android.content.Context;
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.ArrayAdapter;
- import android.widget.ImageView;
- import android.widget.ListView;
- import android.widget.TextView;
- import android.widget.Toast;
- /**
- *
- *<p>
- *Title:TreeView.java
- *</p>
- *<p>
- *E-Mail:176291935@qq.com
- *</p>
- *<p>
- *QQ:176291935
- *</p>
- *<p>
- *Http:iaiai.iteye.com
- *</p>
- *<p>
- *Createtime:2011-8-20
- *</p>
- *
- *@author丸子
- *@version0.0.1
- */
- public class TreeView extends ListActivity{
- private ArrayList<TreeElement>mPdfOutlinesCount= new ArrayList<TreeElement>();
- private TreeViewAdaptertreeViewAdapter= null ;
- /**Calledwhentheactivityisfirstcreated.*/
- @Override
- public void onCreate(BundlesavedInstanceState){
- super .onCreate(savedInstanceState);
- initialData();
- treeViewAdapter=new TreeViewAdapter( this ,R.layout.main,
- mPdfOutlinesCount);
- setListAdapter(treeViewAdapter);
- registerForContextMenu(getListView());
- }
- private void initialData(){
- TreeElementelement1=new TreeElement( "01" , "关键类" );
- TreeElementelement2=new TreeElement( "02" , "应用程序组件" );
- TreeElementelement3=new TreeElement( "03" , "Activity和任务" );
- TreeElementelement4=new TreeElement( "04" , "激活组件:intent" );
- TreeElementelement5=new TreeElement( "05" , "关闭组件" );
- TreeElementelement6=new TreeElement( "06" , "manifest文件" );
- TreeElementelement7=new TreeElement( "07" , "Intent过滤器" );
- TreeElementelement8=new TreeElement( "08" , "Affinity(吸引力)和新任务" );
- TreeElementelement9=new TreeElement( "09" , "加载模式" );
- TreeElementelement10=new TreeElement( "10" , "加载模式孩子1" );
- TreeElementelement11=new TreeElement( "11" , "加载模式孩子2" );
- TreeElementelement12=new TreeElement( "12" , "加载模式孩子2的孩子1" );
- TreeElementelement13=new TreeElement( "13" , "加载模式孩子2的孩子2" );
- TreeElementelement14=new TreeElement( "14" , "加载模式孩子1的孩子1" );
- TreeElementelement15=new TreeElement( "15" , "加载模式孩子1的孩子2" );
- TreeElementelement16=new TreeElement( "16" , "加载模式孩子1的孩子3" );
- TreeElementelement17=new TreeElement( "17" , "加载模式孩子1的孩子4" );
- TreeElementelement18=new TreeElement( "18" , "加载模式孩子1的孩子5" );
- TreeElementelement19=new TreeElement( "19" , "加载模式孩子1的孩子6" );
- mPdfOutlinesCount.add(element1);
- mPdfOutlinesCount.add(element2);
- mPdfOutlinesCount.add(element9);
- element2.addChild(element3);
- element1.addChild(element4);
- element1.addChild(element5);
- element1.addChild(element6);
- element1.addChild(element7);
- element7.addChild(element8);
- element9.addChild(element10);
- element9.addChild(element11);
- element11.addChild(element12);
- element11.addChild(element13);
- element10.addChild(element14);
- element10.addChild(element15);
- element10.addChild(element16);
- element10.addChild(element17);
- element10.addChild(element18);
- element10.addChild(element19);
- }
- @SuppressWarnings ( "unchecked" )
- private class TreeViewAdapter extends ArrayAdapter{
- public TreeViewAdapter(Contextcontext, int textViewResourceId,
- Listobjects){
- super (context,textViewResourceId,objects);
- mInflater=LayoutInflater.from(context);
- mfilelist=objects;
- mIconCollapse=BitmapFactory.decodeResource(
- context.getResources(),R.drawable.outline_list_collapse);
- mIconExpand=BitmapFactory.decodeResource(context.getResources(),
- R.drawable.outline_list_expand);
- }
- private LayoutInflatermInflater;
- private List<TreeElement>mfilelist;
- private BitmapmIconCollapse;
- private BitmapmIconExpand;
- public int getCount(){
- return mfilelist.size();
- }
- public ObjectgetItem( int position){
- return position;
- }
- public long getItemId( int position){
- return position;
- }
- public ViewgetView( int position,ViewconvertView,ViewGroupparent){
- ViewHolderholder;
- /*if(convertView==null){*/
- convertView=mInflater.inflate(R.layout.main,null );
- holder=new ViewHolder();
- holder.text=(TextView)convertView.findViewById(R.id.text);
- holder.icon=(ImageView)convertView.findViewById(R.id.icon);
- convertView.setTag(holder);
- /*
- *}else{holder=(ViewHolder)convertView.getTag();}
- */
- final TreeElementobj=mfilelist.get(position);
- holder.text.setOnClickListener(new View.OnClickListener(){
- @Override
- public void onClick(Viewv){
- Log.i("TreeView" , "obj.id:" +obj.getId());
- }
- });
- int level=obj.getLevel();
- holder.icon.setPadding(25 *(level+ 1 ),
- holder.icon.getPaddingTop(),0 ,
- holder.icon.getPaddingBottom());
- holder.text.setText(obj.getOutlineTitle());
- if (obj.isMhasChild()&&(obj.isExpanded()== false )){
- holder.icon.setImageBitmap(mIconCollapse);
- }else if (obj.isMhasChild()&&(obj.isExpanded()== true )){
- holder.icon.setImageBitmap(mIconExpand);
- }else if (!obj.isMhasChild()){
- holder.icon.setImageBitmap(mIconCollapse);
- holder.icon.setVisibility(View.INVISIBLE);
- }
- return convertView;
- }
- class ViewHolder{
- TextViewtext;
- ImageViewicon;
- }
- }
- @Override
- protected void onListItemClick(ListViewl,Viewv, int position, long id){
- super .onListItemClick(l,v,position,id);
- Log.i("TreeView" , "position:" +position);
- if (!mPdfOutlinesCount.get(position).isMhasChild()){
- Toast.makeText(this ,mPdfOutlinesCount.get(position)
- .getOutlineTitle(),2000 );
- /*
- *intpageNumber;Intenti=getIntent();elementelement=
- *mPdfOutlinesCount.get(position);pageNumber=
- *element.getOutlineElement().pageNumber;if(pageNumber<=0){
- *Stringname=element.getOutlineElement().destName;pageNumber=
- *idocviewer.getPageNumberForNameForOutline(name);
- *element.getOutlineElement().pageNumber=pageNumber;
- *element.getOutlineElement().destName=null;}
- *i.putExtra("PageNumber",pageNumber);setResult(RESULT_OK,i);
- *finish();
- */
- return ;
- }
- if (mPdfOutlinesCount.get(position).isExpanded()){
- mPdfOutlinesCount.get(position).setExpanded(false );
- TreeElementelement=mPdfOutlinesCount.get(position);
- ArrayList<TreeElement>temp=new ArrayList<TreeElement>();
- for ( int i=position+ 1 ;i<mPdfOutlinesCount.size();i++){
- if (element.getLevel()>=mPdfOutlinesCount.get(i).getLevel()){
- break ;
- }
- temp.add(mPdfOutlinesCount.get(i));
- }
- mPdfOutlinesCount.removeAll(temp);
- treeViewAdapter.notifyDataSetChanged();
- /*
- *fileExploreAdapter=newTreeViewAdapter(this,R.layout.outline,
- *mPdfOutlinesCount);
- */
- //setListAdapter(fileExploreAdapter);
- }else {
- TreeElementobj=mPdfOutlinesCount.get(position);
- obj.setExpanded(true );
- int level=obj.getLevel();
- int nextLevel=level+ 1 ;
- for (TreeElementelement:obj.getChildList()){
- element.setLevel(nextLevel);
- element.setExpanded(false );
- mPdfOutlinesCount.add(position+1 ,element);
- }
- treeViewAdapter.notifyDataSetChanged();
- /*
- *fileExploreAdapter=newTreeViewAdapter(this,R.layout.outline,
- *mPdfOutlinesCount);
- */
- //setListAdapter(fileExploreAdapter);
- }
- }
- }
更多相关文章
- android 实现图片加载效果
- Android语音识别功能使用
- Android(安卓)浏览网页
- Android(安卓)ListView异步加载图片
- Android(安卓)WebView 加载网页遇到的问题
- 【Android】Activity全屏设置
- Android(安卓)自定义加载view(菊花效果)
- 安卓面试中遇到的问题2017.2
- Android(安卓)加载assets中的资源文件实例代码