Представления Android не такие высокие, как указано - PullRequest
0 голосов
/ 17 февраля 2011

Я использую RelativeLayout для позиционирования видов в точных точках на экране.Это работает, как и ожидалось, при использовании представления, которое говорит, рисует прямоугольник.Но при использовании представлений Android, таких как EditText, они нарисованы короче, чем указано, примерно на 8 единиц.Если щелкнуть за пределами нарисованного EditText (но в пределах параметров, указанных в RelativeLayout), фактически попадет в EditText.

Вот некоторый код для иллюстрации того, что я имею в виду:

package com.DrawDemo;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.RelativeLayout;

public class DrawDemo extends Activity 
{
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);

        RelativeLayout l = new RelativeLayout(this);

        RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(100,100);
        lp.leftMargin = 50;
        lp.topMargin = 50;

        DemoView demoview = new DemoView(this);
        l.addView(demoview, lp);

        EditText editText = new EditText(this);
        l.addView(editText, lp);

        setContentView(l);
    }

    private class DemoView extends View
    {
        public DemoView(Context context)
        {
            super(context);
        }

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

            Paint paint = new Paint();
            paint.setStyle(Paint.Style.FILL);

            paint.setColor(Color.GREEN);
            canvas.drawPaint(paint);
        }
    }
}

Если вы выполните это, вы заметите, что EditText заметно короче прямоугольника.Я пробовал работать с onMeasure, setMinimumXXX и всем остальным, о чем я могу подумать.Пока что единственное, что работает с некоторым уровнем успеха, - это просто добавить примерно 8 пикселей к высоте (8, кажется, работает лучше, чем пробовать процент от высоты).

Следующая задача будет состоять в том, чтобышаг в источник, но было интересно, если кто-то уже решил это.

Спасибо.

1 Ответ

0 голосов
/ 18 февраля 2011

Это просто из-за фактического фонового изображения EditText, которое используется.Кнопки работают одинаково, по какой-то причине Google решил нарисовать фоновые изображения из 9-ти патчей с некоторыми дополнительными прозрачными отступами.Действительно, единственным решением, если это проблема, было бы нарисовать свой собственный 9-патч или изменить существующий Android-9-патч, чтобы удалить лишние пиксели.

...