2015-03-17 2 views
0

Я меняю макет, чтобы использовать RelativeLayout вместо сложного вложенного LinerLayouts, но я столкнулся с некоторыми проблемами с получением OnClickListener для работы View.Android RelativeLayout clickable overlay view

Я пробовал обычные вещи - выставляю на передний план, устанавливаем интерактивный, устанавливая фокусируемое/focusableInTouchMode в true и false, ничто, кажется, не работает для меня. Надеюсь, я только что сделал глупую ошибку, и вы, ребята, можете помочь мне: D

Вот мой код:

Layout: < удалены, см редактировать>

Пользовательские базовый адаптер: < удален , получается его просто макетный вопрос>

Макет для элемента строки в адаптере списка, и мне нужно сделать только половину строки, доступной по клику, так как другая половина имеет свои собственные переключатели (которые работают правильно).

Заранее благодарим за любые предложения!

EDIT: Это странно - я изменил его от View к TextView, установить цвет фона, и теперь он показывает вверх - но это не следующие относительные параметры макета:

 android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentBottom="true" 
     android:layout_toLeftOf="@+id/toggle" 

В частности, она не делает выровняйте его сверху. Но щелчок работает! Теперь, чтобы просто получить его, чтобы покрыть весь путь к вершине ...

EDIT2:

Обновленный код макета:

< удалены, см позже редактировать>

EDIT3:

Апельсин clickView - я хочу, чтобы он расширялся до вершины каждой строки.

enter image description here

EDIT4: (изменено название)

Ok Я получил это работает должным образом в настоящее время, с clickView, покрывающей верхнюю строку в нижней части левой стороны (и без использования определенной высоты/ширины).
Вот текущий код макета, дайте мне знать, есть ли что-то, что я должен делать по-другому/любые улучшения, о которых вы можете думать!

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" android:layout_height="match_parent"> 

    <View android:id="@+id/fakeView" 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     android:layout_centerInParent="true"/> 

    <TextView android:id="@+id/clickView" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_toLeftOf="@+id/toggle" 
     android:layout_alignBottom="@+id/pokemonTypes" /> 
     <!-- android:background="#ffff914e" --> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="001" 
     android:id="@+id/pokemonNumber" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_margin="5dp" /> 

    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="Bulbasaur" 
     android:id="@+id/pokemonName" 
     android:layout_alignParentTop="true" 
     android:layout_toRightOf="@+id/pokemonNumber" 
     android:layout_alignRight="@+id/fakeView" 
     android:layout_marginLeft="5dp" /> 

    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceSmall" 
     android:text="Grass" 
     android:id="@+id/pokemonTypes" 
     android:layout_below="@+id/pokemonName" 
     android:layout_toRightOf="@+id/pokemonNumber" 
     android:layout_alignRight="@+id/fakeView" 
     android:layout_marginLeft="5dp" /> 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:id="@+id/pokemonImage" 
     android:layout_centerInParent="true" 
     android:layout_alignParentTop="true" 
     android:layout_alignLeft="@+id/fakeView" /> 

    <ToggleButton 
     android:id="@+id/toggle" 
     android:layout_width="25dp" 
     android:layout_height="25dp" 
     android:background="@drawable/check1" 
     android:textOn="" 
     android:textOff="" 
     android:focusable="false" 
     android:focusableInTouchMode="false" 
     android:layout_margin="5dp" 
     android:layout_centerInParent="true" 
     android:layout_alignParentTop="true" 
     android:layout_toLeftOf="@+id/toggle2" /> 

    <ToggleButton 
     android:id="@+id/toggle2" 
     android:layout_width="25dp" 
     android:layout_height="25dp" 
     android:background="@drawable/check2" 
     android:textOn="" 
     android:textOff="" 
     android:focusable="false" 
     android:focusableInTouchMode="false" 
     android:layout_margin="5dp" 
     android:layout_centerInParent="true" 
     android:layout_alignParentTop="true" 
     android:layout_toLeftOf="@+id/toggle3" /> 

    <ToggleButton 
     android:id="@+id/toggle3" 
     android:layout_width="25dp" 
     android:layout_height="25dp" 
     android:background="@drawable/check3" 
     android:textOn="" 
     android:textOff="" 
     android:focusable="false" 
     android:focusableInTouchMode="false" 
     android:layout_margin="5dp" 
     android:layout_centerInParent="true" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentRight="true" /> 

</RelativeLayout> 

Еще одна вещь, которую я хотел бы сделать - добавить больше пространства справа от клевантах (маржи возможно?), Так что при прокрутке быстрой прокрутки не покрывает пуговицу. Есть идеи?

+0

Почему у вас есть 'android: focusableInTouchMode =" false "и' android: focusable = "false" '? – codeMagic

+0

Осталось от них попробовать - я установил их как истинные, так и истинные, другие истинные ... и т. Д., Без успеха. Он не работает без них – mmmyum

+0

Я хочу это приложение –

ответ

0

Это образец макета, основанный на ваших ответах. Это не совсем так, как ваш оригинальный макет, но я стараюсь сделать его похожим, когда это применимо. Пожалуйста, будьте осторожны и сравните то, что отсутствует как разница. Он выглядит почти идеально в дизайнере.

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <View 
     android:id="@+id/fakeView" 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     android:layout_centerInParent="true" /> 

    <TextView 
     android:id="@+id/clickView" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 

     android:layout_alignBottom="@id/info" 
     android:layout_alignTop="@id/info" 
     android:background="#ffff914e" /> 

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/info" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 

     android:orientation="horizontal"> 

     <TextView 
      android:id="@+id/pokemonNumber" 
      android:layout_width="wrap_content" 

      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentStart="true" 
      android:layout_margin="5dp" 
      android:text="001" 
      android:textAppearance="?android:attr/textAppearanceMedium" /> 

     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 

      android:orientation="vertical"> 

     <TextView 
      android:id="@+id/pokemonName" 
      android:layout_width="fill_parent" 

      android:layout_height="wrap_content" 
      android:layout_alignRight="@+id/fakeView" 

      android:layout_marginLeft="5dp" 
      android:layout_toEndOf="@+id/pokemonNumber" 
      android:layout_toRightOf="@+id/pokemonNumber" 
      android:text="Bulbasaur" 
      android:textAppearance="?android:attr/textAppearanceMedium" /> 

     <TextView 
      android:id="@+id/pokemonTypes" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="5dp" 

      android:layout_marginStart="5dp" 
      android:text="Grass" 
      android:textAppearance="?android:attr/textAppearanceSmall" /> 

     </LinearLayout> 

     <ImageView 
      android:id="@+id/pokemonImage" 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:layout_alignLeft="@+id/fakeView" 
      android:layout_alignParentTop="true" 
      android:layout_gravity="center" /> 

     <ToggleButton 
      android:id="@+id/toggle" 
      android:layout_width="25dp" 
      android:layout_height="25dp" 

      android:text="Toggle" 

      android:textOn="" 
      android:textOff="" 
      android:focusable="false" 
      android:focusableInTouchMode="false" 
      android:layout_gravity="center_vertical" 
      android:layout_margin="5dp" /> 

    </LinearLayout> 

</RelativeLayout> 

Примечание:

  1. Вложенный LinearLayout используется для установки некоторых элементов пользовательского интерфейса в горизонтальной ориентации/зрении. И я дал ему идентификатор для справки.
  2. Для clickView используются layout_alignBottom и layout_alignTop. Я думаю, что layout_alignParentTop и его дно бесполезны для ваших нужд.
  3. layout_height clickView is wrap_content, не нужно устанавливать определенную высоту, которая может не выглядеть хорошо в разных разрешениях экрана.
  4. Тексты текстовых изображений pokemonTypes после LinearLayout, так что они вертикальны относительно pokemonName.

В целом макет может быть не идеальным для ваших спецификаций. Я думаю, что это хорошее начало.

Еще одна хорошая идея - использовать атрибут layout_weight, но до сих пор я думаю, что вам это не нужно. layout_weight позволяет избежать использования определенных значений. Помните, я стараюсь не использовать определенные значения, надеясь избежать проблем с разрешениями экрана.

+0

Не публикуйте другой ответ. Просто отредактируйте свой предыдущий ответ. – Piyush

+0

@Piyush, Когда это логичное время, я удалю другой ответ. Нам нужно оставить комментарии. –

+0

@ TheOriginalAndroid Спасибо, я ценю всю вашу помощь! Я активно использовал LinearLayouts раньше с значениями layout_weight, но при прокрутке списка на более старых устройствах я заикался. Я считаю, что заикание было связано с вложенными LinearLayouts, поэтому теперь я пытаюсь сохранить иерархию представлений более мелкой (до того, как она была 3-х глубиной) в целях повышения производительности, следовательно, переход на RelativeLayouts. – mmmyum

Смежные вопросы