layout Android: изменить цвет фона фрагмента



2 Answers

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

Вам нужно поместить android: background = "# CBA" в фактический макет, который содержит TextView, а НЕ сам фрагмент. Вот так:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#CBA"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:text="BLAHHHH" />
</LinearLayout>
android layout background fragment

Я попытался изменить цвет фона фрагмента, но возникла небольшая проблема.

public class MainActivity extends FragmentActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

Итак, показанный выше код, который у меня был для моего основного класса, вызывает файл XML для фрагмента.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <fragment
        android:id="@+id/fragment1"
        android:name="com.northreal.practice.FirstFragment"
        android:layout_width="0dip"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:background="#CBA" />

</LinearLayout>

Выше находится макет main.xml, который вызывается основным классом (MainActivity).

public class FirstFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup parent,
            Bundle savedInstanceState) {
        return inflater.inflate(R.layout.main, parent, false);
    }
}

Над файлом XML с фрагментом вызывается этот класс.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
     >

    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="BLAHHHH"
        android:layout_gravity="center_vertical" />

</LinearLayout>

Этот макет выше надувается классом FirstFragment

Итак, почему это не меняет цвет фона моего фрагмента?




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

Лучше всего использовать интерфейс с именем «Соединитель» (или любое имя). Затем из вашего фрагмента:

Connector connector = (Connector) getActivity();
connector.setIt(this);

Затем в вашей деятельности, которая будет реализовывать интерфейс «Соединитель» и иметь метод.

@Override
public void setIt(Fragment fragment){
    FirstFragment firstFrag = (FirstFragment) getSupportFragmentManager().findFragmentByTag("first");
    firstFrag.getView().setBackgroundDrawable(getResources().getDrawable(R.drawable.app_background));
    //or for color set
    firstFrag.getView().setBackgroundColor(Color.WHITE);
}



Related