根据布局分析发现是添加到了根节点,也就是我传递的coordinatelayout最后一个子view.
布局源码为
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2015 The Android Open Source Project
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<view
xmlns:android="http://schemas.android.com/apk/res/android"
class="com.google.android.material.snackbar.SnackbarContentLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom">
<TextView
android:id="@+id/snackbar_text"
style="?attr/snackbarTextViewStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="center_vertical|left|start"/>
<Button
android:id="@+id/snackbar_action"
style="?attr/snackbarButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|right|end"
android:minWidth="48dp"
android:visibility="gone"/>
</view>
文件为mtrl_layout_snackbar_include.xml
因此得到如下解决办法 ,
public static void closeSnackBar(ViewGroup root) {
// class="com.google.android.material.snackbar.SnackbarContentLayout"
View snackBarButton = root.findViewById(R.id.snackbar_action);
if(snackBarButton!=null){
snackBarButton.callOnClick();
}
}
也可以尝试获取构建snackbar的root 布局最后一个view判断是否等于SnackbarContentLayout
另外我尝试分析com.google.android.material.snackbar.SnackbarManager实例发现是默认类,没权限访问而且也没有相关的关闭方法。
网友评论