LinearLayout + TextView 树形菜单

来源:互联网 发布:赛车网络手游 编辑:程序博客网 时间:2024/06/11 05:52

野路子实现方法,能看则看,不能看也别喷,我没求着你。

效果大致是这样的。用了三层循环,如果还有4层,5层就多加循环,保证结构不变,一切都ok

 

菜单结构基本就是

外面一个大容器

        大容器里面一个小容器

                小容器里面装两个容器

                        一个是选项的容器

                               选项容器里面是两个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

<?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>

 

如果有数据来源,可将二级菜单开始的循环写进click监听事件里面,不用累赘的一大堆堆在方法中。

0 0