34

フラグメントの背景色を変更してみましたが、小さな問題が発生しました。

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>

上記は、メインクラス(MainActivity)によって呼び出されるmain.xmlレイアウトです。

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クラスによって拡張されています

では、なぜこれが私のフラグメントの背景の色を実際に変更しないのですか?

4

5 に答える 5

50

フラグメントはViewから継承しないため、バックグラウンドメソッドが設定されていません。

簡単な修正は、フラグメントのルートビューを取得し、その背景を設定することです。

fragment.getView().setBackgroundColor(Color.WHITE);
于 2013-04-11T05:40:38.933 に答える
10

それが機能しない理由は、フラグメントがアクティビティと同様に扱われるためです。メインアクティビティの子であり、他のアイテムを表示するために使用されるコンテナです。

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>
于 2012-07-27T16:46:35.223 に答える
4

次のようなフラグメントオブジェクトを取得します。

Fragment fragment = (Fragment) getFragmentManager().findFragmentById(R.id.fragmentId);

次のように背景を変更します。

fragment.getView().setBackgroundColor(Color.WHITE);
于 2018-02-13T14:22:00.763 に答える
3

AndroidXでは、Fragmentの代わりにFragmentContainerViewを使用して背景を設定できます。

<androidx.fragment.app.FragmentContainerView
    ...
    android:background="#FFFFFF"/>
于 2020-05-15T09:25:13.360 に答える
0

同じ問題に直面しましたが、私の要件は、フラグメントの背景の描画可能な画像を設定または変更することでした。アダムが答えたように、アプローチは正しいです、そして私は断片から活動への関係を示したいと思います。

ベストプラクティスは、「コネクタ」(または任意の名前)という名前のインターフェイスを使用することです。次に、フラグメントから:

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);
}
于 2017-04-11T18:29:29.930 に答える