2

我可以通过 xml 通过编写更改 LinearLayout 的背景

android:background="@drawable/overview"

到我的线性布局。

但是我不能以编程方式做到这一点。我试过以下:

线性布局水平菜单 = 新线性布局(这个);... Horizo​​ntal_menu.setBackgroundResource(getResources().getInteger(R.drawable.overview));

还有那个代码源:

Horizo​​ntal_menu.setBackground(getResources().getDrawable(R.drawable.overview));

第一次尝试在运行时抛出一个 RuntimeException,第二行似乎什么都不做 -> 没有错误,没有异常,点击时没有改变背景......

--> 概览.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);
4

2 回答 2

9

在布局 XML 文件中为布局设置 id:

<LinearLayout android:id="@+id/myLinearLayout" ...

然后在您的活动中,使用 findViewById() 获取 LinearLayout,如下所示:

LinearLayout ll = (LinearLayout) findViewById(R.id.myLinearLayout);

然后使用 setBackground 方法为 ll 设置背景:

ll.setBackground(...) 
ll.setBackgroundDrawable(...)
ll.setBackgroundResource(...)
于 2013-04-13T15:26:11.687 回答
0

我遇到了同样的问题,根据我的搜索,没有办法在之后动态更改活动或主 ViewGroup 样式。所以super.onCreate您应该有一个 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 answer here

于 2016-11-26T09:41:45.737 回答