Android: изменение цвета нарисованного прямоугольника и панели действий в зависимости от файла макета - PullRequest
1 голос
/ 16 апреля 2020

Я на некоторое время застрял на чем-то, что звучит c. Я хочу изменить цвет 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>

1 Ответ

1 голос
/ 16 апреля 2020

Вы можете предоставить различные ресурсы в зависимости от ориентации устройства. В вашем случае добавьте файл цветного ресурса 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 теме. Вы можете установить тему для Activity в Manifest.xml и объявить ее в 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>
...