在动态创建的窗口小部件的构造函数中设置样式不起作用

时间:2012-12-09 09:28:47

标签: android android-widget android-button android-resources

我正在尝试动态创建ImageButton并为其应用样式。

这是我的风格:

<style name="ActionBarActionButton">
    <item name="android:layout_width">30dp</item>
    <item name="android:layout_height">fill_parent</item>
    <item name="android:background">@drawable/action_button</item>
</style>

这是按钮创建:

ImageButton actionButton = new ImageButton(context, null, R.style.ActionBarActionButton);

似乎根本没有效果,没有应用样式参数。

2 个答案:

答案 0 :(得分:2)

我发现这种方式不起作用,但没有人能说出原因(你好谷歌?)

我不得不使用这样的工作:

我为按钮创建了一个新的布局文件:

<?xml version="1.0" encoding="utf-8"?>
<ImageButton xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="40dp"
    android:layout_height="fill_parent"
    android:background="@drawable/action_button" >
</ImageButton>

然后将其膨胀为这样的布局:

    LayoutInflater inflater =  (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    ImageButton actionButton = (ImageButton) inflater.inflate(R.layout.imagebutton_action, getActionsLayout(), false);
    actionButton.setImageResource(action.getIconResource());        
    getActionsLayout().addView(actionButton);

答案 1 :(得分:-2)

样式通常用在XML文件中(在用于样式化UI元素的布局中,在清单中为活动添加样式或主题),我认为您可以在代码中添加样式但是必须正确声明它。

要声明样式,XML文件的根节点必须为<resources>,您的样式将如下所示:

<resources>    
    <style name="ActionBarActionButton">
        <item name="android:layout_width">30dp</item>
        <item name="android:layout_height">fill_parent</item>
        <item name="android:background">@drawable/action_button</item>
    </style>
</resources>

我不知道它是否是您的问题的根源。

有关样式的更多信息,我建议您阅读Andrdoid指南:http://developer.android.com/guide/topics/ui/themes.html