Как использовать пользовательские виды с другими компонентами пользовательского интерфейса? - PullRequest
0 голосов
/ 11 ноября 2019

Моя проблема в том, что я хочу получить что-то вроде этого:

Вот иллюзия

enter image description here

Итак, янужна панель инструментов вверху, затем настраиваемый вид (где я использую холст, чтобы позволить пользователю рисовать объекты - круги и ребра между кругами) и, наконец, макет внизу (с компонентами ImageButton - например, для очистки холстав пользовательском представлении).

Все работает нормально, за исключением того, что я не могу добавить нижний слой (с помощью кнопок ImageButtons), потому что пользовательское представление занимает все доступное пространство.

Мой код:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    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"
    android:orientation="vertical">

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/bogoToolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#27A9E0"
        android:minHeight="45dp"
        app:titleTextColor="@android:color/white">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Breadth-First Search Visualization"
            android:textColor="#ffffff"
            android:textSize="20dp"
            android:textStyle="bold"
            app:fontFamily="@font/roboto_slab" />

    </androidx.appcompat.widget.Toolbar>

    <com.globalsoftwaresupport.graph.bfs.BreadthFirstSearchView
        android:id="@+id/breadthFirstSearchView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="68dp"
        android:minHeight="100dp"
        android:orientation="horizontal">

        <ImageButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/quiz_icon" />

        <ImageButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/quiz_icon2" />

    </LinearLayout>

</LinearLayout>

У вас есть предложения, что я делаю не так? Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 11 ноября 2019

Вам лучше использовать ConstraintLayout. Ограничьте панель инструментов вверху и Linearlayout с помощью кнопок внизу, затем ограничьте верхнюю часть BreadthFirstSearchView до нижней части toobar с полем 0dp, а нижнюю часть BreadthFirstSearchView - до верхней части LinearLayout с 0dp, и установите layout_height для BreadthFirstSearMATCH_CONSTRAINTS (0dp). Вот как должен выглядеть ваш файл макета:

<androidx.constraintlayout.widget.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">

<androidx.appcompat.widget.Toolbar
    android:id="@+id/bogoToolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#27A9E0"
    android:minHeight="45dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:titleTextColor="@android:color/white">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Breadth-First Search Visualization"
        android:textColor="#ffffff"
        android:textSize="20dp"
        android:textStyle="bold"
        app:fontFamily="@font/roboto_slab" />

</androidx.appcompat.widget.Toolbar>

<com.globalsoftwaresupport.graph.bfs.BreadthFirstSearchView
    android:id="@+id/breadthFirstSearchView"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_marginTop="0dp"
    android:layout_marginBottom="0dp"
    app:layout_constraintBottom_toTopOf="@+id/linearLayout"
    app:layout_constraintTop_toBottomOf="@+id/bogoToolbar" />

<LinearLayout
    android:id="@+id/linearLayout"
    android:layout_width="match_parent"
    android:layout_height="68dp"
    android:minHeight="100dp"
    android:orientation="horizontal"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent">

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/quiz_icon" />

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/quiz_icon2" />

</LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

И последнее. Если вы хотите, чтобы ваше представление отображалось в редакторе в Android Studio и можно было накачать его из XML. Вы должны предоставить этот конструктор:

public YourView(Context context, AttributeSet attrs) {
        super(context, attrs);

}

Удачи!

0 голосов
/ 11 ноября 2019

Проблема с этим представлением

<com.globalsoftwaresupport.graph.bfs.BreadthFirstSearchView
        android:id="@+id/breadthFirstSearchView"
        android:layout_width="match_parent" <-------
        android:layout_height="wrap_content"/>

Ваш BreadthFirstSearchView является match_parent, который занимает все пространство под панелью инструментов, назначение весов сделает его отзывчивым.

 <com.globalsoftwaresupport.graph.bfs.BreadthFirstSearchView
        android:id="@+id/breadthFirstSearchView"
        android:layout_height="0dp"
        android:weight="1"
        android:layout_width="wrap_content"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...