如何在 Android 应用中使用 Morphy 工具栏库?
MorphyToolbar 是一个库,它允许我们拥有一个带有标题、副标题和图片的自定义工具栏,进一步提供了在过渡之间为视图设置动画的可能性。这个库非常容易集成并提供多种自定义。在本文中,我们将使用Java语言在 Android 应用程序中实现这个库。下面给出了一个示例 GIF,以了解我们将在本文中做什么。
分步实施
第 1 步:创建一个新项目
要在 Android Studio 中创建新项目,请参阅如何在 Android Studio 中创建/启动新项目。请注意,选择Java作为编程语言。
第 2 步:添加 JitPack
导航到Gradle Scripts > build.gradle(Project: Project Name) ,在存储库的末尾添加 jitpack,并同步项目。
maven { url "https://jitpack.io" }
第三步:添加库依赖
导航到Gradle Scripts > build.gradle(Module:app) ,在依赖项部分添加库,并同步项目。
dependencies {
implementation 'com.github.badoualy:morphy-toolbar:1.0.4'
}
第 4 步:使用 style.xml 文件
导航到app > res > values> styles.xml并将以下代码添加到该文件中。下面是styles.xml文件的代码。
XML
XML
Java
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Gravity;
import android.view.MenuItem;
import android.view.View;
import com.github.badoualy.morphytoolbar.MorphyToolbar;
public class MainActivity extends AppCompatActivity {
MorphyToolbar morphyToolbar;
// primary2 determines the color
// of morphyToolbar when expanded
int primary2 = Color.parseColor("#fbc757");
// primaryDark2 determines the color
// of status bar when expanded
int primaryDark2 = Color.parseColor("#e6b449");
AppBarLayout appBarLayout;
Toolbar toolbar;
FloatingActionButton fabPhoto;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
appBarLayout = findViewById(R.id.layout_app_bar);
toolbar = findViewById(R.id.toolbar);
fabPhoto = findViewById(R.id.fab_photo);
disableAppBarDrag();
// disableAppBarDrag() disables the scrolling-of
// AppBarLayout in CoordinatorLayout
// i.e prevents the user from hiding
// the ToolBar when swiped above
hideFab();
// hideFab() hides the floating action button
// Attaching MorphyToolbar to the given activity/toolbar
morphyToolbar = MorphyToolbar.builder(this, toolbar)
.withToolbarAsSupportActionBar()
// Title of Toolbar
.withTitle("GeeksForGeeks DS and Algorithms Course")
// Subtitle of Toolbar
.withSubtitle("16,000 Participants")
// Adding image to the toolbar
.withPicture(R.drawable.gfgicon)
// if you want to hide the img when
// AppBarLayout collapses, set it to true
.withHidePictureWhenCollapsed(false)
.build();
morphyToolbar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// if morphyToolbar is collapsed, expand it
// and if expanded, collapse it.
if (morphyToolbar.isCollapsed()) {
morphyToolbar.expand(primary2, primaryDark2,
new MorphyToolbar.OnMorphyToolbarExpandedListener() {
@Override
public void onMorphyToolbarExpanded() {
// shows the floating action button
// when morphyToolbar expands
showFab();
}
});
} else {
// hides the floating action
// button when morphyToolbar collapses
hideFab();
morphyToolbar.collapse();
}
}
});
// adding a back button
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP
| ActionBar.DISPLAY_SHOW_TITLE
| ActionBar.DISPLAY_SHOW_CUSTOM);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
}
private void disableAppBarDrag() {
// disables the scrolling-of AppBarLayout in CoordinatorLayout
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams();
AppBarLayout.Behavior behavior = new AppBarLayout.Behavior();
params.setBehavior(behavior);
behavior.setDragCallback(new AppBarLayout.Behavior.DragCallback() {
@Override
public boolean canDrag(@NonNull AppBarLayout appBarLayout) {
return false;
}
});
}
// These two methods hideFab() & showFab() are
// for hiding and showing the floating
// action button, which is to be used only
// if you are adding a floating action button.
private void hideFab() {
fabPhoto.show();
fabPhoto.hide();
final CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) fabPhoto.getLayoutParams();
layoutParams.setAnchorId(View.NO_ID);
fabPhoto.requestLayout();
fabPhoto.hide();
}
private void showFab() {
final CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) fabPhoto.getLayoutParams();
layoutParams.setAnchorId(R.id.layout_app_bar);
layoutParams.anchorGravity = Gravity.RIGHT | Gravity.END | Gravity.BOTTOM;
fabPhoto.requestLayout();
fabPhoto.show();
}
@Override
public void onBackPressed() {
// if morphyToolbar is already
// collapsed finish the activity
// else collapse the toolbar
if (!morphyToolbar.isCollapsed()) {
hideFab();
morphyToolbar.collapse();
} else
super.onBackPressed();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// It is called, when a user
// presses back button
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
}
步骤 5:使用 activity_main.xml 文件
导航到app > res > layout > activity_main.xml并将以下代码添加到该文件中。下面是activity_main.xml文件的代码。
XML
第 6 步:使用 MainActivity。 Java文件
转到主活动。 Java文件,参考如下代码。下面是MainActivity的代码。 Java文件。代码中添加了注释以更详细地理解代码。
Java
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Gravity;
import android.view.MenuItem;
import android.view.View;
import com.github.badoualy.morphytoolbar.MorphyToolbar;
public class MainActivity extends AppCompatActivity {
MorphyToolbar morphyToolbar;
// primary2 determines the color
// of morphyToolbar when expanded
int primary2 = Color.parseColor("#fbc757");
// primaryDark2 determines the color
// of status bar when expanded
int primaryDark2 = Color.parseColor("#e6b449");
AppBarLayout appBarLayout;
Toolbar toolbar;
FloatingActionButton fabPhoto;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
appBarLayout = findViewById(R.id.layout_app_bar);
toolbar = findViewById(R.id.toolbar);
fabPhoto = findViewById(R.id.fab_photo);
disableAppBarDrag();
// disableAppBarDrag() disables the scrolling-of
// AppBarLayout in CoordinatorLayout
// i.e prevents the user from hiding
// the ToolBar when swiped above
hideFab();
// hideFab() hides the floating action button
// Attaching MorphyToolbar to the given activity/toolbar
morphyToolbar = MorphyToolbar.builder(this, toolbar)
.withToolbarAsSupportActionBar()
// Title of Toolbar
.withTitle("GeeksForGeeks DS and Algorithms Course")
// Subtitle of Toolbar
.withSubtitle("16,000 Participants")
// Adding image to the toolbar
.withPicture(R.drawable.gfgicon)
// if you want to hide the img when
// AppBarLayout collapses, set it to true
.withHidePictureWhenCollapsed(false)
.build();
morphyToolbar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// if morphyToolbar is collapsed, expand it
// and if expanded, collapse it.
if (morphyToolbar.isCollapsed()) {
morphyToolbar.expand(primary2, primaryDark2,
new MorphyToolbar.OnMorphyToolbarExpandedListener() {
@Override
public void onMorphyToolbarExpanded() {
// shows the floating action button
// when morphyToolbar expands
showFab();
}
});
} else {
// hides the floating action
// button when morphyToolbar collapses
hideFab();
morphyToolbar.collapse();
}
}
});
// adding a back button
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP
| ActionBar.DISPLAY_SHOW_TITLE
| ActionBar.DISPLAY_SHOW_CUSTOM);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
}
private void disableAppBarDrag() {
// disables the scrolling-of AppBarLayout in CoordinatorLayout
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams();
AppBarLayout.Behavior behavior = new AppBarLayout.Behavior();
params.setBehavior(behavior);
behavior.setDragCallback(new AppBarLayout.Behavior.DragCallback() {
@Override
public boolean canDrag(@NonNull AppBarLayout appBarLayout) {
return false;
}
});
}
// These two methods hideFab() & showFab() are
// for hiding and showing the floating
// action button, which is to be used only
// if you are adding a floating action button.
private void hideFab() {
fabPhoto.show();
fabPhoto.hide();
final CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) fabPhoto.getLayoutParams();
layoutParams.setAnchorId(View.NO_ID);
fabPhoto.requestLayout();
fabPhoto.hide();
}
private void showFab() {
final CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) fabPhoto.getLayoutParams();
layoutParams.setAnchorId(R.id.layout_app_bar);
layoutParams.anchorGravity = Gravity.RIGHT | Gravity.END | Gravity.BOTTOM;
fabPhoto.requestLayout();
fabPhoto.show();
}
@Override
public void onBackPressed() {
// if morphyToolbar is already
// collapsed finish the activity
// else collapse the toolbar
if (!morphyToolbar.isCollapsed()) {
hideFab();
morphyToolbar.collapse();
} else
super.onBackPressed();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// It is called, when a user
// presses back button
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
}
输出:
GitHub 存储库: MorphyToolbarLibrary