我一直在寻找 android.widget.ImageView.setTop# 方法的替代方法,该方法适用于 11 岁以下的 api 或 Honeycomb。这样的替代方案甚至可用吗?
2 回答
对于 Honeycomb(API 级别 11)以下的任何内容,您都必须使用 setLayoutParams(...)。您可以在 Android 中动态设置视图的位置。例如,如果您的xml文件的LinearLayout中有一个ImageView。那么您可以通过LayoutParams设置它的位置。但是请确保根据您的xml文件中采用的布局来获取LayoutParams。根据所采用的布局有不同的LayoutParams。
这是要设置的代码:
FrameLayout.LayoutParams layoutParams=new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(int left, int top, int right, int bottom);
imageView.setLayoutParams(layoutParams);
来自 android 文档:doc
设置此视图相对于其父视图的顶部位置。此方法旨在由布局系统调用,通常不应以其他方式调用,因为布局可能随时更改属性。
不应该直接调用这个方法,主要是因为不同的 ViewGroup 有不同的布局方式,导致这个方法不一致(framelayout)。
正如@nitesh goel 建议的那样,使用边距或填充来设置子视图与其在视图组中的原始位置之间的间距。文档
大小、内边距和边距 视图的大小用宽度和高度表示。一个视图实际上拥有两对宽度和高度值。
第一对称为测量宽度和测量高度。这些尺寸定义了视图在其父视图中的大小(有关详细信息,请参阅布局。)可以通过调用 getMeasuredWidth() 和 getMeasuredHeight() 获得测量尺寸。
第二对简单地称为宽度和高度,或者有时称为绘图宽度和绘图高度。这些尺寸定义了屏幕上、绘图时和布局后视图的实际大小。这些值可能(但不一定)与测量的宽度和高度不同。可以通过调用 getWidth() 和 getHeight() 获得宽度和高度。
为了测量其尺寸,视图会考虑其填充。对于视图的左侧、顶部、右侧和底部,填充以像素表示。填充可用于将视图的内容偏移特定数量的像素。例如,left padding 为 2 会将视图的内容推到左边缘右侧 2 个像素。可以使用 setPadding(int, int, int, int) 或 setPaddingRelative(int, int, int, int) 方法设置填充,并通过调用 getPaddingLeft()、getPaddingTop()、getPaddingRight()、getPaddingBottom()、getPaddingStart( )、getPaddingEnd()。
尽管视图可以定义填充,但它不提供对边距的任何支持。但是,视图组提供了这样的支持。有关详细信息,请参阅 ViewGroup 和 ViewGroup.MarginLayoutParams。