我正在制作一个android组件,允许用户从中选择日期。这对希望用户在应用程序中选择日期的开发人员很有帮助。在我的基本视图中,我有一个TextView,其中弹出的日期将被填充到其中,并且在TextView旁边有一个按钮。当用户点击按钮时,我的组件会弹出并显示日期。该组件在弹出窗口中弹出,并以月份视图的形式显示日期,用户也可以像在日历中一样从下一个前几个月、下一个后几年切换。检查图像。
http://s15.postimage.org/ujw8py60b/stackoverflow.jpg(对不起,我无法在这里上传图像,因为我是这里的新用户,所以不被允许)
每个日期都是一个TextView,宽度为35,高度为30,由我设置。DaysDisplayBar的大小也是由我设置的。所以这个组件的整个宽度为245,高度约为200。适用于手机屏幕大小。
我想使这个组件的大小依赖于各种屏幕显示大小。例如,如果在平板电脑或平板电脑上查看,它的大小应该比手机屏幕上的大小大。也就是说,对于各种显示器,其大小应该更改为某个值,如显示器大小的最大1/3或类似值。
解决这个问题的办法是什么?根据我的说法,这里需要一些数学,一些公式,方程等等。抛物线怎么样?请帮帮我,我在数学方面完全是个傻瓜。谢谢!:D
"每个日期都是一个TextView,宽度为35,高度为30,由我设置。DaysDisplayBar的大小也是由我设置的。所以这个组件的整个宽度为245,高度约为200。适用于手机屏幕大小。"
^^就是问题所在。尺寸应相对于布局进行定义,而不是绝对的。例如,日历有7列(每天一列)。不要把每一个都做成35px,而是把每一块都做成屏幕的1/7。
所以:
我假设一个DaysDisplayBar
是一行,包含7个TextViews
(每天一个)。如果这是真的,为什么不称之为Week
呢?不管怎样,诀窍就在layout_wieght
中。将所有元素设为fill_parent
,并且所有元素的权重均为1。这将均匀地分配父级中的所有元素。在您的情况下,父对象是DaysDisplayBar
。
所以:
设置DaysDisplayBar
属性`layout_width="fill_rent"
对于每个TextView
设置属性layout_width="fill_parent" AND
layout_weight="1"`
希望能有所帮助!
首先,确保使用密度像素(dip)而不是像素。其次,你可以得到屏幕的宽度和高度,然后计算你的组件大小。
您可以使用Display
类getSize()
方法获得屏幕尺寸:
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
Point screenSize = new Point();
display.getSize(screenSize);
int screenWith = screenSize.x;
或者您可以获得父视图尺寸:
MarginLayoutParams params = (MarginLayoutParams)parentView.getLayoutParams();
int padding = parentView.getPaddingLeft() + parentView.getPaddingRight();
int margin = params.leftMargin + params.rightMargin;
int measuredWidth = parentView.getMeasuredWidth() - padding - margin;
这样,您就可以知道组件的父视图元素中有多少空间。记住要将任何硬编码值转换为dip,您可以这样做:
public static int getDensitySize(float size) {
float density = getResources().getDisplayMetrics().density;
return (int)(density * size);
}
您可以通过onMeasure
方法来设置视图大小,稍后在onDraw
中使用此度量来绘制组件。