我知道Style的工作原理正是我之前使用的Style,尽管是XML。我正在做的一个简单的例子(不工作)..
LinearLayout buttonlayout = (LinearLayout) dialogLayout.findViewById(R.id.layout_menu_buttons);
Button bSettings = new Button(getActivity(), null, R.style.button_menu);
buttonlayout.addView(bSettings);
我在XML中完美地工作,我能够创建没有样式的按钮没有问题(这很有效,但没有让我动态应用样式)..
Button bSettings = new Button(getActivity());
bSettings.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
完整代码:
// Getting reference to the Menu layout
LinearLayout buttonlayout = (LinearLayout) dialogLayout.findViewById(R.id.layout_menu_buttons);
buttonlayout.removeAllViewsInLayout();
// Dynamically create buttons
Button bSettings = new Button(getActivity(), null, R.style.button_menu);
Button bHelp = new Button(getActivity(), null, R.style.button_menu);
Button bHistory = new Button(getActivity(), null, R.style.button_menu);
Button bAbout = new Button(getActivity(), null, R.style.button_menu);
// Adding to Layout
buttonlayout.addView(bSettings);
buttonlayout.addView(bHelp);
buttonlayout.addView(bHistory);
buttonlayout.addView(bAbout);
button_menu style ..
<style name="button_menu" parent="@style/Fill.Width">
<item name="android:background">@drawable/selector_example1_button_background</item>
<item name="android:layout_margin">10dp</item>
<item name="android:padding">30dp</item>
</style>
注意:我已经使用DDMS转储视图进行了检查,发现所有按钮都在那里,它们都有正确的文本等。我只是看不到它们,它们似乎实际上并没有使用任何样式中包含的属性。
我也尝试在设置没有区别的样式后再次设置LayoutParams。
有点困惑......
有什么想法吗?
答案 0 :(得分:0)
问题是你是通过创建一个新的布局params对象并覆盖视图上现有的布局参数来打破布局参数。
LinearLayout buttonLayout;
Button testV = new Button(this, null, R.style.button_menu);
Button testV2 = new Button(this, null, R.style.button_menu);
buttonLayout.addView(testV);
buttonLayout.addView(testV2);
LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) testV.getLayoutParams();
//we cast to linearLayout params because we're putting this view in a linearLayout
layoutParams.height = LinearLayout.LayoutParams.WRAP_CONTENT;
layoutParams.width = LinearLayout.LayoutParams.WRAP_CONTENT;
testV2.setLayoutParams(layoutParams);
在这个例子中,我们正在创建一个带有样式的新Button,然后从它获取params并改变我们想要的东西(由于对象如何工作,我们不必将它设置回来自哪里),现在是第二个按钮(testV2),因为它基于与testV相同的样式(因此也就是layoutParams),我们可以将testV2的布局参数设置为与testV相同。
答案 1 :(得分:0)
结束创建一个按钮模板,每个模板都有当前主题选择的任何样式,然后膨胀该XML布局..
Button b = (Button) getLayoutInflater().inflate(R.layout.styled_button, null);
然后通过更改主题,您可以更改按钮的样式。请参阅此问题以获得一个好例子Dynamically change theme and therefore widget style