Android : 根据布局文件更改可绘制矩形和 ActionBar 的颜色

Android : Change color of drawable rectangle and ActionBar depending on layout file

我已经在一些听起来很基础的事情上停留了一段时间。我想使用两个布局文件根据设备的方向更改 ActionBar 和两个可绘制矩形的颜色。我也有两个活动。

现在,我已将其编码到控制器中(调用 OnResume 中的函数):

public void changeColor(int orientation) {
    String className = context.getClass().getSimpleName();

    if (orientation == Configuration.ORIENTATION_PORTRAIT) {
        if (className.equals("MainActivity")) {
            // Change actionbar, big square and small square colors
        }
        if (className.equals("WelcomeActivity")) {
            // Change actionbar color
        }
    } else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
        if (className.equals("MainActivity")) {
            // change actionbar, big square and small square colors
        } else if (className.equals("WelcomeActivity")) {
            // change actionbar color
        }
    }
}

这听起来像是可以使用纵向布局和横向布局使两者具有不同颜色来解决的问题。这可能吗?现在有了这个功能,听起来我是在重新发明轮子。

编辑:我的可绘制形状(矩形):

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/listview_background_shape">
    <padding android:left="2dp"
        android:top="2dp"
        android:right="2dp"
        android:bottom="2dp" />
    <corners android:radius="25dp" />
    <solid android:color="#17D9C5" />
</shape>

您可以根据设备的方向提供不同的资源。在您的情况下,添加一个用于纵向的颜色资源文件 res/values/colors.xml 以及一个专门用于横向的文件 res/values-land/colors.xml

然后,像这样

在两个文件中定义颜色
<resources>
    <color name="colorPrimary">#008577</color>
    <color name="colorRectangle1">#00574B</color>
    <color name="colorRectangle2">#D81B60</color>
</resources>

并根据需要使用不同的 rgb 值。

接下来,使用 Activity 主题中的颜色资源。您可以在 Manifest.xml 中为 Activity 设置主题并在 res/values/styles.xml 中声明它。 ActionBar 的颜色由

决定
<item name="colorPrimary">@color/colorPrimary</item>

最后一点,使用可绘制资源文件中的颜色资源:

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/listview_background_shape">
    <padding android:left="2dp"
        android:top="2dp"
        android:right="2dp"
        android:bottom="2dp" />
    <corners android:radius="25dp" />
    <solid android:color="@color/colorRectangle1" />
</shape>