我正在制作一个Android组件,允许用户从中选择日期。对于希望用户在其应用中选择日期的开发人员来说,它会很有帮助。在我的基本视图中,我有TextView,其中弹出的日期将填充到其中,我在TextView旁边有一个按钮。当用户单击该按钮时,我的组件会弹出并显示日期。该组件在弹出窗口中弹出,并将日期显示为月视图,用户也可以从下一个月,下一个前几年切换,就像我们在日历中一样。检查图像。
http://s15.postimage.org/ujw8py60b/stackoverflow.jpg(抱歉,我无法在此处上传图片,因为我不允许这样做,因为我是新用户)
每个日期都是TextView,宽度为35,高度为30,由我设置。 DaysDisplayBar也是我设定的一些尺寸。所以这个组件的整个宽度是245,高度大约是200.这适用于移动屏幕尺寸。
我想让这个组件的大小取决于各种屏幕显示尺寸。对于例如如果在平板电脑或平板电脑上观看它,它的尺寸应该大于手机屏幕上的尺寸。也就是说,对于各种显示器,其大小应该更改为某个值,例如显示尺寸的最大1/3或类似的东西。
可以解决这个问题的方法是什么?据我所知,这里需要一些数学,一些公式,方程等等抛物线怎么样?请帮助,我完全愚蠢的数学。谢谢! :d
答案 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)
首先,请确保使用密度像素(倾角)而不是像素。 其次,您可以获得屏幕宽度和高度,并从那里计算您的组件大小。
您可以使用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
上使用此方法绘制组件。