如何使我的Android组件的大小取决于各种显示屏尺寸?

时间:2012-03-01 21:18:51

标签: android android-widget size screen

我正在制作一个Android组件,允许用户从中选择日期。对于希望用户在其应用中选择日期的开发人员来说,它会很有帮助。在我的基本视图中,我有TextView,其中弹出的日期将填充到其中,我在TextView旁边有一个按钮。当用户单击该按钮时,我的组件会弹出并显示日期。该组件在弹出窗口中弹出,并将日期显示为月视图,用户也可以从下一个月,下一个前几年切换,就像我们在日历中一样。检查图像。

http://s15.postimage.org/ujw8py60b/stackoverflow.jpg(抱歉,我无法在此处上传图片,因为我不允许这样做,因为我是新用户)

每个日期都是TextView,宽度为35,高度为30,由我设置。 DaysDisplayBar也是我设定的一些尺寸。所以这个组件的整个宽度是245,高度大约是200.这适用于移动屏幕尺寸。

我想让这个组件的大小取决于各种屏幕显示尺寸。对于例如如果在平板电脑或平板电脑上观看它,它的尺寸应该大于手机屏幕上的尺寸。也就是说,对于各种显示器,其大小应该更改为某个值,例如显示尺寸的最大1/3或类似的东西。

可以解决这个问题的方法是什么?据我所知,这里需要一些数学,一些公式,方程等等抛物线怎么样?请帮助,我完全愚蠢的数学。谢谢! :d

2 个答案:

答案 0 :(得分:0)

“每个日期都是一个TextView,宽度为35,高度为30,由我设置.DaysDisplayBar也是我设置的一些尺寸。所以这个组件的整体宽度是245,高度是200左右。这适用于手机屏幕大小“。

^^是问题所在。尺寸应相对于布局定义,而不是绝对。例如,日历有7列(每天一列)。而不是使每个35px,使每个1/7的屏幕。

SO:

我假设DaysDisplayBar是一行包含7 TextViews(每天一个)。如果这是真的,为什么不称它为Week?无论哪种方式,诀窍都在layout_wieght。使所有元素fill_parent和所有元素具有相同的权重1.这将均匀地分配父元素中的所有元素。在您的情况下,父级是DaysDisplayBar

SO:

设置DaysDisplayBar属性`layout_width =“fill_parent”

对于每个TextView集合属性layout_width="fill_parent" AND layout_weight =“1”`

希望有所帮助!

答案 1 :(得分:0)

首先,请确保使用密度像素(倾角)而不是像素。 其次,您可以获得屏幕宽度和高度,并从那里计算您的组件大小。

您可以使用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上使用此方法绘制组件。