如何获得Android的ListView项选择使用STATE_ pressed [英] How to get a android ListView item selector to use state_pressed

查看:112
本文介绍了如何获得Android的ListView项选择使用STATE_ pressed的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要的颜色到图像查看时,它获得pressed的背景。
我试着用选择器更改为不同状态的图像(pressed而不是pressed)做到这一点。
现在的问题是,图像替换previous具有完全相同的大小,我希望它是大得多。
我使用实现可检查的自定义布局,我想也重载onCreateDrawableState功能,但它永远不会被调用。

请帮助..

这是它的外观:

在pressing:

在pressing:

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

 公共类列表项扩展RelativeLayout的实现可勾选,OnClickListener {    私人查看mItemChecked = NULL;
    私人ImageView的imageSkinEdit = NULL;    / *私有静态最终诠释[] = CHECKED_STATE_SET {
        android.R.attr.state_ pressed
    }; * /    公共列表项(上下文的背景下,ATTRS的AttributeSet,诠释defStyle){
        超(背景下,ATTRS,defStyle);
    }    公共列表项(上下文的背景下,ATTRS的AttributeSet){
        超(背景下,ATTRS);
    }    公共列表项(上下文的背景下){
        超级(上下文);
    }    @覆盖
    保护无效onFinishInflate(){
        super.onFinishInflate();
        尝试{
            mItemChecked = this.findViewById(R.id.itemlist_checkedd);
            imageSkinEdit =(ImageView的)this.findViewById(R.id.skinEdit);
            imageSkinEdit.setOnClickListener(本);
        }赶上(例外五){
        }
    } // onFinishInflate    @覆盖
    公共布尔器isChecked(){
        如果(mItemChecked!= NULL){
            返回((可勾选)mItemChecked).isChecked();
        }
        返回false;
    }    @覆盖
    公共无效setChecked(布尔选中){
        如果(mItemChecked!= NULL){
            如果(选中){
                mItemChecked.setVisibility(View.VISIBLE);
            }其他{
                mItemChecked.setVisibility(View.GONE);
            }
        }
    }    @覆盖
    公共无效切换(){
        如果(mItemChecked!= NULL){
            ((可勾选)mItemChecked).toggle();
        }
    }    @覆盖
    公共无效的onClick(视图v){
        最终诠释ID = v.getId();
        开关(ID){
            案例R.id.skinEdit:
                // handleEdit();
                打破;
        }//开关
    }    @覆盖
    公众诠释[] onCreateDrawableState(INT extraSpace){
        Log.d(onCreateDrawableState,onCreateDrawableState);
        返回super.onCreateDrawableState(extraSpace + 1);
        / *最终诠释[] = drawableState super.onCreateDrawableState(extraSpace + 1);
        如果(器isChecked()){
            Log.d(列表项,器isChecked);
            mergeDrawableStates(drawableState,CHECKED_STATE_SET);
        }
        返回drawableState; * /
    }
}

的选择:

 <选择的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android>
    <项目
        机器人:STATE_ pressed =真
        机器人:可绘制=@绘制/ ic_go_edit_ pressed/>
    <项目
        机器人:STATE_ pressed =假
        机器人:可绘制=@绘制/ ic_go_edit/>
< /选择>

图像查看XML:

 < ImageView的
        机器人:ID =@ + ID / skinEdit
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:layout_alignParentRight =真
        机器人:layout_centerVertical =真
        机器人:adjustViewBounds =真
        机器人:scaleType =fitXY
        机器人:paddingLeft =10dip
        机器人:paddingRight =10dip
        机器人:SRC =@绘制/ edit_skin_selector/>


解决方案

最后我做到了使用不同的方法。你可以看到它在我的下<一个href=\"http://stackoverflow.com/questions/10162862/setting-imageview-background-issue-with-selector\">question

I want to color to background of an image View when it get pressed. I tried to do it with selector that changes the image for the different states (pressed and not pressed). The problem now is that the image replaces the previous with the exact same size and I want it be to much larger. I use a custom layout that implements checkable, and I tried also to overload the onCreateDrawableState function, but it never being called.

Help please..

This is how it looks:

before pressing:

after pressing:

This is the item list custom layout:

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;*/
    }
}

The selector:

<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>

Image View 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" />

解决方案

Finally I did it using a different method. You can see it in my next question

这篇关于如何获得Android的ListView项选择使用STATE_ pressed的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆