我可以通过编写
来通过xml更改LinearLayout的背景机器人:背景= “@绘制/概述”
到我的LinearLayout。
但是我无法以编程方式执行此操作。我试过以下:
LinearLayout horizontal_menu = new LinearLayout(this); ... horizontal_menu.setBackgroundResource(getResources()getInteger(R.drawable.overview));
以及代码来源:
horizontal_menu.setBackground(getResources()getDrawable(R.drawable.overview));
首先尝试在运行时抛出RuntimeException,第二行似乎什么都不做 - >没有错误,没有例外,没有改变背景点击...
- > overview.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:drawable="@color/half_transparent"/>
<item android:state_pressed="true" android:drawable="@color/half_transparent" />
</selector>
我希望有人能帮助我!
谢谢!
修改
LinearLayout content = (LinearLayout)findViewById(R.id.LinearLayout);
LinearLayout horizontal_menu = new LinearLayout(this);
horizontal_menu.setOrientation(LinearLayout.HORIZONTAL);
horizontal_menu.setBackgroundResource(getResources().getInteger(R.drawable.overview));
content.addView(horizontal_menu);
答案 0 :(得分:8)
在布局XML文件中设置布局ID:
<LinearLayout android:id="@+id/myLinearLayout" ...
然后在你的Activity中,使用findViewById()获取LinearLayout,如下所示:
LinearLayout ll = (LinearLayout) findViewById(R.id.myLinearLayout);
然后使用setBackground方法为ll设置背景:
ll.setBackground(...)
ll.setBackgroundDrawable(...)
ll.setBackgroundResource(...)
答案 1 :(得分:0)
我遇到了同样的问题,基于我的搜索,在super.onCreate
之后无法动态更改活动或主ViewGroup样式。所以你应该有一个XML布局并在super.onCreate
之前设置该布局或者你应该夸大这样的布局:
root = (LinearLayout)findViewById(R.id.rootView);
getLayoutInflater().inflate(R.layout.one,root);
请注意,您应该有一个根视图来为您展示的布局提供父级。 当你想要改变那个布局时,只需这样做:
buttonclick{
root.removeAllViewsInLayout();
v = getLayoutInflater().inflate(R.layout.two,root);
root.addView(v,0);
}
请注意,您可以按viewGroup.addView
添加或删除每个小部件或视图,但在我看来,Inflater
是更好的选择。
编辑:
在这方面非常好的答案请参阅@broot回答here。