Android - 以编程方式添加视图会忽略一些样式属性。

5
当用户点击另一个按钮时,我通过编程将一个按钮添加到现有的Android视图中。从功能上讲它是有效的,但某些样式信息似乎被忽略了。我通过使用一个单独包含按钮的布局,并填充预先设置好的样式值来添加按钮。 <Button xmlns:android="http://schemas.android.com/apk/res/android" style="@style/FileStorageDeleteButton"></Button> 然后,通过使用getLayoutInflater,我可以将此按钮添加到布局中。 buttonDelete = (Button) getLayoutInflater().inflate(R.layout.pete_button_filedelete, null); LinearLayout layout = (LinearLayout)findViewById(R.id.layoutFileStorage); layout.addView(buttonDelete, 1); 我在values目录下有一个XML文件,用于为@style / FileStorageDeleteButton设置颜色、文本等,其中大部分在添加按钮时都被使用。但由于某种原因,四个margin属性和layout_below被忽略了。
当这个按钮出现时,LogCat中没有错误,似乎样式根本没有被应用。如果我在该布局的XML中手动包含按钮,则所有样式都能成功地使用。
非常感谢任何帮助。
1个回答

3
当您调用addView()时,需要传递布局参数,因为布局参数与单个视图无关,始终在周围的视图上下文中使用。有一些变体的addView()方法可以接受一个LayoutParams参数。 编辑 添加更多细节 您应该创建一组LinearLayout.LayoutParams并在其中设置边距,然后将其传递给addView()
对于LinearLayoutlayout_below是被忽略的(该属性仅适用于RelativeLayout)。当您调用addView(buttonDelete, 1)时,您告诉它在线性布局中放置视图的位置。

谢谢David - 你的帖子让我找到了正确的方向,发现我可以传递更多的变量到inflate中。现在使用buttonDelete = (Button) getLayoutInflater().inflate(R.layout.pete_button_filedelete, layout, false);,虽然layout_below仍然被忽略。我可以绕过这个问题,但是想知道为什么那个还不起作用?再次感谢!如果我有声望来点赞你,我会的 :) - Pete G
layout_below 仅适用于 RelativeLayout。你的 LinearLayout 忽略此属性。在 LinearLayout 中,您可以通过视图在布局中的位置来控制其上方/下方。 - David Wasser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接