我尝试更改片段的背景颜色,但发生了一个小问题。
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类充实
那么,为什么这实际上不会改变我片段背景的颜色呢?
答案 0 :(得分:37)
片段不从View继承,因此没有设置背景方法。
任何简单的解决方法都只是片段的grab the root view并设置其背景
fragment.getView().setBackgroundColor(Color.WHITE);
答案 1 :(得分:8)
这不起作用的原因是因为片段被视为与活动类似。它是一个容器,是主要活动的子容器,用于显示其他项目。
你需要将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>
答案 2 :(得分:3)
获取片段对象,如:
Fragment fragment = (Fragment) getFragmentManager().findFragmentById(R.id.fragmentId);
改变它的背景,如:
fragment.getView().setBackgroundColor(Color.WHITE);
答案 3 :(得分:1)
在AndroidX中,您可以使用FragmentContainerView而不是Fragment来设置背景:
<androidx.fragment.app.FragmentContainerView
...
android:background="#FFFFFF"/>
答案 4 :(得分:0)
我遇到了同样的问题,但我的要求是设置或更改片段的背景可绘制图像。正如亚当回答的那样,这种做法是对的,我想展示从片段到活动的联系。
最佳做法是使用名为&#39; Connector&#39;(或任何名称)的界面。然后来自您的片段:
Connector connector = (Connector) getActivity();
connector.setIt(this);
然后在您的活动中实施&#39;连接器&#39;界面并有方法。
@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);
}