当SnackBar出现在CoordinatorLayout中时,向上移动视图
我在CoordinatorLayout
的底部有一个TextView
。
但是当我展示一个SnackBar
,它将覆盖TextView
。
我知道我必须自定义TextView
的Behavior
并覆盖layoutDependsOn
和onDependentViewChanged
,但它不能很好地修复。
如果你知道的话,能给我一些建议吗? 谢谢。
您需要向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属性中。
魔法!
- Android Studio:使用Mongo Java Driver连接到MongoDB服务器
- com.google.gdata.client.GoogleService.setUserToken(android.accounts.AccountManager.getAuthToken(???))
- 如何使用POST上传二进制数据
- 如何在recyclerView android中停止项目重复
- AES CBC PKCS5Padding Java到Ruby
- Android将数据从主UI线程发送到另一个线程
- LibGDX – 调用TiledMapRenderer.render()时应用程序崩溃
- String to String Array Android项目
- 将图像序列化(与Swing兼容)从Java到Android的最佳方法是什么?