单击以编程方式更改布局 - 背景

时间:2013-04-13 15:18:00

标签: android xml response

我可以通过编写

来通过xml更改LinearLayout的背景
  

机器人:背景= “@绘制/概述”

到我的LinearLayout。

但是我无法以编程方式执行此操作。我试过以下:

  

LinearLayout horizo​​ntal_menu = new LinearLayout(this);   ...      horizo​​ntal_menu.setBackgroundResource(getResources()getInteger(R.drawable.overview));

以及代码来源:

  

horizo​​ntal_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.overv‌​iew)); 
content.addView(horizontal_menu);

2 个答案:

答案 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