Как получить ConstraintLayout из представления? - PullRequest
0 голосов
/ 06 марта 2019

У меня есть приложение, и у меня есть динамически меняющееся перекрестие, которое должно следовать, где пользователь нажимает. То, что я пытаюсь сделать, чтобы заставить перекрестие двигаться, изменяет ограничения на перекрестие относительно сторон вида.

Вот мой код.

ConstraintSet set = new ConstraintSet();
View layout = findViewById(R.id.crosshair);

set.clone((ConstraintLayout) layout);
set.clear(R.id.crosshair,ConstraintSet.LEFT);
set.clear(R.id.crosshair,ConstraintSet.TOP);
set.connect(R.id.crosshair,ConstraintSet.TOP,R.id.CourseMain,y);
set.connect(R.id.crosshair,ConstraintSet.LEFT,R.id.CourseMain,x);

set.applyTo((ConstraintLayout) layout);

К сожалению, я не могу привести представление к ограничению, и у меня возникают проблемы с поиском способа получения макета ограничения.

Итак, я действительно спрашиваю. Как получить ConstraintLayout из представления ИЛИ как мне получить ConstraintLayout в целом. Я тоже там немного потерялся.

Ответы [ 2 ]

1 голос
/ 06 марта 2019

Если вы используете java, объявите Activity_main в папке res / layout:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/constraintLayoutParent"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">

</android.support.constraint.ConstraintLayout>

В этом файле идентификатор, заданный для макета ограничения, constraintLayoutParent

Объявите действие MainActivity.class:

import android.app.Activity;
import android.os.Bundle;
import android.support.constraint.ConstraintLayout;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final ConstraintLayout mConstraintLayout=findViewById(R.id.constraintLayoutParent);

        mConstraintLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "Constraint layout clicked", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

В MainActivity.class строка:

final ConstraintLayout mConstraintLayout = findViewById (R.id.constraintLayoutParent);

ЗдесьИдентификатор должен быть таким же, который используется в XML, т.е. constraintLayoutParent

0 голосов
/ 06 марта 2019

Ваш ConstraintLayout должен иметь значение идентификатора, вы можете использовать это:

Макет ConstraintLayout = (ConstraintLayout) this.findViewById (R.id.thelayoutid)

...