Девять патчей для пользовательской группы просмотра

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

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

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

OR:

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


person speeder    schedule 01.06.2011    source источник


Ответы (3)


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

person Kamen    schedule 01.06.2011
comment
Совершенно верно, спасибо :) Жаль, что документация по Android отстой и не объясняет это должным образом. - person speeder; 01.06.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);
  }
 }
person rob    schedule 01.06.2011
comment
Выполнение этого не решает проблему вообще. - person speeder; 01.06.2011
comment
Вы хотите сказать, что пробовали, и это не сработало? Так и должно быть, если вы указали правильный идентификатор при вызове getDrawable(). - person rob; 01.06.2011

Получите заполнение фона в вашем 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();
person Sveinung Kval Bakken    schedule 26.03.2013