当前位置: 首页 > 知识库问答 >
问题:

如何只更改imagebutton内部的图像而不是整个imagebutton

凌俊名
2023-03-14

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

我想在运行时使用backgroundresource更改星形图,但由于某种原因,当我尝试更改它时,它只更改了灰色部分而不是星形部分,所以看起来像是两个星形图的顶部。我使用以下命令。

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:

ImageButton android:id=“@+id/btnToClick”android:layout_width=“60dp”android:layout_height=“60dp”android:onclick=“MyClickHandler”android:layout_margintop=“4dp”
android:layout_alignParentright=“true”
android:layout_alignParentright=“true”android:focusableintouchmode=“true”android:focusable=“true”

向乔问好

共有2个答案

汪甫
2023-03-14

修改后的答案

<ImageButton
    android:id="@+id/imageButton1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"   
    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);
        }
    }

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

颜志业
2023-03-14

您使用的方法是更改后台资源。若要更改前景,请使用setimageResource(int)方法:

btnChild.setImageResource(android.R.drawable.btn_star_big_on);
 类似资料:
  • 以下图片将帮助您了解我的问题: 我想将显示在图像按钮中的图像拉伸到图像按钮的整个区域。如您所见,数字为1的图片仅占图像按钮的95%,您还可以看到图像按钮的边界。 我仍然希望保持图像按钮样式 以下是我如何使用ImageView: 我想我发现了我的问题所在,我需要一个自定义组件,它只能包含一个图像,并且具有点击效果。

  • 这个问题很基本,但是我想确定没有比我现在做的更好的方法了。假设我有一个脸书图标。到目前为止,当用户悬停在该图像上时,我会显示不同的图像以更改颜色。有没有一种替代的CSS方法来做到这一点,所以我不使用多个图像? 在下面的小提琴中,我试图改变背景,但这只覆盖了整个图像。 JSFIDLE

  • 当我通过eclipse启动时,这会显示图标,但当我将其导出到Runnable Jar时,它会显示默认的Java图标,我不想使用资源的方式来做这件事,因为它甚至在IDE中不起作用。

  • 我看了其他答案,试着: 以及: 在类中,我把图像文件放在资源文件夹中,也放在与我的文件和我项目的根文件夹中,甚至在开始时包含了/符号URL字符串,但没有工作。我想知道最近有没有人尝试过并成功了?

  • 我有一个html页面和一个带有Thymeleaf模板引擎的java应用程序,我正在寻找一个教程,向服务器发出请求,并根据响应仅呈现页面的一部分。 此时,我有一些按钮具有相同页面的链接,带有不同的参数,我的div是基于属性文章列表创建的(我从服务器接收基于button_id) 超文本标记语言: Java: 我希望我的按钮处理我的索引控制器,只更改文章的div,而不是刷新整个页面。 我尝试过使用aja

  • 我有一个RecycerView,在那里我创建了12个ImageButton默认情况下,它们都是黑色的,因为我为imageButton创建了一个具有黑色纯色的自定义形状。自定义形状设置为imageButtons背景 形状: 这就是ImageButtons现在的样子。但它们都有相同的颜色,这不是我想要的。 } 这是来自我的RecycerView适配器类,我在其中infalte layout.item_