11 岁以下 api 的 setTop 替代方案
Posted
技术标签:
【中文标题】11 岁以下 api 的 setTop 替代方案【英文标题】:setTop alternative for api under 11 【发布时间】:2014-01-05 00:03:02 【问题描述】:我一直在寻找 android.widget.ImageView.setTop# 方法的替代方法,该方法适用于 11 岁以下的 api 或 Honeycomb。这样的替代方案是否可用?
【问题讨论】:
【参考方案1】:对于 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);
【讨论】:
我收到以下错误。你能帮忙吗?方法 setMargins(int, int, int, int) 对于 AbsListView.LayoutParams 类型未定义 您的图像视图在哪种布局中?像 lineearLayout 还是相对布局? 最后一件事要确认。代替 (int width, int height),我应该获取设备的屏幕尺寸吗? 不,这是您的图像视图的布局参数...我猜在 xml 中这是 WRAP_CONTENT 。所以就这样吧。查看我编辑的答案。 谢谢,这是我的小误解。再次感谢您。【参考方案2】:来自安卓文档:doc
设置此视图相对于其父视图的顶部位置。这个方法是由布局系统调用的,一般不应该调用,因为布局可能随时更改属性。
这个方法不能直接调用,主要是因为不同的ViewGroup有不同的布局方式,导致这个方法不一致(framelayout)。
正如@nitesh goel 建议的那样,使用边距或填充来设置子视图与其在视图组中的原始位置之间的间距。 doc
大小、内边距和边距 视图的大小用宽度和高度表示。一个视图实际上拥有两对 > 宽度和高度值。
第一对称为测量宽度和测量高度。这些尺寸定义了视图在其父视图中的大小(有关详细信息,请参阅布局。)可以通过调用 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。
【讨论】:
以上是关于11 岁以下 api 的 setTop 替代方案的主要内容,如果未能解决你的问题,请参考以下文章
将多个 3rd 方 GraphQL API 包装在单个 GraphQL 端点中
从 osx 中的任何应用程序获取选定文本的辅助功能 API 替代方案