Макет Android - ImageView сфокусирован, но на экране ничего не отображается (без выделения) - PullRequest
1 голос
/ 07 октября 2010

Если я установлю свой ImageView как на кликабельный, так и на фокусируемый, это будет работать, но я не могу сказать, какое изображение сфокусировано.Какой лучший способ заставить его нарисовать оранжевую рамку вокруг вида, чтобы пользователь знал, что он в данный момент находится в фокусе?

Я попытался поместить его в LinearLayout и установить вместо него фокусировку и щелчок, но нене повезло.Даже когда я добавляю поле, ничто не указывает на то, что он был выбран.

Ответы [ 3 ]

6 голосов
/ 02 марта 2011

Вы можете использовать рисование с селектором в качестве фона.

Например, у меня есть файл gallery_image_bg.xml в res / drawable:

<?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)
0 голосов
/ 18 сентября 2013

Поздний ответ, но вы также можете использовать LayerDrawable для источника изображения.Тогда вам не нужно возиться с фоном, отступами и т. Д.

LayerDrawable d = new LayerDrawable(new Drawable[]{new BitmapDrawable(myBmp), getResources().getDrawable(R.drawable.my_selector_list)});
imageView.setImageDrawable(d);
0 голосов
/ 08 октября 2010

Быстрое решение состоит в том, чтобы использовать прослушиватель, который будет реагировать на щелчок, и установить оранжевую рамку для imageView ...

imageView.setOnClickListener(listener)

Но вы должны сделать это для всех элементов ImageView.,По крайней мере, они могут использовать одного и того же слушателя.

Длинное решение - реализовать собственный View, расширяющий ImageView, который рисует свою оранжевую рамку в ответ на щелчок.это работает как переключатели, где нажатие на ImageView удалит границу из ранее выбранного ImageView?Таким образом, вам понадобится общий прослушиватель для поддержки ссылки на текущий выбранный ImageView, который затем можно будет «отменить» при нажатии нового ImageView.

...