当SnackBar出现在CoordinatorLayout中时,向上移动视图

我在CoordinatorLayout的底部有一个TextView

但是当我展示一个SnackBar ,它将覆盖TextView

我知道我必须自定义TextViewBehavior并覆盖layoutDependsOnonDependentViewChanged ,但它不能很好地修复。

如果你知道的话,能给我一些建议吗? 谢谢。

您需要向LinearLayout添加行为并将其嵌入CoordinatorLayout

这是你如何做到的。

MoveUpwardBehavior.class

 import android.os.Build; import android.support.design.widget.CoordinatorLayout; import android.support.design.widget.Snackbar; import android.view.View; public class MoveUpwardBehavior extends CoordinatorLayout.Behavior { private static final boolean SNACKBAR_BEHAVIOR_ENABLED; @Override public boolean layoutDependsOn(CoordinatorLayout parent, View child, View dependency) { return SNACKBAR_BEHAVIOR_ENABLED && dependency instanceof Snackbar.SnackbarLayout; } @Override public boolean onDependentViewChanged(CoordinatorLayout parent, View child, View dependency) { float translationY = Math.min(0, dependency.getTranslationY() - dependency.getHeight()); child.setTranslationY(translationY); return true; } static { SNACKBAR_BEHAVIOR_ENABLED = Build.VERSION.SDK_INT >= 11; } } 

CustomLinearLayout.class

 import android.content.Context; import android.support.design.widget.CoordinatorLayout; import android.util.AttributeSet; import android.widget.LinearLayout; @CoordinatorLayout.DefaultBehavior(MoveUpwardBehavior.class) public class CustomLinearLayout extends LinearLayout { public CustomLinearLayout(Context context) { super(context); } public CustomLinearLayout(Context context, AttributeSet attrs) { super(context, attrs); } public CustomLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } } 

示例xml-> activity_home

这里user.example.charu.its2017huree是我的包名,用你的名字替换它!

     

最后在我的Activity中称为HomeActivity

 public class HomeActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_home); CustomLinearLayout customLinearLayout = (CustomLinearLayout) findViewById(R.id.linearLayout); Snackbar.make(customLinearLayout, "Text to display", Snackbar.LENGTH_LONG).show(); } } 

来自此示例 。

TextView是CoordinatorLayout的直接子项,只需添加即可

app:layout_dodgeInsetEdges="bottom"

在TextView属性中。

魔法!