1

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

Основным преимуществом использования линейного макета является тот факт, что весы макета могут использоваться для равномерного распределения прямоугольников, но, к сожалению, когда линейные макеты удаляются, и приходится отвечать на относительную компоновку, представляется невозможным без использования единицы измерения dp (с этим я не хочу, особенно учитывая тот факт, что экраны Android бывают разных размеров).

enter image description here

<RelativeLayout 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:background="#808080" > 
     <include 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerInParent="true" 
      android:layout_gravity="center" 
      layout="@layout/textview_carriage2"/> 
     <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="10dp" 
      android:layout_alignParentTop="true" 
      android:orientation="horizontal" 
      android:weightSum="100" 
      android:baselineAligned="false" > 

      <include 
       android:layout_width="0dp" 
       android:layout_height="match_parent" 
       android:layout_weight="20" 
       layout="@layout/view_emptyrect_red"/> 

      <include 
       android:layout_width="1dp" 
       android:layout_height="match_parent" 
       android:layout_weight="7" 
       layout="@layout/view_spacebetweenwindows"/> 

      <include 
       android:layout_width="0dp" 
       android:layout_height="match_parent" 
       android:layout_weight="20" 
       layout="@layout/view_emptyrect_red"/> 

      <include 
       android:layout_width="1dp" 
       android:layout_height="match_parent" 
       android:layout_weight="6" 
       layout="@layout/view_spacebetweenwindows"/> 

      <include 
       android:layout_width="0dp" 
       android:layout_height="match_parent" 
       android:layout_weight="20" 
       layout="@layout/view_emptyrect_red"/> 

      <include 
       android:layout_width="1dp" 
       android:layout_height="match_parent" 
       android:layout_weight="7" 
       layout="@layout/view_spacebetweenwindows"/> 

      <include 
       android:layout_width="0dp" 
       android:layout_height="match_parent" 
       android:layout_weight="20" 
       layout="@layout/view_emptyrect_red"/> 
     </LinearLayout> 

     <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="10dp" 
      android:layout_alignParentBottom="true" 
      android:orientation="horizontal" 
      android:weightSum="100" 
      android:baselineAligned="false" > 

      <include 
       android:layout_width="0dp" 
       android:layout_height="match_parent" 
       android:layout_weight="20" 
       layout="@layout/view_emptyrect_red"/> 

      <include 
       android:layout_width="1dp" 
       android:layout_height="match_parent" 
       android:layout_weight="7" 
       layout="@layout/view_spacebetweenwindows"/> 

      <include 
       android:layout_width="0dp" 
       android:layout_height="match_parent" 
       android:layout_weight="20" 
       layout="@layout/view_emptyrect_red"/> 

      <include 
       android:layout_width="1dp" 
       android:layout_height="match_parent" 
       android:layout_weight="6" 
       layout="@layout/view_spacebetweenwindows"/> 

      <include 
       android:layout_width="0dp" 
       android:layout_height="match_parent" 
       android:layout_weight="20" 
       layout="@layout/view_emptyrect_red"/> 

      <include 
       android:layout_width="1dp" 
       android:layout_height="match_parent" 
       android:layout_weight="7" 
       layout="@layout/view_spacebetweenwindows"/> 

      <include 
       android:layout_width="0dp" 
       android:layout_height="match_parent" 
       android:layout_weight="20" 
       layout="@layout/view_emptyrect_red"/> 
     </LinearLayout> 
    </RelativeLayout> 
+0

Если вам нужны только красные прямоугольники как украшение затем создать пользовательские 'View' и переопределить' OnDraw() 'метод. – Lamorak

+0

Я не хочу использовать onDraw, XML проще для меня, так как позже я заполню прямоугольник красным – MacaronLover

+0

Использование 'onDraw()' было бы очень просто. Другой вариант - использовать 9patch. XML слишком много для этого, но если вы хотите придерживаться его, удачи! – Lamorak

ответ

1

Использование макетов XML является излишеством решение для простого украшения, как это. Вместо этого продолжите TextView (или другие View, если хотите) и переопределите onDraw() метод.

Создать поле paint и инициализировать его в init() методе, который вы называете все конструкторы:

Paint paint; 

private void init() { 
    paint = new Paint(); 
    paint.setColor(Color.RED); 
    paint.setStrokeWidth(4); // convert to dp? 
    paint.setStyle(Paint.Style.STROKE); // delete line for filled rect 
} 

Метод onDraw() должен выглядеть следующим образом: (настроить!)

@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 

    int w = canvas.getWidth(); 
    int h = canvas.getHeight(); 

    int rectWidth = w/5; 
    int space = w/15; 
    int topRectHeight = getPaddingTop(); 
    int bottomRectHeight = getPaddingBottom(); 

    for (int i = 0; i < 4; i++) { 
     int left = i * (rectWidth + space); 
     int right = left + rectWidth; 

     Rect rect = new Rect(left, 0, right, topRectHeight); 
     canvas.drawRect(rect, paint); 

     Rect rect2 = new Rect(left, h - bottomRectHeight, right, h); 
     canvas.drawRect(rect2, paint); 
    } 
} 

Это рисовать прямоугольники в областях заполнения. Обратите внимание, что ширина должна быть указана либо match_parent, weight, либо фиксированное значение в dp.

Тогда просто поместить вид в XML

<your.package.RectangleTextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:paddingTop="10dp" 
    android:paddingBottom="10dp" 
    android:text="2" 
    android:gravity="center" /> 
+0

Вы можете добавить модификаторы для настройки чертежа, например 'setNumberOfRects (3)'. Они также могут быть определены как пользовательские атрибуты XML. – Lamorak

+0

Я привел ясный пример, как рисовать разделы 2 и 3. Модифицировать его для рисования секций 1 и 4 зависит от вас. Я здесь, чтобы советовать не писать для вас весь код. – Lamorak

+0

Можно ли рисовать разделы в одном представлении, а не отдельно? Цель состоит в том, чтобы сохранить количество просмотров как можно более низким. – MacaronLover

 Смежные вопросы

  • Нет связанных вопросов^_^