Я пытался закодировать пользовательский синий квадратный Компонент так, чтобы
- ширина или высота были родительским размером всякий раз, когда мы говорим заполнить родителя, в родительском макете (скажем, res / layout /main.xml)
- ширина или высота 30 пикселей (или лучше 30 dpi?) всякий раз, когда мы говорим обернуть содержимое в родительский макет.
На данный момент, благодаря Раджешу.edi, мне удалось нарисовать синий квадрат: но размер 30px * 30px в обоих случаях (заполнить родительский элемент или содержимое переноса).Так есть ли способ определения режима «обтекание контентом» и режима «заполнение родителя», чтобы я мог адаптировать размер?
Вот моя попытка для компонента (я назвал его BoardView, потому что этосиний квадрат - это предварительный шаг перед созданием компонента шахматной доски):
package com.gmail.bernabe.laurent.android.simple_chess_board.views;
import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.view.View;
public class BoardView extends View {
public BoardView(Context context) {
super(context);
setBackgroundColor(Color.BLUE);
}
public BoardView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public BoardView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec);
int heightSpecMode = MeasureSpec.getMode(heightMeasureSpec);
int newWidth, newHeight;
if (widthSpecMode == MeasureSpec.EXACTLY)
newWidth = 30;
else
newWidth = MeasureSpec.getSize(widthMeasureSpec);
if (heightSpecMode == MeasureSpec.EXACTLY)
newHeight = 30;
else
newHeight = MeasureSpec.getSize(heightMeasureSpec);
setMeasuredDimension(newWidth, newHeight);
}
@Override
protected void onDraw(Canvas canvas) {
Rect rect = new Rect(0, 0, getWidth(), getHeight());
Paint paint = new Paint();
paint.setColor(Color.BLUE);
canvas.drawRect(rect, paint);
}
}
и вот мой main.xml
<com.gmail.bernabe.laurent.android.simple_chess_board.views.BoardView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/boardView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
Я был уверен, что ошибка не возниклатот факт, что я не переопределил View.onDraw (): но я был не прав.Зачем ?Почему недостаточно установить цвет фона на синий?
Заранее спасибо, если кто-то может мне помочь.