我想使用 snackbar
在应用程序的任何部分中显示消息。我的意思是,当wifi被禁用时,应该有一个Snackbar说禁用WiFi。这是在应用程序的任何部分(任何片段或任何活动)中确定的。目前,我在subfragment
中确定所有片段扩展subfragment
,并且在MainActivity
中使用它。这很好。问题在于snackbar
的协调布局。如何在每个XML中给出此coordinator layout
?什么是最好的解决方案?
我认为,常见的方法是遍历root视图并找到是coordinatorlayout实例的孩子,代码段可能是打击:
public View getCoordinateLayout(Activity activity) {
ViewGroup vg = (ViewGroup) activity.findViewById(android.R.id.content);
ViewGroup root = (ViewGroup) vg.getChildAt(0);
int childCount = root.getChildCount();
for(int i=0;i<childCount;i++){
View view = root.getChildAt(i);
if(view instanceof CoordinatorLayout){
return view;
}
}
return null;
}
似乎您想为所有其他布局使用父布局结构。假设我们的父母布局文件称为structure.xml
,看起来像这样:
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.design.widget.CoordinatorLayout>
然后,每当您创建一个活动时,您都可以夸大通常的布局,例如activity_main.xml
,如下:
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.structure);
LayoutInflater.from(this).inflate(R.layout.activity_main, (FrameLayout) findViewById(R.id.container), false);
}
每当您使用通常的布局创建片段时,例如frag_main.xml
,您可以这样做:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup group, Bundle saved) {
View view = inflater.inflate(R.layout.structure, group, false);
inflater.inflate(R.layout.frag_main, (FrameLayout) view.findViewById(R.id.container), false);
return view;
}
由于您已经有一个片段/活动的父级课程,因此您应该能够轻松地为所有子类创建一些辅助方法。
希望这会有所帮助。