在FrameLayout中向重叠小部件添加onclick侦听器不起作用

时间:2012-12-19 02:03:56

标签: java android xml android-layout android-widget

我有一个带有多个ImageView的FrameLayout,如图所示。enter image description here

我已经为所有这些Imageview注册了听众。 我使用android:layout_gravity,android:paddingLeft和android:paddingRight定位了ImageViews,因为images are overlapping

我的Activity类如下:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    ivbglogin = (ImageView) findViewById(R.id.bglogin);
    ivlogin = (ImageView) findViewById(R.id.login);
    tvlogin = (TextView) findViewById(R.id.tvlogin);

    ivbgsignup = (ImageView) findViewById(R.id.bgsignup);
    ivsignup = (ImageView) findViewById(R.id.signup);
    tvsignup = (TextView) findViewById(R.id.tvsignup);

    ivbglogin.setOnClickListener(this);
    ivlogin.setOnClickListener(this);
    tvlogin.setOnClickListener(this);
    ivbgsignup.setOnClickListener(this);
    ivsignup.setOnClickListener(this);
    tvsignup.setOnClickListener(this);
}

@Override
public void onClick(View v) {

    switch (v.getId()) {
    case R.id.bglogin:
        Toast.makeText(AstralPadActivity.this, "bglogin", Toast.LENGTH_SHORT).show();
        break;
    case R.id.login:
        Toast.makeText(AstralPadActivity.this, "login", Toast.LENGTH_SHORT).show();
        break;
    case R.id.tvlogin:
        Toast.makeText(AstralPadActivity.this, "tvlogin", Toast.LENGTH_SHORT).show();
        openLoginDialog();

        break;

    case R.id.bgsignup:
        Toast.makeText(AstralPadActivity.this, "bgsignup", Toast.LENGTH_SHORT).show();
        break;
    case R.id.signup:
        Toast.makeText(AstralPadActivity.this, "signup", Toast.LENGTH_SHORT).show();
        break;
    case R.id.tvsignup:
        Toast.makeText(AstralPadActivity.this, "tvsignup", Toast.LENGTH_SHORT).show();
        break;

    }
}

Framwlayout是

<FrameLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="40"
    android:background="@drawable/start_bottombg" >

    <ImageView
        android:id="@+id/bglogin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:paddingRight="194dp"
        android:paddingBottom="8dp"
        android:paddingTop="8dp"
        android:src="@drawable/start_loginbg" />

    <ImageView
        android:id="@+id/login"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:paddingBottom="15dp"
        android:paddingRight="200dp"
        android:paddingTop="15dp"
        android:src="@drawable/icon_login" />

    <TextView
        android:id="@+id/tvlogin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:paddingRight="120dp"
        android:text="Log In"
        android:textSize="15dp"
        android:textStyle="bold" />

    <ImageView
        android:id="@+id/bgor"
        android:layout_width="25dp"
        android:layout_height="25dp"
        android:layout_gravity="center"
        android:src="@drawable/start_or" />

    <ImageView
        android:id="@+id/bgsignup"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:paddingLeft="190dp"
        android:paddingBottom="8dp"
        android:paddingTop="8dp"
        android:src="@drawable/start_signupbg" />

    <ImageView
        android:id="@+id/signup"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:paddingBottom="15dp"
        android:paddingLeft="100dp"
        android:paddingTop="15dp"
        android:src="@drawable/icon_signup" />

    <TextView
        android:id="@+id/tvsignup"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:paddingLeft="200dp"
        android:text="Sign Up"
        android:textSize="15dp"
        android:textStyle="bold" />
</FrameLayout>

所以当我点击棕色的ImageView时,它会调用绿色的ImageView。 我想知道如何为每个元素注册监听器,并在点击相应的小部件时调用这些特定的监听器。

提前致谢。

2 个答案:

答案 0 :(得分:0)

之前没有碰到过,但听起来你正在遇到(由于缺乏更好的术语)未定义的行为。使用RelativeLayout选项吗?如果没有,那么调整尺寸以防止重叠?除此之外 - 尝试分配单独的匿名侦听器而不是检查小部件ID的侦听器。

请记住,在每一步中,都会在调试器/跟踪文件中进行爬行,以验证您认为发生了什么,并且确实在发生。

答案 1 :(得分:0)

问题是因为我使用的是android:paddingLeft="200dp"而不是android:layout_marginLeft="100dp"。由于填充,图像重叠。现在它工作正常。