baidu_23478311
梅明子
采纳率91.9%
2015-09-17 06:14 阅读 4.1k
已采纳

多个LinearLayout如何实现点击选中效果?

15

就是用LinearLayout 写的一列按钮,默认给个颜色值选中第一个,当点击第二个的时候选中第二个,同时恢复第一个。以此类推!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • 已采纳
    bdmh bdmh 2015-09-17 06:19

    什么一个LinearLayout 变量,每次选中 一个LinearLayout ,就把这个LinearLayout 赋值给那个变量,点击下一个时,先判断这个变量是否为null,如果不是,就恢复它的样子

    点赞 1 评论 复制链接分享
  • baidu_23478311 梅明子 2015-09-17 06:23

    谢谢!我感觉您说的应该行得通!我先试试!

    点赞 1 评论 复制链接分享
  • Kelley_cfy Kelley_cfy 2015-09-17 06:24

    类似于这样实现一个Checkable的Button,然后选中一个时手动设置另外的几个,不过你如果不想手动设置的话可以重写LinearLayout, 在LinearLayout里面监听每个子View的点击点击其中一个时将其他的恢复。

    public class CheckableImageView extends ImageView implements Checkable{

    private boolean mChecked = false;
    
    private Drawable mDrawable;
    
    private Drawable mCheckedDrawable;
    
    private Drawable mBgDrawable;
    
    private Drawable mBgCheckedDrawable;
    
    private OnClickListener mListener;
    
    public CheckableImageView(Context context) {
        this(context, null);
    }
    
    public CheckableImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initWithAttr(attrs);
    }
    
    private void initWithAttr(AttributeSet attrs){
        if(attrs != null){
            TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.CheckableImageView);
            int srcId = typedArray.getResourceId(R.styleable.CheckableImageView_src, View.NO_ID);
            int srcSelectedId = typedArray.getResourceId(R.styleable.CheckableImageView_srcSelected, View.NO_ID);
            int bgSrcId = typedArray.getResourceId(R.styleable.CheckableImageView_bgSrc, View.NO_ID);
            int bgSrcSelectedId = typedArray.getResourceId(R.styleable.CheckableImageView_bgsrcSelected, View.NO_ID);
            if(srcId != View.NO_ID){
                mDrawable = getResources().getDrawable(srcId);
            }
            if(srcSelectedId != View.NO_ID){
                mCheckedDrawable = getResources().getDrawable(srcSelectedId);
            }
            if(bgSrcId == View.NO_ID){
                int color = typedArray.getColor(R.styleable.CheckableImageView_bgSrc, Color.TRANSPARENT);
                if(color != Color.TRANSPARENT){
                    mBgDrawable = new ColorDrawable(color);
                }
            } else{
                mBgDrawable = getResources().getDrawable(bgSrcId);
            }
    
            if(bgSrcSelectedId == View.NO_ID){
                int color = typedArray.getColor(R.styleable.CheckableImageView_bgsrcSelected, Color.TRANSPARENT);
                if(color != Color.TRANSPARENT){
                    mBgCheckedDrawable = new ColorDrawable(color);
                }
            } else{
                mBgCheckedDrawable = getResources().getDrawable(bgSrcSelectedId);
            }
    
            mChecked = typedArray.getBoolean(R.styleable.CheckableImageView_selected, false);
            if(mChecked){
                if(mBgCheckedDrawable != null){
                    setBackgroundDrawable(mBgCheckedDrawable);
                }
                if(mCheckedDrawable != null){
                    setImageDrawable(mCheckedDrawable);
                }
            } else{
                if(mBgDrawable != null){
                    setBackgroundDrawable(mBgDrawable);
                }
                if(mDrawable != null){
                    setImageDrawable(mDrawable);
                }
            }
            typedArray.recycle();
        }
    
        super.setOnClickListener(new OnClickListener() {
    
            @Override
            public void onClick(View v) {
                setChecked(true);
                if(mListener != null){
                    mListener.onClick(v);
                }
            }
        });
    }
    
    @Override
    public void setChecked(boolean checked) {
        if(mChecked != checked){
            mChecked = checked;
            if(mChecked){
                if(mBgCheckedDrawable != null){
                    setBackgroundDrawable(mBgCheckedDrawable);
                }
                if(mCheckedDrawable != null){
                    setImageDrawable(mCheckedDrawable);
                }
            } else{
                if(mBgDrawable != null){
                    setBackgroundDrawable(mBgDrawable);
                }
                if(mDrawable != null){
                    setImageDrawable(mDrawable);
                }
            }
        }
    }
    
    @Override
    public boolean isChecked() {
        return mChecked;
    }
    
    @Override
    public void toggle() {
        setChecked(!mChecked);
    }
    
    @Override
    public void setOnClickListener(OnClickListener l) {
        mListener = l;
    }
    

    }

    点赞 1 评论 复制链接分享

相关推荐