
我尝试了几种方法:第一种方法是简单地让所选的Imagebutton单击,但我没有找到任何解决方案来实现这一点.
第二个是将选择的Imagebutton设置为不可点击并更改其图像,如下图所示.在那里,玩家1选择了“摇滚”而玩家2没有选择.如您所见,一旦我更改了Imagebutton的图像,边框就会消失.
我改变了像这样的按钮的状态
public voID onClickRock1(VIEw v){ choosenDestructor1 = 1; buttonRock1.setimageResource(R.drawable.rock_clicked); buttonRock1.setBackgroundcolor(getResources().getcolor(R.color.button_background_stay_clicked)); buttonRock1.setClickable(false); buttonPaper1.setimageResource(R.drawable.paper); buttonPaper1.setBackgroundcolor(getResources().getcolor(R.color.button_background)); buttonPaper1.setClickable(true); buttonScissors1.setimageResource(R.drawable.scissors); buttonScissors1.setBackgroundcolor(getResources().getcolor(R.color.button_background)); buttonScissors1.setClickable(true); } 对于所有其他5个按钮,与此方法类似.现在,我认为用简单的Image覆盖Imagebutton的样式会使我的自定义Imagebutton样式的边框消失,但这只是猜测.
我写了第二个自定义Imagebutton样式,具有不同的背景颜色和相同的边框,但我无法弄清楚如何从代码中在Imagebutton上设置该样式.
所以我的问题是,哪种方法最聪明才能解决这个问题(我认为是第三种方法,但也许还有另一种方法),如果是第三种方法,那么如何从代码中设置Imagebutton的样式.
编辑:
与rgrocha的回答类似,我编辑了我的选择器(已经集成在custom_imagebutton.xml中),如下所示
<?xml version="1.0" enCoding="utf-8"?><selector xmlns:androID="http://schemas.androID.com/apk/res/androID" > <item androID:state_pressed="true" androID:drawable="@drawable/rock"> <shape> <solID androID:color="@color/button_background" /> <stroke androID:wIDth="2dp" androID:color="#FFF716" /> <padding androID:left="10dp" androID:top="10dp" androID:right="10dp" androID:bottom="10dp" /> </shape> </item> <item androID:state_selected="true" androID:drawable="@drawable/rock_clicked"> <shape> <solID androID:color="@color/button_background_stay_clicked" /> <stroke androID:wIDth="2dp" androID:color="#FFF716" /> <padding androID:left="10dp" androID:top="10dp" androID:right="10dp" androID:bottom="10dp" /> </shape> </item> <item androID:drawable="@drawable/rock"> <shape> <solID androID:color="@color/button_background" /> <stroke androID:wIDth="1dp" androID:color="#FFFFFF" /> <corners androID:radius="0dp" /> <padding androID:left="10dp" androID:top="10dp" androID:right="10dp" androID:bottom="10dp" /> </shape> </item> </selector>
和onClickRock1方法一样
public voID onClickRock1(VIEw v){ choosenDestructor1 = 1; buttonRock1.setSelected(true); buttonPaper1.setSelected(false); buttonScissors1.setSelected(false);} 像这样解决它会导致为每个Imagebutton(岩石,纸张,剪刀)制作custom_imagebutton.xml,以下是以下问题:
1.边界不可见(重要的是,因为我希望有这些边界)
2.图像不再缩放(这没关系,因为我喜欢它更像这样)
所以基本上,它看起来像我上面发布的图像,除了图像由于没有缩放而略大一些(在layout.xml中,我设置scaleType =“fitCenter”)
解决方法 您可以为要应用的每个状态创建一个可绘制选择器,并将其设置为主要图像或背景,您可以选择更适合您需要的状态.在此选择器中,您可以制作边框,颜色,图像,以及任何您想要更改的内容.
选择器看起来像:
<item androID:state_pressed="true"> <shape androID:shape="rectangle" > <solID androID:color="@color/button_highlight" /> <corners androID:radius="5dp" /> </shape> </item><item androID:state_selected="true"> <shape androID:shape="rectangle" > <solID androID:color="@color/menu_bg_selected" /> <corners androID:radius="5dp" /> </shape></item>
有关完整的drawables文档,请参阅http://developer.android.com/guide/topics/resources/drawable-resource.html.对于您的情况,请参阅“状态选择器”.
您甚至可以使用setSelected(),setEnabled(()等以编程方式更改按钮的状态.
@H_502_2@ 总结以上是内存溢出为你收集整理的android – 如何以编程方式更改ImageButton的样式全部内容,希望文章能够帮你解决android – 如何以编程方式更改ImageButton的样式所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)