Nano Hash - криптовалюты, майнинг, программирование

Сделать фон Activity FrameLayout видимым под макетом фрагмента

Я хотел бы установить фоновое изображение в моем макете setContentView(), и чтобы это же изображение постоянно отображалось под моими представлениями фрагментов. Я попытался установить фоновое изображение в своем корневом макете и сделать фон прозрачным для дочерних макетов, но это не работает должным образом.

Пс. Извините за дамп кода/макета, я бы предпочел разместить все здесь, а не опускать то, что может вызвать проблему.

Picasso Init в действии onCreate:

        Picasso.Builder b = new Picasso.Builder(getApplicationContext());
        if (BuildConfig.DEBUG) {
            b.loggingEnabled(true);
            b.indicatorsEnabled(true);
        }
        b.memoryCache(new LruCache(getApplicationContext()));
        Picasso.setSingletonInstance(b.build());

Код привязки данных:

private static Target t;
@BindingAdapter("android:backgroundUrl")
    public static void setBackgroundUrl(final ViewGroup view,final String url) {
        if(Strings.isNullOrEmpty(url)){
            return;
        }
        t = new Target() {
            @Override
            public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
                view.setBackground(new BitmapDrawable(view.getResources(),bitmap));
                Log.e("Picasso","onBitmapLoaded: " + from.name());
            }

            @Override
            public void onBitmapFailed(Drawable errorDrawable) {
                Log.e("BindingTools.setBackUrl","Failed to load: " + url);
            }

            @Override
            public void onPrepareLoad(Drawable placeHolderDrawable) {
                //do nothing
            }
        };
        Picasso.with(view.getContext()).load(url).into(t);
    }

Макет деятельности:

<?xml version="1.0" encoding="utf-8"?>
<layout
    xmlns:android="http://schemas.android.com/apk/res/android">
    <data class=".RootBinding">
        <variable name="backgroundUrl" type="String"/>
    </data>
    <FrameLayout
        android:backgroundUrl="@{backgroundUrl}"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType = "centerCrop">
    <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:background="@color/Transparent">
    </FrameLayout>

    </FrameLayout>
</layout>

Пример компоновки фрагмента:

<layout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".Fragments.AccountFragment">
    <data class=".AccountBinding">
        <import type="android.view.View" />
        <variable name="user" type="packageName.ViewModels.AccountViewModel"/>
        <variable name="loginBtnEvent" type="View.OnClickListener"/>
        <variable name="usernameError" type="String"/>
        <variable name="passwordError" type="String"/>
        <variable name="backgroundUrl" type="String"/>
    </data>
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:background="@color/Transparent">
        <android.support.v7.widget.CardView
            android:layout_marginTop="16dp"
            android:layout_marginBottom="4dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginEnd="16dp"
            android:layout_marginRight="16dp"
            android:layout_marginStart="16dp"
            android:layout_marginLeft="16dp">
            <android.support.v7.widget.LinearLayoutCompat
                android:orientation="vertical"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
                <android.support.design.widget.AppBarLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginBottom="16dp"
                    app:elevation="0dp">
                    <android.support.v7.widget.LinearLayoutCompat
                        android:orientation="horizontal"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content">
                        <android.support.v7.widget.Toolbar
                            android:layout_margin="16dp"
                            android:layout_height="wrap_content"
                            android:layout_width="match_parent"
                            app:title="@string/app_name"
                            app:subtitle="@{!user.IsReAuth ? @string/login : @string/login_message_return, default=@string/login}"
                            app:subtitleTextColor="@color/cardview_light_background"
                            app:titleTextColor="@color/cardview_light_background">
                            <com.mikhaellopez.circularimageview.CircularImageView
                                android:layout_gravity="end"
                                android:layout_width="45dp"
                                android:layout_height="45dp"
                                android:layout_margin="2dp"
                                app:civ_border_color="@color/colorPrimaryDark"
                                app:civ_border_width="4dp"
                                android:src="@{user.ImageUrl, default=@drawable/user}"
                                android:tint="@color/cardview_light_background"
                                 />
                        </android.support.v7.widget.Toolbar>
                    </android.support.v7.widget.LinearLayoutCompat>
                    <ProgressBar
                        android:visibility="@{user.IsLoadingAccount ? View.VISIBLE : View.INVISIBLE}"
                        style="?android:attr/progressBarStyleHorizontal"
                        android:layout_marginBottom="-8dp"
                        android:layout_marginTop="-4dp"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:backgroundTint="@color/colorAccent"
                        android:indeterminate="true"
                        android:indeterminateBehavior="cycle"/>
                </android.support.design.widget.AppBarLayout>

                <android.support.design.widget.TextInputLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    app:errorEnabled="true"
                    android:errorText="@{usernameError}"
                    android:paddingEnd="8dp"
                    android:paddingRight="8dp"
                    android:paddingStart="8dp"
                    android:paddingLeft="8dp">
                    <android.support.design.widget.TextInputEditText
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:inputType="textNoSuggestions"
                        android:hint="@string/username"
                        android:text="@={user.UserName}"/>
                </android.support.design.widget.TextInputLayout>

                <android.support.design.widget.TextInputLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    app:errorEnabled="true"
                    android:errorText="@{passwordError}"
                    android:paddingEnd="8dp"
                    android:paddingRight="8dp"
                    android:paddingStart="8dp"
                    android:paddingLeft="8dp">
                    <android.support.design.widget.TextInputEditText
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:inputType="textPassword"
                        android:hint="@string/password"
                        android:text="@={user.Password}"/>
                </android.support.design.widget.TextInputLayout>
                <android.support.v7.widget.ButtonBarLayout
                    android:layout_gravity="right"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content">
                    <android.support.v7.widget.AppCompatButton
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:visibility="@{!user.IsReAuth ? View.GONE : View.VISIBLE}"
                        android:text="@string/removeAccount"
                        style="@style/Base.Widget.AppCompat.Button.Borderless"/>
                    <android.support.v7.widget.AppCompatButton
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="@string/login"
                        android:onClick="@{loginBtnEvent}"
                        style="@style/Base.Widget.AppCompat.Button.Borderless"/>
                </android.support.v7.widget.ButtonBarLayout>

            </android.support.v7.widget.LinearLayoutCompat>
        </android.support.v7.widget.CardView>

    </FrameLayout>

</layout>

Код, который устанавливает фрагмент: (Редактировать: проблема была в первой строке этой функции)

private void setRootFragment(Fragment f, boolean addToStack) {
    rootBinding = (RootBinding) DataBindingUtil.setContentView(this, R.layout.root);
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.fragment_container, f);
    if(addToStack){
        transaction.addToBackStack(null);
    }else{
        transaction.disallowAddToBackStack();
    }
    transaction.commit();
}

Strings.xml Прозрачное значение:

<color name="Transparent">#00000000</color>

Ответы:


1

Проблема заключалась в том, что я сбрасывал объект привязки данных и увеличивал его представление каждый раз, когда хотел переключать фрагменты.

Код, который устанавливает фрагмент:

private void setRootFragment(Fragment f, boolean addToStack) {

    //this line of code needs to be in oncreate and not called every time I switch fragments.
    //rootBinding = (RootBinding) DataBindingUtil.setContentView(this, R.layout.root);
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.fragment_container, f);
    if(addToStack){
        transaction.addToBackStack(null);
    }else{
        transaction.disallowAddToBackStack();
    }
    transaction.commit();
}
11.05.2016
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..