Mar*_*Bro 24 android snackbar android-snackbar coordinator-layout android-coordinatorlayout
我正在考虑在我的应用中实现Android Snackbars的方法.基本上,我希望能够在应用程序的任何位置显示Snackbar.
正如我发现的那样,android.support.design.widget.Snackbar在投入时表现最佳android.support.design.widget.CoordinatorLayout.否则,我无法将其滑开,它显示在导航抽屉上,并且不与浮动操作按钮交互.
所以现在的问题是:这是一个很好的做法,总结我的所有布局中CoordinatorLayout,得到的BaseActivity有它的参考,以便它可以从几乎任何地方传递到小吃吧?
这似乎是确保Snackbar和其他布局组件正常运行的可靠方法,但是......好吧,意味着触摸所有布局并具有一个BaseActivity,该BaseActivity由所有其他活动扩展,并且可以从任何想要显示的片段访问小吃吧.
有没有更好的办法?
我已经Snackbar在应用程序的任何地方实现了相同的开放.
我创建了一个常用方法,只需传递我需要显示的上下文和字符串消息,无需传递任何视图.看看我的代码片段.
public static void showSnackBar(Activity context, String msg) {
Snackbar.make(context.getWindow().getDecorView().findViewById(android.R.id.content), msg, Snackbar.LENGTH_LONG).show();
}
Run Code Online (Sandbox Code Playgroud)
使用此功能,您Snackbar每次都可以获得最低价.
这些是您拥有的选择。根据项目需要使用其中之一。
执行此操作的最佳方法是您在问题中已经说过的内容,添加 aBaseActivity并从中扩展您的所有活动。根据 的官方文档CoordinatorLayout,
CoordinatorLayout适用于两个主要用例:
- 作为顶级应用程序装饰或镀铬布局
- 作为与一个或多个子视图进行特定交互的容器
所以CoordinatorLayout主要是因为这个原因而创建的(尽管也有其他原因)。正如文档中提到的,性能问题最少。
正如 Rainmaker 已经回答的那样,您可以使用 Activity 来引用CoordinatorLayout布局文件夹中的布局,其中子级将是框架布局。
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
android:id="@+id/activity_root"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)
那么您将仅使用一项活动setContentView(R.layout.root_coordinate_layout)。然后,您将把所有其他活动转换为片段并使用以下命令添加它们:
MyFragment myf = new MyFragment();
FragmentTransaction transaction = getFragmentManager()
.beginTransaction()
.add(R.id.your_layout, myf)
.commit();
Run Code Online (Sandbox Code Playgroud)
这是做同样事情的另一种方式。但这有点复杂,需要做很多工作。
在您的所有活动中,不要使用 ,而是setContentView(R.id.your_layout)使用:
LayoutInflater inflater = LayoutInflater.from(this);
ConstraintLayout yourLayout = (ConstraintLayout) inflater.inflate(R.layout.your_layout, null, false);
CoordinatorLayout layout = new CoordinatorLayout(this);
// Set its property as you wish ...
layout.addView(mainScreen);
setContentView(layout);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1137 次 |
| 最近记录: |