我知道默认情况下只有浮动按钮会在出现野生小吃时改变其位置。
但如果我们看this问题(非常接近我的问题),我们就可以找到解决方案here。
基于此,我正在跳跃,我们有一个类似或更好的协调器布局解决方案。
会发生什么:
当小吃栏出现时,我的保存按钮被遮盖了。 (抱歉,使用s.png在堆栈中调整图像大小不起作用)
我想要的是什么:
当Snackbar出现时,我的按钮或整个约束视图上升
我的代码:
xml代码
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/background_white_round">
<TextView
android:id="@+id/dialog_title_text"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="24dp"
android:layout_marginStart="24dp"
android:layout_marginTop="24dp"
android:text="@string/str_title"
android:textColor="@color/solito_text_black"
android:textSize="@dimen/size_text_title"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/dialog_description_text"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="24dp"
android:layout_marginStart="24dp"
android:layout_marginTop="20dp"
android:text="@string/str_loading"
android:textColor="@color/solito_text_grey_dark"
android:textSize="@dimen/size_text_normal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/dialog_title_text" />
<Button
android:id="@+id/dialog_ok_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginTop="24dp"
android:background="@color/background_transparent"
android:text="@android:string/ok"
android:textColor="@color/solito_button_purple"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/dialog_description_text"/>
<Button
android:id="@+id/dialog_cancel_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginTop="24dp"
android:background="@color/background_transparent"
android:text="@string/str_cancel"
android:textColor="@color/solito_button_purple"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/dialog_ok_btn"
app:layout_constraintTop_toBottomOf="@id/dialog_description_text"/>
</android.support.constraint.ConstraintLayout>
java代码
private void showSnackBarUndo() {
//Snack Bar to Undo
Snackbar snackbar = Snackbar
.make(Objects.requireNonNull(getView()), getResources().getString(R.string.str_list_cleaned), Snackbar.LENGTH_LONG)
.setAction(getResources().getString(R.string.str_undo), new View.OnClickListener() {
@Override
public void onClick(View view) {
DataStorePersistence.getInstance().setAddressArrayListTemp(getContext(), listTitle, listID, addressArrayListUndo);
updateListContent();
Snackbar
.make(getView(),
getResources().getString(R.string.str_list_restored),
Snackbar.LENGTH_SHORT)
.show();
}
});
snackbar.show();
}
修改: 我尝试了很多东西。示例尝试将行为放在一个类按钮自定义中,但不起作用。研究材料设计Android看起来不像他们想让你把按钮放在屏幕的底部。所以到现在为止我正在改为浮动按钮。不是问题的解决方案,但也许可以帮助到达这里的人。
答案 0 :(得分:0)
如果你尝试的所有方法都不起作用。然后在每次显示和解除小吃栏时尝试增加和减少保存按钮的下边距 即
...
snackbar.addCallback(new Snackbar.Callback() {
@Override
public void onDismissed(Snackbar snackbar, int event) {
LinearLayout.LayoutParams param = theSaveButton.getLayoutParams();
param.bottomMargin = 10 ; //or the previous bottom margin
theSaveButton.setLayoutParams(param);
}
@Override
public void onShown(Snackbar snackbar) {
LinearLayout.LayoutParams param = theSaveButton.getLayoutParams();
param.bottomMargin = 80 ; //80dp being the height of snackbar
theSaveButton.setLayoutParams(param);
}
});
snackbar.show();
...
或者更糟糕的是在快餐栏听众中更改按钮的位置
答案 1 :(得分:0)
可能最容易做的就是获取FloatingActionBar.Behavior
的源代码(如果任何代码要求视图属于FloatingActionButton
类型,则很少)并修改它以使其适用于常规而是Button
。然后,只需将新自定义Behavior
课程的实例设置为布局中的Button
。
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="com.your.app.ButtonBehavior" />
答案 2 :(得分:0)
不确定我的SnackProgressBar图书馆是否会有所帮助。您首先创建一个SnackProgressBarManager
,然后将该按钮作为视图的一部分包含在与snackBar一起移动。
// always have one instance of SnackProgressBarManager only in the activity
snackProgressBarManager = new SnackProgressBarManager(view)
// (optional) set the view which will animate with SnackProgressBar e.g. FAB when CoordinatorLayout is not used
.setViewToMove(buttonView)
Github提供完整的文档。如果你想将它用于其他目的,它也非常灵活。