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

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

3个回答

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

baidu_23478311
梅明子 果然OK!谢谢!
接近 5 年之前 回复
baidu_23478311
梅明子 谢谢!我感觉您说的应该行得通!我先试试!
接近 5 年之前 回复

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

类似于这样实现一个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;
}

}

baidu_23478311
梅明子 你这个看起来太高大上了
接近 5 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问