Android-представление не отображается при добавлении layout_weight - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь разделить мой экран на разные размеры, используя четыре линейных макета в линейном макете. Когда я добавляю веса в свой проект, на экране показывается, что макет разделен на 4 четные части в предварительном просмотре макета. Но когда я запускаю приложение на устройстве или эмуляторе, представления не отображаются. Но когда я удаляю весовые атрибуты, отображаются виды.

Я использовал примеры кода, которые успешно использовали свойство веса, но не работают в моей программе. Я также программно получил ширину и высоту всех вложенных представлений в коде. Они не нулевые, поэтому они есть, но просто не видны. Я попытался добавить свойства, такие как видимость = true и focusable = true, но безрезультатно. Я добавил drawView в вид, используя этот код

DrawView drawView = new DrawView();
ViewGroup mainLayout = (ViewGroup) findViewById(R.id.main);
mainLayout.addView(drawView);

DrawView - это класс, расширяющий View, и я вызываю методы canvas.drawLine () и canvas.drawText () для рисования на экране


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:weightSum="4">

    <LinearLayout
        android:visibility="visible"
        android:focusable="true"
        android:id="@+id/l1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="@color/colorAccent"
        android:orientation="horizontal"></LinearLayout>
    <LinearLayout
        android:visibility="visible"
        android:id="@+id/l2"
        android:orientation="horizontal"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:background="@color/colorBtnText"></LinearLayout>
    <LinearLayout
        android:id="@+id/l3"
        android:orientation="horizontal"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:background="@color/colorBtnBackground"></LinearLayout>
    <LinearLayout
        android:id="@+id/l4"
        android:orientation="horizontal"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:background="@color/colorLbl"></LinearLayout>

</LinearLayout>

Ничто из того, что я пробовал выше, не сработало. Я потратил немало времени на это и был бы очень признателен за отзывы.

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

Как вы можете видеть, вы устанавливаете "android: weightSum" на 4 в вашем XML-файле.В то время как у него все еще есть 4 дочерних элемента под основной линейной версткой, код не показывает ошибок.Однако, когда вы запускаете свой код, вы программно добавляете другой вид в ваш основной линейный макет, который превышает весовую сумму вашего основного макета.

Итак, я бы посоветовал удалить атрибут android: weightSum = "4" из вашего XML-макета, чтобы он автоматически вычислял размер макета по его весу.

0 голосов
/ 16 мая 2019

Я думаю, DrawView нужно setLayoutParams(LinearLayout.LayoutParams), прежде чем добавлять в LinearLayout, установить фиксированную высоту или вес с помощью LayoutParams. если вы этого не сделаете, DrawView высота равна MATCH_PARENT, что сделает высоту другого вида равной 0.

Вы можете попробовать это:

DrawView drawView = new DrawView();
LinearLayout mainLayout = (LinearLayout) findViewById(R.id.main);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,0, 1); // or new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,100); to set fixed height
mainLayout.addView(drawView, params);

Если это сработает, я думаю, что лучший способ - это метод DrawView override onMeasure и рассчитать высоту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...