Android兼容性问题 -- FrameLayout中View设置margin无效
来源:互联网 发布:中山国知乎 编辑:程序博客网 时间:2024/05/04 03:01
FrameLayout 中设置margin无效问题
众所周知,Android在对界面进行布局时,可以通过设置View的上下左右四个方向的margin值来调整该View和其他View之间的距离。
在布局文件中设置margin值的方法如下。
<FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <ImageView android:id="@+id/imageView1" android:layout_width="10dp" android:layout_height="10dp" android:layout_marginTop="10dp" android:layout_marginLeft="10dp" android:src="@android:color/black" /></FrameLayout>
margin值的设置除了可以在xml中直接配置外,还可以在代码中通过LayoutParams来设置。示例代码如下。
ImageView v = (ImageView)findViewById(R.id.imageView1); ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams)v.getLayoutParams(); params.leftMargin = 20; params.topMargin = 20;
上述代码非常简单,获取到Imageview的LayoutParams后,将其leftMargin和topMargin设置为20像素。
上述代码正常显示的效果应该是这样的。
但实际测试发现在某些情况下显示的效果是这样的。也就是设置的margin值没有任何效果。
问题原因及解决方法
此问题原因是Android4.0及以下版本中,FrameLayout实现上的一个bug。
如果系统是Android4.0或以下版本,View所在的布局是FrameLayout,如果在布局文件和代码中都没有设置Gravity,则设置的margin值会被忽略。
解决起来也很简单,就是在布局文件或代码中增加对Gravity的设置,Gravity可以设置为Gravity.TOP,Gravity.LEFT,甚至可以是Gravity.NO_GRAVITY。代码中设置的示例如下。
ImageView v = (ImageView)findViewById(R.id.imageView1); ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams)v.getLayoutParams(); params.leftMargin = 20; params.topMargin = 20; params.gravity = Gravity.NO_GRAVITY;
此外,似乎只在FrameLayout中有这个bug,如果是LinearLayout或RelativeLayout,不设置Gravity,margin也会生效。
参考:
1. http://stackoverflow.com/questions/5401952/framelayout-margin-not-working
0 0
- Android兼容性问题 -- FrameLayout中View设置margin无效
- FrameLayout设置margin无效
- FrameLayout中Margin设置无效,解决办法
- Android,View设置margin
- Android,View设置margin
- RelativeLayout中子view设置Margin无效
- Android设置View的margin
- Android中如何设置margin
- 关于Android设置控件margin无效的解决办法
- Android 2.3系统上对FrameLayout设置margin导致显示错乱
- android 2.2 /2.3 FrameLayout margin 不起作用
- Android4.0以下系统FrameLayout布局的子View设置的Margin常常出现失败的情况
- android 如何动态设置View的margin和padding
- android 如何动态设置View的margin和padding
- Android在java代码中设置margin
- Android在java代码中设置margin
- Android在java代码中设置margin
- Android通过java代码中设置margin
- HTTP协议-telnet,httpwatch
- [lintcode]两个字符串是变位词
- 003 - Longest Substring Without Repeating Characters
- ReactiveCocoa入门教程——第二部分
- 一些基础API文档中文翻译
- Android兼容性问题 -- FrameLayout中View设置margin无效
- unity不同平台下的路径及读写权限
- LeetCode Basic Calculator II 计算器&栈
- 自定义异常计算面积的小程序
- shell批处理中利用vi设置文件的fileformat
- ReactiveCocoa框架菜鸟入门(五)——信号的FlattenMap与Map
- Python 安装 模块/Package
- html5第一章
- 天声人語 20151110 7人制ラグビーの快挙