以编程方式设置按钮样式

Posted

技术标签:

【中文标题】以编程方式设置按钮样式【英文标题】:Set button style programmatically 【发布时间】:2014-09-20 22:04:24 【问题描述】:

所以我以编程方式创建新按钮并将它们添加到 LinearLayout,但是我想用预定义的样式初始化这些按钮。我花了一些时间寻找解决方案并尝试了答案,但我似乎仍然无法让它发挥作用。

当我在布局中添加一个新按钮时,它应该看起来像 this picture 中的按钮(靠近顶部)。

我尝试在 res/values/ 中创建一个 xml 文件并使用new Button(context, null, R.style.ChoiceButton) 初始化一个按钮,但它不起作用导致this happening。

我还尝试了为按钮创建新布局 xml 并使用 (Button)getLayoutInflater().inflate(R.layout.choice_buttton_layout, null) 的解决方法,但这也不起作用,resulting in this (two buttons to show lack of margin)。

res/values/choice_button.xml

<resources>
    <style name="ChoiceButton">
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:layout_gravity">center_horizontal</item>
        <item name="android:layout_marginBottom">7dp</item>
        <item name="android:minWidth">250dp</item>
        <item name="android:background">#ff27ae60</item>
        <item name="android:textColor">#ffffffff</item>
        <item name="android:enabled">true</item>
    </style>
</resources>

来自 Main.java 的片段

public void btnAdd_click(View view) 
        Button newBtn = new Button(getApplicationContext(), null, R.style.ChoiceButton);
        newBtn.setText("new button");
        newBtn.setId(Util.generateViewId());

        LinearLayout layout = (LinearLayout)findViewById(R.id.layoutTop);
        layout.addView(newBtn);
    

activity_main.xml

A bit long to paste in here.

我只是缺少什么吗?这甚至可能吗?

【问题讨论】:

【参考方案1】:

好的@kin3tik,我找到了一个用一些自定义按钮制作的旧应用程序。看看它是什么样子的:

一个按钮有我的xml:

<Button
                android:id="@+id/num1"
                android:layout_
                android:layout_
                android:layout_marginRight="5dp"
                android:layout_weight="1"
                android:text="@string/num1"
                android:textSize="20sp" />

我在我的可绘制文件夹 custombutton.xml 中创建了文件 .xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android">

<solid android:color="@color/bleuperso"/> // you can put #XXXXXX for the color you want 
<corners android:radius="4dp"/>

我只是把样式放在 java 中:

Bfrancois.setBackgroundResource(R.drawable.custombutton);

有了这个你应该能够找到自己;)

【讨论】:

以上是关于以编程方式设置按钮样式的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式确定 Qt 样式表选项?

以编程方式插入的按钮样式无法正常工作

为啥我以编程方式创建的按钮的样式不同?

如何以编程方式在视图中设置样式属性

如何以编程方式在 Android 按钮上设置 drawableLeft?

UIButton 以编程方式获取默认突出显示样式