如何使我的android组件大小依赖于各种显示屏大小



我正在制作一个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)而不是像素。其次,你可以得到屏幕的宽度和高度,然后计算你的组件大小。

您可以使用DisplaygetSize()方法获得屏幕尺寸:

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中使用此度量来绘制组件。

最新更新