如何使ImageButton表现得像ViewGroup?

时间:2013-02-26 15:06:03

标签: android button textview imageview

我希望有一个图像和一个图像,我想放一个较短的半透明视图,并在该视图中放置一个textview,最后我想要所有这些可点击的按钮显示基本点击效果。

我无法使用

<Button>
   <ImageView>
      <TextView/>
   </ImageView>
</Button>

我可以用Clickable = true创建一个LinearLayout。但是我怎么能模仿按钮上存在的视觉按压效果呢?

更新:我添加了一张图片,展示了我希望如何看到它。认为这就像一个ImageButton(它应该具有印刷效果)

enter image description here

UPDATE-2:我添加了另一张显示按下效果的图片。 (与Play商店应用类似)。 enter image description here

3 个答案:

答案 0 :(得分:1)

使用您选择的布局创建所需的效果,并在布局上设置样式@android:style/Widget.Button

此外,您可能需要在布局上调用setWillNotDraw(false)

答案 1 :(得分:1)

但是我怎么能模仿按钮上存在的视觉按压效果呢?

如果我没弄错的话,你可以在LinearLayout中添加android:background =“@ drawable / some_click”

some_click.xml
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_pressed="true" 
android:drawable="@drawable/pressed" /> <!-- pressed -->
<item
android:state_focused="true" 
android:drawable="@drawable/focused" /> <!-- focused -->
<item
android:drawable="@drawable/default" /> <!-- default -->
</selector>

答案 2 :(得分:1)

创建一个包含图像和文本等的ViewGroup(例如LinearLayout / RelativeLayout / etc)。

使此ViewGroup可单击(例如,通过为其分配OnClicListener)。

为此ViewGroup指定背景 drawable。

确保此背景drawable是一个状态列表drawable: https://developer.android.com/reference/android/graphics/drawable/StateListDrawable.html http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList

将适当的drawable分配给各种状态(最重要的是state_pressed,但您也可能希望处理其他状态)。

当用户按下按钮时,将显示相应的drawable,并且将显示为ViewGroup是一个按钮(可以按下某个按钮)。

OP显示按下状态的新图像后更新:

添加一个位于图像/文本/等之上的视图,其背景具有StateListDrawable:

<RelativeLayout >
    <ImageView 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/somerealpngfile"
        ... 
    />
    <TextView  
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        ... 
    />
    <View 
        android:id+"@+id/clickable_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/selectable_background"
        android:clickable="true"

        ... 
    />
</RelativeLayout>

<强> RES /抽拉/ selectable_background.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@color/grid_state_pressed"/>
    <item android:state_focused="true" android:drawable="@color/grid_state_focused"/>
    <item android:drawable="@android:color/transparent"/>
</selector>

RES /值/ colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
  ...
  <color name="grid_state_pressed">#BB7dbcd3</color>
  <color name="grid_state_focused">#777dbcd3</color>
  ...
</resources>

其中颜色grid_state_pressedgrid_state_focused是半透明的(即其alpha小于255)。

当用户点击“按钮”时,带有R.id.clickable_view的视图将处理onClick并将更改其背景颜色,从而导致图像和文字以半透明方式闪烁。