Девять патчей в пользовательской группе - PullRequest
4 голосов
/ 01 июня 2011

Я сделал девять патчей и пользовательскую группу просмотра, а затем сделал фон этой группы просмотра девятью патчами.

Проблема в том, что девять патчей игнорирует область содержимого"settings.

Итак: Как правильно использовать девять патчей в пользовательском представлении?

ИЛИ:

Как мне получить область содержимого из девяти патчей так,Я могу использовать его в математике OnMeasure и OnLayout?

Ответы [ 3 ]

6 голосов
/ 01 июня 2011

Также используйте логическое getPadding (Rect padding) для NinePatchDrawable, чтобы получить заполнение для контента (ваш контент + 9patch padding = общее изменение размера группы)

0 голосов
/ 27 марта 2013

Получите отступы фона в вашем onMeasure, чтобы уменьшить доступную ширину (это для размещения ячеек в сетке):

    @Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    Drawable background = getBackground();
    Rect padding = new Rect();
    if (background != null && background.getPadding(padding));

    int width = MeasureSpec.getSize(widthMeasureSpec);
    int availableWidth = width - padding.left - padding.right;

А для onLayout применяется отступ:

    @Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
    int availableWidth = r - l - getPaddingLeft() - getPaddingRight();
0 голосов
/ 01 июня 2011

Вам может потребоваться нарисовать объект непосредственно в ViewGroup, переопределив его метод onDraw:

public void onDraw(Canvas canvas) {
 NinePatchDrawable bg =  (NinePatchDrawable) resources.getDrawable(id);
 if (bg != null) {
  bg.setBounds(0, 0, getWidth(), getHeight());
  bg.draw(canvas);
  }
 }
...