Android кликабельный макет - PullRequest
       33

Android кликабельный макет

12 голосов
/ 26 декабря 2010

У меня есть линейный макет, который я установил true, чтобы быть кликабельным + фокус, но проблема в том, что при нажатии не отображается фокус. Как я могу получить фокус для отображения.

Вот мой код

<LinearLayout
  android:id="@+id/linear_tv_layout"
  android:orientation="horizontal"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:layout_weight="1"
  android:clickable="true"
  android:focusable="true"
  android:paddingBottom="7px">

Ответы [ 6 ]

15 голосов
/ 12 мая 2015

Чтобы применить кнопку дизайна материала, нажмите анимацию к любому элементу, установите для атрибута фона android элемента значение:

android:background="?android:attr/selectableItemBackground"

В вашем случае:

<LinearLayout
  android:id="@+id/linear_tv_layout"
  android:orientation="horizontal"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:layout_weight="1"
  android:clickable="true"
  android:focusable="true"
  android:paddingBottom="7px"
  android:background="?android:attr/selectableItemBackground">
15 голосов
/ 26 декабря 2010

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


РАЗЪЯСНЕНИЯ - это пример из ранее связанных документов:

res/drawable/button.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/button_pressed" /> <!-- pressed -->
    <item android:state_focused="true"
          android:drawable="@drawable/button_focused" /> <!-- focused -->
    <item android:drawable="@drawable/button_normal" /> <!-- default -->
</selector>

button_pressed, button_focused и button_normal - это обычные элементы рисования, представляющие кнопки в этих состояниях, возможно, png (поэтому нажатие может быть вставлено, фокусировка выделена оранжевым цветом).

если вы установите этот ресурс в качестве фона для вашей "кнопки линейного макета":

<LinearLayout
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:background="@drawable/button">
    ...
</LinearLayout>

Теперь при фокусировке макета автоматически устанавливается фоновое изображение @drawable/button_focused и т. Д.

конечно, все используемые вами элементы рисования должны быть уже ресурсами res/drawable/ вместе с button.xml.

4 голосов
/ 22 августа 2013

@ danLeon: Вместо Android: фон = "@ андроид: рисуем / btn_default"

вы должны использовать
Android: фон = "@ андроид: рисуем / list_selector_background"

прежний также изменит пользовательский интерфейс, который не требуется.

0 голосов
/ 16 июня 2013

Простой способ - установить этот атрибут: android:background="@android:drawable/btn_default"

<LinearLayout
  android:id="@+id/linear_tv_layout"
  android:orientation="horizontal"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:layout_weight="1"
  android:clickable="true"
  android:focusable="true"
  android:paddingBottom="7px"
  android:background="@android:drawable/btn_default"
  >
0 голосов
/ 27 декабря 2010

Вот пример макета, это может дать вам некоторое представление:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<LinearLayout
  android:background="@android:drawable/btn_default"
  android:clickable="true"
  android:focusable="true"
  android:layout_width="fill_parent"
  android:layout_height="0dip"
  android:layout_weight="1"
  >

  <ImageView
    android:id="@+id/image"
    android:src="@android:drawable/star_big_on"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    />

</LinearLayout>

<LinearLayout
  android:background="@android:drawable/btn_default"
  android:clickable="true"
  android:focusable="true"
  android:layout_width="fill_parent"
  android:layout_height="0dip"
  android:layout_weight="1"
  >

  <ImageView
    android:id="@+id/image"
    android:src="@android:drawable/star_big_on"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    />

</LinearLayout>
</LinearLayout>
0 голосов
/ 26 декабря 2010

Попробуйте вывести этот макет на передний план в коде:

public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);

    View mainView = this.findViewById(R.id.mainView);
    this.setContentView(mainView);

    LinearLayout linear_tv_layout = (LinearLayout)mainView.findViewById(R.id.linear_tv_layout);
    linear_tv_layout.bringToFront();
    // or: mainView.bringChildToFront(linear_tv_layout);
}

Если это не сработает, проверьте, не перекрывается ли одно или несколько представлений над этим LinearLayout.

...