如何仅更改图像按钮内的图像而不是整个图像按钮

Posted

技术标签:

【中文标题】如何仅更改图像按钮内的图像而不是整个图像按钮【英文标题】:How to change only the image inside an imagebutton and not the whole imagebutton 【发布时间】:2014-02-02 12:58:55 【问题描述】:

我有一个使用 btn_star 的图像按钮。它看起来像一个灰色按钮上的小星星。

我想在运行时使用背景资源来改变星星,但由于某种原因,当我尝试改变它时,它只改变了灰色部分而不是星星部分,所以看起来有两颗星星在彼此的顶部。它是我使用的以下命令。

btnChild.setBackgroundResource(android.R.drawable.btn_star_big_on);

如何仅更改 imagebutton 中的星号部分并保留灰色“按钮”部分?

public void myClickHandler(View v) 
    

        //reset all the listView items background colours before we set the clicked one..
        ListView lvItems = getListView();
        listposition = lvItems.getFirstVisiblePosition();
        state = lvItems.onSaveInstanceState();

        RelativeLayout vwParentRow = (RelativeLayout)v.getParent();

        TextView child = (TextView)vwParentRow.getChildAt(3); 
        ImageButton btnChild = (ImageButton)vwParentRow.getChildAt(9);


        Checkiffavorite();
        boolean favourite=false;
        for (String s : favourite_id)
            if (s.equals(child.getText().toString()))
                favourite=true;
           
        if (favourite)
        
            btnChild.setSelected(false);
            DeleteFromDatabase(child.getText().toString());

            btnChild.setImageResource(android.R.drawable.btn_star);
            //ImageButton _Favorbtn1 = (ImageButton)btnChild.findViewById(R.id.BtnToClick);

        
        else
        
            btnChild.setSelected(true);
            AddToDatabase(child.getText().toString());
            btnChild.setImageResource(android.R.drawable.btn_star_big_on);
        





        ListView lv = getListView();
        lv.onRestoreInstanceState(state);


    

xml:

图像按钮 android:id="@+id/BtnToClick" android:layout_ android:layout_ android:onClick="myClickHandler" android:layout_marginTop="4dp" android:layout_alignParentRight="true" 安卓:focusableInTouchMode="true" android:focusable="true"

最好的问候 乔

【问题讨论】:

您能否向我们展示一下您更改 Button 背景的 XML 代码和 Java 部分? 【参考方案1】:

您使用的方法是更改​​背景资源。要更改前景,请使用setImageResource(int) 方法:

btnChild.setImageResource(android.R.drawable.btn_star_big_on);

【讨论】:

【参考方案2】:

修改后的答案

<ImageButton
    android:id="@+id/imageButton1"
    android:layout_
    android:layout_   
    android:focusableInTouchMode="true" 
    android:focusable="true"
    android:onClick="myClickHandler"     
     />

public void myClickHandler(View v) 
    
        if(flag==false)
        
            flag=true;
            imgBtn.setSelected(false);
            imgBtn.setImageResource(R.drawable.ic_launcher);
        
        else
        
            flag=false;
            imgBtn.setSelected(true);
            imgBtn.setImageResource(R.drawable.star);
        
    

上面的代码对我来说是可行的。

【讨论】:

@joe 请稍候。我会检查这个并告诉你。 @Joe 我找到了问题并给了你解决代码。 还是不行。唯一发生的是按钮图像消失了。 btnChild.SetImageResource 在 clickevent public void myClickHandler(View v) 内,但我认为这没有任何区别。出于某种原因,btnChild.SetBackgroundResource 可以工作,但它会更改背景图像。这会在 UI 线程上进行位图读取和解码,这可能会导致延迟打嗝。如果这是一个问题,请考虑改用 setImageDrawable(android.graphics.drawable.Drawable) 或 setImageBitmap(android.graphics.Bitmap) 和 BitmapFactory。试过了还是不行 @Joe 您能否提供您的 XML 和源代码。虽然我现在要登出,但当我登入时我会通知你。 @Joe 我已根据您的代码结构编辑了我的代码。这对我来说是可行的。我不知道你怎么了。请清除并构建项目。【参考方案3】:

使用 setImageDrawable 更改 ImageButton 图标。 在 XML 中:

<ImageButton
    android:id="@+id/button"
    android:layout_
    android:layout_
    android:src="@android:drawable/btn_star"
    />

在 Java 中:

`ImageButton button = findViewById(R.id.button);


button.setImageDrawable(getResources().getDrawable(android.R.drawable.btn_star));

【讨论】:

以上是关于如何仅更改图像按钮内的图像而不是整个图像按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何仅处理 UIButton 的图像内容,而不是按钮本身

图像按钮仅在单击图像而不是按钮内部区域时响应

如何在不使用标签的情况下更改 tableviewCell 内的图像按钮

仅更改覆盖图像的颜色而不是整个画布 Fabricjs

当只有按钮悬停时激活悬停在按钮内的图像上?

如何在 Tkinter 中的一个按钮中包含图像+文本