约束布局在层次结构中返回错误的ID

时间:2018-12-25 01:08:54

标签: java android android-layout

我正在研究约束布局,该布局有两个图像按钮,不同的想法彼此相对放置,如下所示:

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


<!-- here are some views -->

<ImageButton
    android:id="@+id/openCamera"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:background="@null"
    android:clickable="true"
    android:contentDescription="@string/camera_button"
    android:focusable="true"
    android:scaleX="3.7"
    android:scaleY="3.7"
    android:adjustViewBounds="true"
    app:layout_constraintBottom_toTopOf="@id/text"
    app:layout_constraintEnd_toStartOf="@id/openGallery"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@id/logoText"
    app:srcCompat="@drawable/ic_camera_icon" />

<ImageButton
    android:id="@+id/openGallery"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:background="@null"
    android:adjustViewBounds="true"
    android:clickable="true"
    android:contentDescription="@string/gallery_button"
    android:focusable="true"
    android:scaleX="3.7"
    android:scaleY="3.7"
    app:layout_constraintBottom_toTopOf="@id/text"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toEndOf="@id/openCamera"
    app:layout_constraintTop_toBottomOf="@id/logoText"
    app:srcCompat="@drawable/ic_gallery_icon" />

<!-- other views -->

</android.support.constraint.ConstraintLayout>

这里的问题是,当我单击以太按钮时,我得到第二个按钮的 id (就像交换位置时,​​我总是得到第二个 id )。

我如何解决此问题?

-我尝试过的是:

  • 未实现View.OnClickListener接口,并检查了它仍然存在相同的问题。

  • 我在相对布局方面做得很好,但是层次结构很多,所以我切换到约束布局。

java代码是:

@Override
protected void onCreate(Bundle savedInstanceState) {
    ImageButton openCameraButton = (ImageButton) findViewById(R.id.openCamera);
    ImageButton openGalleryButton = (ImageButton) findViewById(R.id.openGallery);
    openCameraButton.setOnClickListener(this);
    openGalleryButton.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.openCamera:
            someMethod();
            break;
        case R.id.openGallery:
            antherMethod();
            break;
        default:
            Log.v(TAG, "HOW YOU GET THERE!!!");
            break;
    }
}

我从调试模式中得到了什么: enter image description here

3 个答案:

答案 0 :(得分:0)

我看到了这段代码

<ImageButton
    android:id="@+id/openCamera"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:background="@null"
    android:clickable="true"
    android:contentDescription="@string/camera_button"
    android:focusable="true"
    android:onClick="onClick"
    android:scaleX="3.7"
    android:scaleY="3.7"
    android:adjustViewBounds="true"
    app:layout_constraintBottom_toTopOf="@id/text"
    app:layout_constraintEnd_toStartOf="@id/openGallery"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@id/logoText"
    app:srcCompat="@drawable/ic_camera_icon" />

尝试删除此行

android:onClick="onClick"

希望获得帮助

答案 1 :(得分:0)

这是因为回调方法onClick已链接到第一个按钮。 从xml删除行android:onClick =“ onClick”

答案 2 :(得分:0)

现在这个答案对我来说适用于ConstrainLayout

我所做的是为“图像”按钮添加了大于0的宽度(在这里为100 )。不知道为什么,但是现在可以使用!!!

<ImageButton
    android:id="@+id/openCamera"
    android:layout_width="100dp"
    android:layout_height="0dp"
    android:background="@null"
    android:clickable="true"
    android:contentDescription="@string/camera_button"
    android:focusable="true"
    android:scaleX="3.7"
    android:scaleY="3.7"
    android:adjustViewBounds="true"
    app:layout_constraintBottom_toTopOf="@id/text"
    app:layout_constraintEnd_toStartOf="@id/openGallery"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@id/logoText"
    app:srcCompat="@drawable/ic_camera_icon" />

<ImageButton
    android:id="@+id/openGallery"
    android:layout_width="100dp"
    android:layout_height="0dp"
    android:background="@null"
    android:adjustViewBounds="true"
    android:clickable="true"
    android:contentDescription="@string/gallery_button"
    android:focusable="true"
    android:scaleX="3.7"
    android:scaleY="3.7"
    app:layout_constraintBottom_toTopOf="@id/text"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toEndOf="@id/openCamera"
    app:layout_constraintTop_toBottomOf="@id/logoText"
    app:srcCompat="@drawable/ic_gallery_icon" />

希望有人能提供更好的答案或解决此问题。