LinearLayout + TextView 树形菜单

文章标签: android
2015-4-10 8:50:20     人阅读    

android开发中经常要实现树形菜单的功能,最近在网上找了写例子实现了一个


通过  LinearLayout + TextView   实现树形菜单有一种比价取巧的强硬方法..


菜单结构基本就是

 


外面一个大容器

 

        大容器里面一个小容器

 

                小容器里面嵌套两个容器

 

                        一个是选项的容器

 

                               选项容器里面是两个TextView一个现实"+"、"-"用,另一个装文字用

 

                        另一个是第二层菜单的大容器,相当于一级菜单外面最大的容器,里面的结构同一级菜单。

下面是完整的代码:

package com.example.testtrees;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener{
 private List<String> menulist1 = new ArrayList<String>();
 private List<String> menulist2 = new ArrayList<String>();
 private List<String> menulist3 = new ArrayList<String>();
 public void onCreate(Bundle save){
  super.onCreate(save);
  this.setContentView(R.layout.test_tree);
  initTree();
 }
 
 private void initTree(){
  
  menulist1.add("1级菜单1");
  menulist1.add("1级菜单2");
  menulist1.add("1级菜单3");
  
  menulist2.add("2级菜单1");
  menulist2.add("2级菜单2");
  menulist2.add("2级菜单3");
  menulist2.add("2级菜单4");
  
  menulist3.add("3级菜单1");
  menulist3.add("3级菜单2");
  LinearLayout rongqi1 = (LinearLayout)findViewById(R.id.tree_layout);
  
  for(int i=0;i<menulist1.size();i++){
   //内部容器
   LinearLayout menu = new LinearLayout(this);
   menu.setOrientation(1);
   //选项容器
   LinearLayout item = new LinearLayout(this);
   item.setOrientation(0);
   //下一层菜单容器
   LinearLayout rongqi2 = new LinearLayout(this);
   rongqi2.setVisibility(View.GONE);
   rongqi2.setOrientation(1);
   TextView sw = new TextView(this);
   sw.setTextSize(16);
   sw.setText("+");
   sw.setLayoutParams(new LayoutParams(50, 50));
   TextView menuText = new TextView(this);
   menuText.setTextSize(16);
   menuText.setText(menulist1.get(i));
   
   for(int j=0;j<menulist2.size();j++){
    LinearLayout menu2 = new LinearLayout(this);
    menu2.setOrientation(1);
    LinearLayout item2 = new LinearLayout(this);
    item2.setOrientation(0);
    LinearLayout rongqi3 = new LinearLayout(this);
    rongqi3.setVisibility(View.GONE);
    rongqi3.setOrientation(1);
    TextView sw2 = new TextView(this);
    sw2.setTextSize(16);
    sw2.setText("+");
    sw2.setLayoutParams(new LayoutParams(50,50));
    
    TextView menuText2 = new TextView(this);
    menuText2.setTextSize(16);
    menuText2.setText(menulist2.get(j));
    
    for(int k=0;k<menulist3.size();k++){
     LinearLayout menu3 = new LinearLayout(this);
     menu3.setPadding(100, 0, 0, 0);
     menu3.setOrientation(1);
     LinearLayout item3 = new LinearLayout(this); //不继续第四层菜单,不需要第四层容器。
     item3.setOrientation(0);
     TextView menuText3 = new TextView(this);
     menuText3.setTextSize(16);
     menuText3.setText(menulist3.get(k));
     item3.addView(menuText3);
     menu3.addView(item3);
     rongqi3.addView(menu3);
     
    }
    item2.addView(sw2);
    item2.addView(menuText2);
    item2.setOnClickListener(this);
    menu2.addView(item2);
    menu2.addView(rongqi3);
    menu2.setPadding(100, 0, 0, 0);
    rongqi2.addView(menu2);
   }
   item.setOnClickListener(this);
   item.addView(sw);
   item.addView(menuText);
   menu.addView(item);
   menu.addView(rongqi2);
   menu.setPadding(50, 0, 0, 0);
   rongqi1.addView(menu);
  }
 }
 
 @Override
 public void onClick(View view) {
  LinearLayout layout = (LinearLayout)view; //当前被点击的Layout
  LinearLayout menu = (LinearLayout)layout.getParent(); //父级layout
  LinearLayout rongqi = (LinearLayout)menu.getChildAt(1); //容器
  TextView sw = (TextView)((LinearLayout)view).getChildAt(0);
  
  if(sw.getText().equals("+")){
   sw.setText("-");
  }else{
   sw.setText("+");
  }
  if(rongqi.getVisibility() == View.GONE){
   rongqi.setVisibility(View.VISIBLE);
  }else{
   rongqi.setVisibility(View.GONE);
  }
 }
 
}


 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
 <ScrollView
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:scrollbars="vertical"
   android:layout_alignParentTop="true"
   >
   <LinearLayout android:id="@+id/tree_layout"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="left"
   />
 </ScrollView>
</LinearLayout>


原理很简单 ,就是使用 android标准组件自己组装起来 ,实现效果需要自己多美化一下.


原文地址:http://www.itmmd.com/201504/695.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

  上一篇
下一篇  ActionBarDrawerToggle 报错 不适用 Android.support.v7.widget.Toolbar
精彩回复
我要追加问题,请求站长解决!
姓名: