Контурные виды для тестирования / отладки дизайна - PullRequest
2 голосов
/ 21 октября 2011

Есть ли простой способ обвести представления с рамкой в ​​некоторый цвет, когда вы запускаете приложение, чтобы увидеть, как позиция и размер для видов? Как вы могли бы набросать элементы на веб-странице в Firefox с помощью дополнения «веб-разработчик».

Прямо сейчас у меня есть несколько xml-файлов для рисования фигур разных цветов, которые я использую в разных представлениях. Но не оптимально добавлять и удалять все эти фигуры, которые можно нарисовать для видов в XML-файлах макета, просто чтобы включить или выключить контур.

Одно из решений, которое я, возможно, мог бы сработать (но предположим, что есть более эффективные способы), заключается в том, если можно добавить все "shape: s" в одном отдельном XML и при этом иметь возможность "ссылаться" на каждый отдельный от макет XML-файлов? В этом случае я мог бы просто иметь два XML-файла, один с «штрихом» в «форме», а другой без (просто пустой «shape: s»), и просто изменить имя между ними, чтобы включить или выключить выделение.

Прямо сейчас каждый файл формы выглядит следующим образом (ex drawable / test_border_red.xml)

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
  <stroke 
    android:width="1dp" 
    android:color="#ff0000" 
    />
  <padding 
    android:left="1dp" 
    android:top="1dp" 
    android:right="1dp"
    android:bottom="1dp" 
    />   
  </shape>

и добавление ...

android:background="@drawable/test_border_red"

к каждому интересному виду в XML-файле макета.

Если возможно иметь все "фигуры" в одном XML-файле, как должен выглядеть код?

Ответы [ 3 ]

6 голосов
/ 02 сентября 2016

Код не требуется:

На устройстве, которое вы используете для тестирования, перейдите на settings -> developer options и включите Show layout boundaries

Проблема решена

2 голосов
/ 01 ноября 2014

Попробуйте этот рекурсивный метод, используя корневой вид действия

private void outlineViews(View parent){
    if (!(parent instanceof ViewGroup)){
        return;
    }
    ViewGroup vg = (ViewGroup) parent;
    for (int i=0; i<vg.getChildCount(); i++){
        View view = vg.getChildAt(i);
        GradientDrawable gd = new GradientDrawable();
        gd.setStroke(3, Color.RED);
        view.setBackgroundDrawable(gd);
        outlineViews(view);
    }
}

Вы также можете выбрать «Иерархия дамп-представления» на вкладке «Устройства», она сбросит ваш текущий макет со всей информацией о представлении

enter image description here

0 голосов
/ 02 марта 2012

Одним из возможных решений является то, что вы можете иметь несколько пользовательских макетов, например, Вы можете расширить LinearLayout и переопределить метод onDraw,

В методе onDraw новых пользовательских макетов вы можете получить позиции всех дочерних видов и рекурсивно нарисовать на них штрихи

...