Android布局 - ImageView聚焦,但屏幕上不显示任何内容(无突出显示)

时间:2010-10-07 04:59:00

标签: android focus imageview clickable focusable

如果我将我的ImageView设置为可点击和可聚焦,它可以工作,但我无法分辨哪个图像是聚焦的。什么是让它在视图周围绘制橙色边框的最佳方法,以便用户知道它目前处于焦点位置?

我尝试将其放入LinearLayout并将其设置为可聚焦且可点击,但没有任何运气。即使我在上面留有余量,也没有任何迹象表明它已被选中。

3 个答案:

答案 0 :(得分:6)

您可以使用带有选择器的drawable作为背景。

例如,我在res / drawable中有gallery_image_bg.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
          android:constantSize="true">
  <item android:state_selected="true">
    <shape android:shape="rectangle">
      <solid android:color="#E6E4E0"/>
      <stroke android:width="3dp" android:color="#F9C11E"/>
      <padding android:left="3dp"
               android:top="3dp"
               android:right="3dp"
               android:bottom="3dp" />
    </shape>
  </item>
  <item android:state_pressed="true">
    <shape android:shape="rectangle">
      <solid android:color="#E6E4E0"/>
      <stroke android:width="3dp" android:color="#F9C11E"/>
      <padding android:left="3dp"
               android:top="3dp"
               android:right="3dp"
               android:bottom="3dp" />
    </shape>
  </item>
  <item>
    <shape android:shape="rectangle">
      <solid android:color="#E6E4E0"/>
      <stroke android:width="3dp" android:color="#FFF"/>
      <padding android:left="3dp"
               android:top="3dp"
               android:right="3dp"
               android:bottom="3dp" />
    </shape>
  </item>
</selector>

这会在图像周围创建三条不同颜色的3dp线条。它们是可见的,因为填充会强制图像在稍小的区域内渲染。

在代码中使用:

image.setBackgroundResource(R.drawable.gallery_image_bg)

答案 1 :(得分:0)

快速解决方案是使用一个侦听器,它将响应点击,并在imageView上设置橙色边框......

imageView.setOnClickListener(listener)

但您必须为所有ImageView项目执行此操作。至少他们可以共享同一个听众。

很长的解决方案是实现自己的View,扩展ImageView,它会响应点击而绘制自己的橙色边框。

我假设您希望它像单选按钮一样工作,单击ImageView将从先前选择的ImageView中删除边框?因此,您需要共享侦听器来维护对当前所选ImageView的引用,然后在单击新ImageView时可以“取消选择”。

答案 2 :(得分:0)

延迟回答,但您也可以使用LayerDrawable作为图像源。然后你不必乱搞背景,填充等等。

LayerDrawable d = new LayerDrawable(new Drawable[]{new BitmapDrawable(myBmp), getResources().getDrawable(R.drawable.my_selector_list)});
imageView.setImageDrawable(d);