Android横向二级联动菜单的实现

学习内容:

1.Android二级横向菜单的实现过程.效果如上图...

 

  这种横向的二级菜单在很多的app都有所应用.效果看起来还是非常的美观的.也算是项目需要,自己也就学了一下这个效果,首先说一下逻辑.实现的方式其实并不是很难..只不过逻辑上可能有点复杂.原理其实就是一个按钮.当触发按钮的时候弹出PopWindow.PopWindow由两个ListView构成..对两个ListView适当的适配.就可以实现这个效果了..

  实现这种效果可以有两种不同的方式..一种是直接在布局文件layout.xml中写..最上方的可以是一个按钮.也可以是多个按钮..多个按钮就可以使用RadioGroup去实现..下方则采用ScrollView去实现也是可以的..

  不过我还是说一下第二种方式..直接用Java去写这个布局..通过使用自定义控件的方式实现这个效果..既然是自定义,那么首先我们需要继承一个布局.布局可以使用LinearLayout或者RelativeLayout.

  setValue()方法..

  setValue()方法是自定义的方法..主要是用于加载布局.以及在布局当中添加相关的View.没有加载任何的xml文件..

复制代码
   /**
     *  @param textArray: ListView中item对应的text值的集合..
     *  @param viewArray: 当前Layout中需要加入的View.. 
     * */
    @SuppressLint("ResourceAsColor") 
    public void setValue(ArrayList<String> textArray, ArrayList<View> viewArray) {
        if (mContext == null) {
            return;
        }
        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        mTextList = textArray;
        for (int i = 0; i < viewArray.size(); i++) {
            
            //这里就添加了一个View..
            final RelativeLayout r = new RelativeLayout(mContext);
            int maxHeight = (int) (displayHeight * 0.5);   //定义布局的高度..
            
            
            RelativeLayout.LayoutParams rl = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, maxHeight);
            r.addView(viewArray.get(i), rl);  //在布局中添加View并指定参数
            
            
            mViewList.add(r);
            r.setTag(SMALL);
            
            //定义最上方的按钮,并在布局中添加这个按钮。并设置按钮的text
            ToggleButton tButton = (ToggleButton) inflater.inflate(R.layout.toggle_button, this, false);
            addView(tButton);
            mToggleList.add(tButton);
            tButton.setTag(i);
            tButton.setText(mTextList.get(i));
            
            //用于实现当PopWindow显示时.再次点击收回PopWindow
            r.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    onPressBack();
                }
            });

            r.setBackgroundColor(mContext.getResources().getColor(R.color.popup_main_background));
            
            //当按钮被点击后需要触发的监听
            tButton.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View view) {
                    
                    
                    ToggleButton tButton = (ToggleButton) view;
                    /** 如果当前点击的按钮与上次的点击不同.则设置当前的按钮处于点击状态 */
                    if (selectedButton != 
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值