it-swarm.com.ru

Android установил прозрачный фон для фрагмента

В моем приложении есть одна активность и все остальные фрагменты

Я устанавливаю фон для активности из style.xml, как показано ниже

<item name="Android:windowBackground">@color/very_light_gray</item>

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

  @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

// create ContextThemeWrapper from the original Activity Context with the custom theme
final Context contextThemeWrapper = new ContextThemeWrapper(getActivity(), R.style.yourCustomTheme);

// clone the inflater using the ContextThemeWrapper
LayoutInflater localInflater = inflater.cloneInContext(contextThemeWrapper);

// inflate the layout using the cloned inflater, not default inflater
return localInflater.inflate(R.layout.yourLayout, container, false);
}

Есть идеи как это сделать?

8
amodkanthe

использовать null для цвета в приложении стиля

 <item name="Android:windowBackground">null</item>
1
Rasoul Miri

создать обратный вызов и реализовать его в Acitvity 

interface OnFragmentDisplay{
  onFragmentDisplay();
}

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

Смотрите эта ссылка и это может помочь

ты пробовал это

fragment.getView().setBackgroundColor(Color.WHITE);
1
Xar E Ahmer

два шага:

первый шаг - создать представление (в файле XML) с прозрачным фоном.

в Android Studio найдите папку «res», щелкните ее правой кнопкой мыши, new -> Android resource file. Чем в появившемся диалоге поставить:

File name: {положи сюда что угодно. например - " my_fragment " (без кавычек)} обратите внимание, что только строчные буквы, цифры и подчеркивания в порядке

Resource type: макет

Root element: LinearLayout (вы можете добавить сюда что-нибудь еще после того, как научитесь лучше понимать XML-макеты)

Source set: main

Directory name: макет.

В появившемся окне переключитесь в режим «текст» вместо «дизайн» (ищите вкладки в левой нижней части экрана).

чем скопировать и вставить это вместо содержимого файла (это очень похоже, мы просто добавляем сюда «прозрачный» фон):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:orientation="vertical" 
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:background="@Android:color/transparent"
    >

</LinearLayout>

второй шаг - надуйте этот макет в вашем фрагменте.

создайте свой фрагментный класс, который расширяет Fragment, и переопределите метод onCreateView (), внутри этого метода надуйте ваше представление и верните его:

public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    // assuming you named your xml file "my_fragment":
    // for other names replace R.layout.my_fragment with  R.layout.put_your_name_here
    View view = inflater.inflate(R.layout.my_fragment, container, false);
    return view;
}

конечно, не забудьте создать экземпляр своего фрагмента в упражнении!

0
Re'em

Вы должны настроить свою активность также прозрачным.

Android:background="@Android:color/transparent"

Так как ваша активность имеет @color/very_light_gray, даже если вы установите свой Фрагмент как @Android:color/transparent, он не будет работать.

Каждый вид должен иметь прозрачный фон, чтобы избежать наложения.

0
Gokul Nath KP

Итак, предполагая, что вы хотите, чтобы активность и фрагмент были прозрачными для определенного фрагмента (не совсем ясно, если это то, что вы хотите от вашего вопроса, но я собираюсь предположить, что это так) .. вам нужно установить «Хост» "фон активности к прозрачному, когда к нему прикреплен" прозрачный "фрагмент. Когда к нему присоединится любой другой фрагмент, вам нужно будет сбросить фон активности, иначе он останется прозрачным.

Есть несколько способов сделать это, но я собираюсь выбрать что-то «довольно» прямое:

в вашем прозрачном фрагменте:

      @Override
      public void onStart() {
        super.onStart();
// I'm using null here because drawing nothing is faster than drawing transparent pixels.
        getActivity().getWindow().setBackgroundDrawable(null);
        getView().setBackground(null);
      }

      @Override
      public void onStop() {
        super.onStop();
        getActivity().getWindow().setBackgroundDrawable(new ColorDrawable(@color/very_light_gray));
     }

Не совсем уверен, что это тот эффект, который вы хотите.

Удачи . С уважением, CJ

0
C James

Простой способ сделать это установить цвет фона для корневого макета этого конкретного фрагмента следующим образом

Android: фон = "@ Android: цвет/прозрачный"

0
Uma Achanta

Вы только что установили фон для фрагмента макета ниже кода:

<LinearLayout
...
Android:background="@Android:color/transparent"/>
0
nhonnq

Фон макета вашего контейнера активности должен быть прозрачным. Затем установите цвет фона для макетов фрагмента. А для конкретного макета фрагмента установите прозрачный цвет, чтобы получить необходимые сценарии. 

0
Zia

Вы можете использовать что-то вроде приведенного ниже кода в своей деятельности при создании фрагмента. Вместо Color.White вы можете использовать свой собственный цвет.

fragment.getView().setBackgroundColor(Color.WHITE);
0
Tony

Добавьте эту единственную строку в ваш код 

getActivity().getWindow().setBackgroundDrawableResource(R.drawable.my_drawable);
0
Nik

Установите стиль макета вашей деятельности как 

<style name="RootLayout" parent="AppTheme">
    <item name="Android:background">@drawable/app_transparent_background</item>
</style>

и установите его в родительском макете активности как 

<LinearLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    xmlns:tools="http://schemas.Android.com/tools"
    style="@style/RootLayout"
    ...>

и в других фрагментах, которые вы хотите установить белым или другим цветным фоном, установите другой стиль в основной структуре этих фрагментов. 

Это будет работать

0
Chintak Patel