Где AppCompat устанавливает панель действий / панель инструментов? - PullRequest
0 голосов
/ 02 января 2019

Шаблон, который генерирует Android Studio, создает стиль, расширяющий Theme.AppCompat.Light.DarkActionBar.Каким-то образом это добавляет панель действий / панель инструментов вверху всех моих действий.

Как это происходит?Где определяется бар?Это нигде в макетах.

Ответы [ 3 ]

0 голосов
/ 02 января 2019

Студия Android раздувает пользовательские Представления или ViewGroups, которые они уже определили, большинство из которых вы не можете видеть, потому что они являются закрытыми классами.

Вот пример того, как вы сделаете это в коде.

class Test extends android.support.v7.widget.AppCompatTextView {


    public Test(Context context) {
        super(context);
        initTestView(null);
    }

    public Test(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        initTestView(attrs);
    }

    public Test(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initTestView(attrs);
    }

    public void initTestView(AttributeSet as) {
        if (as != null) {
            TypedArray ta = getContext().obtainStyledAttributes(as, R.styleable.Test);

            String textOverride = ta.getString(R.styleable.Test_override);
            ta.recycle();

            setText("Test: " + textOverride);
        }
    }

}

Тогда вы определите стиль в app/src/main/res/values/attr.xml

<declare-styleable name="Test">
    <attr name="override" format="string" />
</declare-styleable>

Теперь, когда Android надувает это, он может видеть ваш пользовательский класс, а также атрибуты для его создания. Если бы вы добавили это в макет, он автоматически генерировал бы пример моего кода. Это то же самое, что и у базовых стилей Views / ViewGroups для Android, и они часто будут иметь значения по умолчанию или видимые представления этого класса, поскольку они надуваются и прикрепляются к своим родительским представлениям.

Чтобы было совершенно ясно, когда вы добавляете Android View в свой макет, скажем, для простоты.

<TextView
  android:id="@+id/hello"
  android:text="@string/greeting"/>

Класс для TextView делает то же самое, что и мой метод initTestView, захватывая его типизированные свойства (text, id) и заполняя внутренние представления или значения. По сути, Android склеивает значения xml с их представлениями классов.

0 голосов
/ 02 января 2019

С помощью Крис Салливан мы выяснили, что происходит. Это приблизительное предположение.

Оказывается, что использование стиля / темы Theme.AppCompat.Light.DarkActionBar просто добавляет верхний край шрифта ко всем действиям и заполняет их основным цветом. В редакторе Android это выглядит так, как будто есть панель приложения / панель инструментов / панель действий, но это просто дым и зеркала.

Фактическая панель приложения добавляется во время выполнения AppCompatActivity.

0 голосов
/ 02 января 2019

Это определено в стилях xml. Ваше приложение тема начинается с него. Если вы хотите, чтобы он исчез, вы можете расширить другой стиль, например, Theme.AppCompat.Light.NoActionBar

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...