android - 如何让 android ListView 项目选择器使用 state_pressed

标签 android listview android-layout

我想在按下 ImageView 时为其背景着色。 我尝试使用选择器来更改不同状态(按下和未按下)的图像。 现在的问题是图像用完全相同的尺寸替换了之前的图像,而我希望它更大。 我使用实现可检查的自定义布局,并且还尝试重载 onCreateDrawableState 函数,但它从未被调用。

请帮忙..

它看起来是这样的:

按下之前:

enter image description here

按下后:

enter image description here

这是项目列表自定义布局:

public class ListItem extends RelativeLayout implements Checkable, OnClickListener {

    private View mItemChecked = null;
    private ImageView imageSkinEdit = null;

    /*private static final int[] CHECKED_STATE_SET = {
        android.R.attr.state_pressed
    };*/



    public ListItem(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public ListItem(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public ListItem(Context context) {
        super(context);
    }

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        try {
            mItemChecked = this.findViewById(R.id.itemlist_checkedd);
            imageSkinEdit = (ImageView)this.findViewById(R.id.skinEdit);
            imageSkinEdit.setOnClickListener(this);
        } catch (Exception e) {
        }
    }//onFinishInflate

    @Override
    public boolean isChecked() {
        if(mItemChecked != null) {
            return ((Checkable)mItemChecked).isChecked();
        }
        return false;
    }

    @Override
    public void setChecked(boolean checked) {
        if(mItemChecked != null) {
            if (checked) {
                mItemChecked.setVisibility(View.VISIBLE);
            } else {
                mItemChecked.setVisibility(View.GONE);
            }
        }
    }

    @Override
    public void toggle() {
        if(mItemChecked != null) {
            ((Checkable)mItemChecked).toggle();
        }
    }

    @Override
    public void onClick(View v) {
        final int id = v.getId();
        switch (id) {
            case R.id.skinEdit:
                //handleEdit();
                break;
        }//switch
    }

    @Override
    public int[] onCreateDrawableState(int extraSpace) {
        Log.d("onCreateDrawableState", "onCreateDrawableState");
        return super.onCreateDrawableState(extraSpace + 1);
        /*final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
        if (isChecked()) {
            Log.d("ListItem", "isChecked");
            mergeDrawableStates(drawableState, CHECKED_STATE_SET);
        }
        return drawableState;*/
    }
}

选择器:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_pressed="true"
        android:drawable="@drawable/ic_go_edit_pressed" />
    <item
        android:state_pressed="false"
        android:drawable="@drawable/ic_go_edit" />
</selector>

ImageView XML:

<ImageView
        android:id="@+id/skinEdit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:adjustViewBounds="true"
        android:scaleType="fitXY"
        android:paddingLeft="10dip"
        android:paddingRight="10dip"
        android:src="@drawable/edit_skin_selector" />

最佳答案

尝试在 setChecked 末尾调用refreshDrawableState()。这将调用 onCreateDrawableState

  @Override
    public void setChecked(boolean checked) {
        if(mItemChecked != null) {
            if (checked) {
                mItemChecked.setVisibility(View.VISIBLE);
            } else {
                mItemChecked.setVisibility(View.GONE);
            }
        }
            refreshDrawableState();
    }

关于android - 如何让 android ListView 项目选择器使用 state_pressed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10027591/

相关文章:

android - 我如何加密 Android SQLite 数据库中的特定列数据。使用 SQLCipher 实用程序

安卓5.0模拟器打不开

android - 有没有办法在多个嵌套的 RecyclerView 之间共享同一个 LayoutManager

c# - ListView 选择项目背景颜色

java - ListView 中的图像在滚动上重复

java - Cardview 没有占据全宽(从左边裁剪 2%)

java - 选择器不适用于点击按钮效果

android - 我可以限制 TextView 的字符数吗?

android - 防止用户关闭移动数据和位置

android - 如何将多个数组传递给 ListView ?