2013-07-31 2 views
1

У меня есть RelativeLayout и ImageView.
Схема приводится ниже -
Событие Click для родительского и детского просмотра

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/rlMain" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@android:color/black" > 

<ImageView 
    android:id="@+id/ivIcon" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/ic_launcher" /> 

</RelativeLayout> 

The Activity код -

public class MainActivity extends Activity implements OnClickListener{ 

private RelativeLayout rlMain; 
private ImageView ivIcon; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    rlMain = (RelativeLayout) findViewById(R.id.rlMain); 
    ivIcon = (ImageView) findViewById(R.id.ivIcon); 
    rlMain.setOnClickListener(this); 
    ivIcon.setOnClickListener(this); 
} 

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.rlMain: 
     Toast.makeText(this, "Relative Layout clicked", Toast.LENGTH_SHORT).show(); 
     break; 

    case R.id.ivIcon: 
     Toast.makeText(this, "Image View clicked", Toast.LENGTH_SHORT).show(); 
     break; 
    } 

} 

} 

Я применяется на клик слушателя для обоих RelativeLayout (родителя) и ImageView (ребенка).
При щелчке по относительной компоновке - обрабатывается обработчиком обратного расположения. (Это кажется правильным).

При нажатии на Imagview - обрабатывается изображение. (Вот путаница).

Должен ли щелчок по представлению изображения обрабатываться как родительским (относительный макет), так и дочерним (изображение)? Какова логика, если обрабатывается только дочерний вид?

+0

Параметр '' RelativeLayout' в onClick' у слушателя будет называться даже если вы нажмете на изображение. –

+0

Почему бы не удалить '.setOnClickListener' из метода' OnCreate() '(для' ImageView' и 'RelativeLayout'). Вместо этого поставьте 'android: onClick =" onClickFunction' на обоих макетах и ​​переименуйте 'onClick()' в 'onClickFunction()' (также необходимо удалить анонс @Override). Это будет работать точно! – g00dy

+0

@ micro.pravi: Нет, он не вызван. Вызывается только обработчик щелчка изображения. – Anukool

ответ

0

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

1

ClickEvent будет доставлен младшему дочернему элементу в иерархии компоновки. Если этот элемент не имеет поведения onClick, он передает событие до его родителя до тех пор, пока событие не будет обработано.

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

Источник: Does making parent clickable make all child element clickable as well?

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