我需要创建一个自定义按钮并以编程方式添加它。
我已经找到了一些示例,我尝试了它们,但是当我将其添加到我的活动中时,我看不到任何东西。
这是我的代码:
活动:
Button btn = new Button(Einstellungen.this, null, R.attr.CustomButton);
在 attrs.xml:
<resources>
<attr name="CustomButton" format="reference"/>
在风格上.xml
<style name="AppTheme2" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="CustomButton">@style/someStyle</item>
</style>
<style name="someStyle">
<item name="android:layout_width">2px</item>
<item name="android:layout_height">fill_parent</item>
<item name="android:background">#000</item>
</style>
当我启动我的应用程序时,没有按钮。
如何解决这个问题?
您需要在声明按钮后执行此操作:
layout = (LinearLayout) findViewById(R.id.linear_layout_of_your_xml);
btn.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
layout.addView(buyButton);
如果您的xml具有不同的布局,您甚至可以初始化并分配它而不是LinearLayout。
您还应该定义按钮的布局参数(如果未在样式中定义(,并将按钮放入活动的布局中。假设您有一个 idactivity_layout
LinearLayout
,那么它可能是这样的:
LinearLayout layout = (LinearLayout) findViewById(R.id.activity_layout);
Button button = new Button(Einstellungen.this, null, R.attr.CustomButton);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
button.setLayoutParams(layoutParams);
layout.addView(button);
请注意,应使用match_parent
而不是定义样式中的fill_parent
。从文档中:
fill_parent
意味着视图希望与其父视图一样大,减去父视图的填充(如果有(。此值从 API 级别 8 及更高版本开始已弃用,并替换为match_parent
。