野路子实现方法,能看则看,不能看也别喷,我没求着你。
效果大致是这样的。用了三层循环,如果还有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监听事件里面,不用累赘的一大堆堆在方法中。