📌  相关文章
📜  如何避免Android中的Snackbar重叠浮动操作按钮?

📅  最后修改于: 2021-05-13 15:20:17             🧑  作者: Mango

先决条件:

  • 带有示例的Android中的浮动操作按钮(FAB)
  • 如何在Android中添加小吃店

如果有人在他的android应用程序中实现了Floating Action Button(FAB),并且在同一应用程序中也存在Snackbar实现,则Snackbar肯定会与Floating Action Button重叠。看一下下面的GIF,它显示了Snackbar和Floating Action Button的问题:

问题

如何解决这个问题?

因此,在本文中,我们通过在Android中举一个简单的示例来解决此问题。请注意,我们将使用Java语言实现此示例。

步骤1:创建一个新项目

要在Android Studio中创建新项目,请参阅如何在Android Studio中创建/启动新项目。请注意,选择Java作为编程语言。

步骤2:在应用程序级别Gradle文件上添加依赖项。

  • 在这里,我们使用由Google Material Design Team设计和开发的Floating action按钮。
  • 将依赖项添加到build.gradle(app)文件中,如下所示:
  • 确保将依赖项添加到应用程序级别的Gradle文件中。添加依赖项后,您需要单击Android Studio IDE右上角显示的“立即同步”按钮。
  • 当用户单击立即同步按钮时,请确保您已连接到网络,以便它可以下载所需的文件。
  • 如果您无法获得上述步骤,请参考下图:

摇篮文件

步骤3:将FAB图标添加到Drawble文件

  • 为了演示起见,将在Drawable文件夹中导入3个图标,一个可以导入他/她选择的图标。可以通过右键单击drawable文件夹-> New-> Vector Asset来做到这一点。请参考下图导入矢量图标。

矢量资产

  • 现在选择您的矢量图标:

选择您的矢量图标

步骤4:使用activity_main.xml文件

  • 在activity_main.xml文件中,添加一个浮动动作按钮(FAB)和一个按钮。因此,每当用户单击“按钮”时,就会弹出一个小吃栏。
  • 在activity_main.xml文件中调用以下代码。为了清楚地理解,请参考下面给出的代码内的注释:
XML


  
    


Java
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
  
public class MainActivity extends AppCompatActivity {
  
    Button mSnackBarButton;
    FloatingActionButton mAddFab;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
  
        // Register the show snackbar button with appropriate ID
        mSnackBarButton = findViewById(R.id.show_snackbar_button);
  
        // also register the floating action button with appropriate ID
        mAddFab = findViewById(R.id.add_fab);
  
        // Build and show the simple Snackbar with action button on it
        mSnackBarButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar snackbar = Snackbar.make(view, "This is sample snackbar", Snackbar.LENGTH_SHORT);
                // Set the Anchor View to perticular view to display the snackbar to top of it
                snackbar.setAnchorView(mAddFab);
                snackbar.setAction("OKAY", new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        // Do appropriate action on click of snackbar action button
                    }
                });
                snackbar.show();
            }
        });
    }
}


产生以下输出UI:

输出界面

步骤5:使用MainActivity。 Java文件

  • 现在,在MainActivity中以编程方式解决此问题。 Java文件。
  • 可以观察以下代码,其中SHOW SNACKBAR按钮onclick侦听器已将AnchorView设置为父FAB。这样,即使弹出快餐栏后,父FAB还是可见的,并且快餐栏将显示在FAB的顶部。
  • 调用以下代码,并在代码内部添加注释以更详细地了解代码。

Java

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
  
public class MainActivity extends AppCompatActivity {
  
    Button mSnackBarButton;
    FloatingActionButton mAddFab;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
  
        // Register the show snackbar button with appropriate ID
        mSnackBarButton = findViewById(R.id.show_snackbar_button);
  
        // also register the floating action button with appropriate ID
        mAddFab = findViewById(R.id.add_fab);
  
        // Build and show the simple Snackbar with action button on it
        mSnackBarButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar snackbar = Snackbar.make(view, "This is sample snackbar", Snackbar.LENGTH_SHORT);
                // Set the Anchor View to perticular view to display the snackbar to top of it
                snackbar.setAnchorView(mAddFab);
                snackbar.setAction("OKAY", new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        // Do appropriate action on click of snackbar action button
                    }
                });
                snackbar.show();
            }
        });
    }
}

输出:在模拟器上运行

想要一个节奏更快,更具竞争性的环境来学习Android的基础知识吗?
单击此处,前往由我们的专家精心策划的指南,以使您立即做好行业准备!