如何创建自定义按钮并以编程方式添加?

时间:2017-08-06 20:29:35

标签: android xml styles

我需要创建一个自定义按钮并以编程方式添加它 我已经找到了一些我尝试过的例子,但是当我将它添加到我的Activity中时,我看不到任何东西。

这是我的代码:

活动:

        Button btn = new Button(Einstellungen.this, null, R.attr.CustomButton);

在attrs.xml中:

<resources>
<attr name="CustomButton" format="reference"/>

在styles.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>

当我启动我的应用程序时,没有按钮 我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

您还应该定义按钮的布局参数(如果未在样式中定义),并将按钮放入活动的布局中。假设您LinearLayout的ID为activity_layout,那么它可能是这样的:

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。来自docs

  

fill_parent表示视图希望与其父级一样大,减去父级的填充(如果有的话)。此值已从API级别8及之后弃用,并替换为match_parent

答案 1 :(得分:0)

您需要在声明按钮后执行此操作:

 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