Когда следует использовать android: clickable?
когда мы должны использовать android:clickable
в XML? Должны ли мы когда-нибудь?
Есть ли разница между такой декларацией XML и декларацией в коде myButton.setOnClickListener
? Я прочитал документацию, но я не мог узнать, когда и почему я должен использовать этот атрибут.
PS. Я внедрял ad SDK и обнаружил, что их разработчики используют android:clickable
с WebView
и я был заинтригован, почему они используют его.
5 ответов
как говорится в документации, и насколько я знаю :
clickable
- определяет, реагирует ли это представление на события щелчка. Должно быть логическим значением, либо "true", либо "false".
так, например, если вы просто объявляете Webview
или View
в своем layout.xml
и попробуйте установить OnClickListener
на это мнение OnClick
событие не будет запущено, если вы не укажете атрибут:
android:clickable=true
clickable
кажется полезным, когда вам нужно представление, чтобы использовать клики, чтобы они не переходили к представлениям под видом сверху.
например, у меня есть FrameLayout
что я показываю над базовым RelativeLayout
в определенное время. Когда пользователь нажмет на базовый EditText
фокус переместится на это EditText
. Действительно раздражает, когда FrameLayout
еще показывали. Теперь пользователь не знает, почему клавиатура просто выскочила или где они находятся напечатать.
когда я поставил clickable="true"
на FrameLayout
, пользователи больше не могли случайно щелкнуть базовый EditText
поля.
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
...>
<EditText>
<EditText>
<EditText>
<!-- FrameLayout with grayed-out background. -->
<FrameLayout
android:id="@+id/sometimes_visible_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#80808080"
android:clickable="true"
android:visibility="gone"
android:focusable="true"
...>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
...>
<View>
<View>
</LinearLayout>
</FrameLayout>
</RelativeLayout>
при установке view.setOnClickListener
любой View
,
например: myButton.setOnClickListener(new OnClickListener)
по умолчанию считается
as clickable="true"
.
поэтому вам не нужно будет упоминать, что в XML-файле, как
android:clickable="true"
. The onClick()
событие будет запущено без использования
android:clickable="true"
.
я испытал ситуацию, когда я сделал активность swipeable (проведите влево/вправо или вправо/влево, чтобы двигаться вперед/назад). На некоторых экранах были места, которые были заполнены только LinearLayout. Нет OnClickListener
для макета (это не было необходимо), в результате чего действие салфетки не регистрируется при выполнении на LinearLayout
. Установка android:clickable="true"
решена проблема.
чтобы ответить на ваши вопросы и как выше показано, есть ситуации, в которых использование the clickable
-атрибут может быть полезным.
Я не верю, что вы можете сказать, что задание OnClickListener
Это то же самое, что и установка clickable
-атрибут, но задание OnClickListener
безусловно, делает View
клики, что делает clickable
-атрибут бесполезен (в этой конкретной ситуации).
Я не знаю, почему они использовали в этом случае, но мне пришлось использовать его, когда я создал класс, который расширял linearLayout.
Я создал свой собственный "контроль", и я хотел, чтобы он был кликабельным, поэтому мне пришлось его использовать.
Это один сценарий, если вы будете использовать его