我使用RelativeLayout将视图定位在屏幕上的精确位置。当使用一个说明绘制矩形的视图时,这可以正常工作。但是当使用像EditText这样的Android视图时,它们的绘制时间比约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似乎比尝试高度的百分比更好)。
接下来的任务是进入源头但是想知道是否有人已经解决了这个问题。
感谢。
答案 0 :(得分:0)
这只是因为使用了实际的EditText背景图像。按钮也是一样的,出于某种原因谷歌决定用一些额外的透明填充像素绘制9补丁背景图像。真的,唯一的解决方案,如果是一个问题,将是绘制自己的9补丁,或修改现有的Android 9补丁,以删除额外的像素。