我有一个带有多个ImageView的FrameLayout,如图所示。
我已经为所有这些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。 我想知道如何为每个元素注册监听器,并在点击相应的小部件时调用这些特定的监听器。
提前致谢。
答案 0 :(得分:0)
之前没有碰到过,但听起来你正在遇到(由于缺乏更好的术语)未定义的行为。使用RelativeLayout
选项吗?如果没有,那么调整尺寸以防止重叠?除此之外 - 尝试分配单独的匿名侦听器而不是检查小部件ID的侦听器。
请记住,在每一步中,都会在调试器/跟踪文件中进行爬行,以验证您认为发生了什么,并且确实在发生。
答案 1 :(得分:0)
问题是因为我使用的是android:paddingLeft="200dp"
而不是android:layout_marginLeft="100dp"
。由于填充,图像重叠。现在它工作正常。