让Snackbar向上推视图

显示时,有没有办法让小吃店向上推视图?

小吃店

目前,当显示快餐栏时,它覆盖在下面的视图,所以看起来像一半的按钮被切断,但我希望它几乎“adjustPan”类似于软键盘在屏幕上显示时的工作方式。

有谁知道任何技巧来实现这一目标?

将你的视图放在android.support.design.CoordinatorLayout中

<android.support.design.widget.CoordinatorLayout android:id="@+id/coordinator" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true"> <View android:id="@+id/my_view" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_behavior="com.example.FloatingActionButtonBehavior"/> </android.support.design.widget.CoordinatorLayout> 

这里的重要部分是app:layout_behavior属性。 这里是实现类:

 public class FloatingActionButtonBehavior extends CoordinatorLayout.Behavior<FloatingActionButton> { public FloatingActionButtonBehavior(Context context, AttributeSet attrs) { } @Override public boolean layoutDependsOn(CoordinatorLayout parent, FloatingActionButton child, View dependency) { return dependency instanceof SnackbarLayout; } @Override public boolean onDependentViewChanged(CoordinatorLayout parent, FloatingActionButton child, View dependency) { float translationY = Math.min(0, dependency.getTranslationY() - dependency.getHeight()); child.setTranslationY(translationY); return true; } } 

然后,当您显示小吃店通过协调员布局的参考:

 CoordinatorLayout coordinator = findViewById(R.id.coordinator); Snackbar.make(coordinator, textResId, Snackbar.LENGTH_LONG) .setAction(R.string.accept_ok, new View.OnClickListener() { @Override public void onClick(View v) { } }) .setDuration(Snackbar.LENGTH_INDEFINITE) .show(); 

希望这会帮助你。

在这里输入图像描述

Snackbar将查找最接近的CoordinatorLayout作为parentView ;

  findViewById(R.id.tv_main).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(findViewById(R.id.tv_main), "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); toolbar.getChildAt(1).setVisibility(View.GONE); } }); <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:text="s" android:layout_weight="1" android:layout_width="match_parent" android:layout_height="wrap_content" /> <android.support.design.widget.CoordinatorLayout android:layout_width="match_parent" android:layout_marginBottom="200dp" android:layout_height="100dp"> <TextView android:id="@+id/tv_main" android:background="#4b14b1" android:layout_width="100dp" android:layout_height="100dp" /> </android.support.design.widget.CoordinatorLayout> </RelativeLayout> 

他是使用Kotlin中的泛型的SourceRebeles解决方案。

 typealias T = View class FloatingActionButtonBehavior(context: Context, attrs: AttributeSet) : CoordinatorLayout.Behavior<T>() { override fun layoutDependsOn(parent: CoordinatorLayout, child: T, dependency: View): Boolean { return dependency is SnackbarLayout } override fun onDependentViewChanged(parent: CoordinatorLayout, child: T, dependency: View): Boolean { val translationY = Math.min(0.0f, (dependency.translationY - dependency.height).toFloat()) child.translationY = translationY return true } } 
Interesting Posts