0

我只想第一次动态更改布局的背景颜色,使用 android 中的配置文件,该文件应该在 assets 文件夹中,它可以是 xml 文件或任何东西。请帮我。

4

2 回答 2

0

如果您为布局设置 ID,如下所示:

<LinearLayout android:id="@+id/myLayout">
<LinearLayout/>

然后你可以像这样在 onCreate 中设置你的背景:

myLayout= findViewById(R.id.myLayout);
myLayout.setBackgroundColor(Color.BLUE);
于 2013-05-14T05:08:07.970 回答
0

1.使用颜色作为int值。在资产文件 config.txt 中,您可以像这样为 int 值输入颜色。例如这个值是 Color.RED

4294901760

2.在您的应用程序中使用此代码

        String config = "config.txt";
    InputStream is = null;
    try {
        is = getAssets().open(config);
        DataInputStream dis = new DataInputStream(is);
        String color = dis.readUTF();
        ColorDrawable drawable = new ColorDrawable(Integer.parseInt(color));
        //use drawable
        //for example
        new TextView(this).setBackgroundColor(Integer.parseInt(color));
        new TextView(this).setBackgroundDrawable(drawable);
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if(is != null)
        {
            try {
                is.close();
            } catch (IOException e) {
            }
        }
    }

3.可以使用反射,但是在配置文件中,从values/colors.xml中写入颜色名称。

        String config = "config.txt";
    InputStream is = null;
    try {
        is = getAssets().open(config);
        DataInputStream dis = new DataInputStream(is);
        String color = dis.readUTF();

        try {
            Field field = R.color.class.getDeclaredField(color);
            field.setAccessible(true);
            Integer id = (Integer) field.get(null);

            ColorDrawable drawable = new ColorDrawable(getResources().getColor(id));
            // use drawable
            // for example
            new TextView(this).setBackgroundColor(getResources().getColor(id));
            new TextView(this).setBackgroundDrawable(drawable);
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (is != null) {
            try {
                is.close();
            } catch (IOException e) {
            }
        }
    }
}
于 2013-05-14T07:04:43.317 回答