Android上的自定义导航抽屉
我想为我的导航抽屉实现如下功能: 我从Stack Overflow中得到了这个答案,几乎得到了结果,只是视图没有正确查看。这是我遵循的答案: 但我得到的是这样的东西: 正如你所看到的,在我看来,导航抽屉是分开来的。它没有得到整个窗口,视图是分开的。我想把它显示为第一个图像,就像整个屏幕应该只有一个图像一样,主屏幕的一小部分应该像第一个图像一样显示 抽屉活动的我的XML代码:Android上的自定义导航抽屉,android,navigation,navigation-drawer,Android,Navigation,Navigation Drawer,我想为我的导航抽屉实现如下功能: 我从Stack Overflow中得到了这个答案,几乎得到了结果,只是视图没有正确查看。这是我遵循的答案: 但我得到的是这样的东西: 正如你所看到的,在我看来,导航抽屉是分开来的。它没有得到整个窗口,视图是分开的。我想把它显示为第一个图像,就像整个屏幕应该只有一个图像一样,主屏幕的一小部分应该像第一个图像一样显示 抽屉活动的我的XML代码: <androidx.drawerlayout.widget.DrawerLayout xmlns:andro
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
app:elevation="0dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/splash"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<RelativeLayout
android:id="@+id/holder"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:background="@color/colorAccent"
android:layout_height="match_parent"
android:orientation="vertical">
<include
layout="@layout/app_bar_main2"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
</RelativeLayout>
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@android:color/transparent"
app:menu="@menu/activity_main2_drawer" />
</androidx.drawerlayout.widget.DrawerLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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="@dimen/nav_header_height"
android:background="@drawable/side_nav_bar"
android:gravity="bottom"
android:orientation="vertical"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:theme="@style/ThemeOverlay.AppCompat.Dark">
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/nav_header_desc"
android:paddingTop="@dimen/nav_header_vertical_spacing"
app:srcCompat="@mipmap/ic_launcher_round" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/nav_header_vertical_spacing"
android:text="@string/nav_header_title"
android:textAppearance="@style/TextAppearance.AppCompat.Body1" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/nav_header_subtitle" />
</LinearLayout>
private AppBarConfiguration mAppBarConfiguration;
View contentView;
DrawerLayout drawerLayout;
private static final float END_SCALE = 0.7f;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
drawerLayout = findViewById(R.id.drawer_layout);
contentView = findViewById(R.id.content);
NavigationView navigationView = findViewById(R.id.nav_view);
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
mAppBarConfiguration = new AppBarConfiguration.Builder(
R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow)
.setDrawerLayout(drawerLayout)
.build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(navigationView, navController);
drawerLayout.setScrimColor(Color.TRANSPARENT);
drawerLayout.addDrawerListener(new DrawerLayout.SimpleDrawerListener() {
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
// Scale the View based on current slide offset
final float diffScaledOffset = slideOffset * (1 - END_SCALE);
final float offsetScale = 1 - diffScaledOffset;
contentView.setScaleX(offsetScale);
contentView.setScaleY(offsetScale);
// Translate the View, accounting for the scaled width
final float xOffset = drawerView.getWidth() * slideOffset;
final float xOffsetDiff = contentView.getWidth() * diffScaledOffset / 2;
final float xTranslation = xOffset - xOffsetDiff;
contentView.setTranslationX(xTranslation);
}
@Override
public void onDrawerClosed(View drawerView) {
}
}
);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main2, menu);
return true;
}
@Override
public boolean onSupportNavigateUp() {
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
return NavigationUI.navigateUp(navController, mAppBarConfiguration)
|| super.onSupportNavigateUp();
}
我通过删除抽屉活动的XML代码中的Linearlayout背景,得到了解决方案。我正在重新发布编辑后的代码:
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
app:elevation="0dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/splash"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<RelativeLayout
android:id="@+id/holder"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:id="@+id/content"
android:layout_width="match_parent"
**android:background="@color/colorAccent"**// Delete this line
android:layout_height="match_parent"
android:orientation="vertical">
<include
layout="@layout/app_bar_main2"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
</RelativeLayout>
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@android:color/transparent"
app:menu="@menu/activity_main2_drawer" />
</androidx.drawerlayout.widget.DrawerLayout>
我已经写了代码。只要删除应用背景的代码行,就可以了。将
导航视图的高程设置为0,将其背景设置为透明,并将您的图像设置为抽屉布局的背景。
。我仍然获得导航视图,与上图中的一行相同。我已经删除了标题,现在如何添加图像我不知道您所说的“分离”是什么意思。您可以将图像设置为抽屉布局上的背景,就像在任何其他视图上一样。等等,“用线分隔”是指阴影吗?如果是这样,看起来androidxDrawerLayout
现在在内部处理抽屉高度,因此您可以在
上设置app:elevation=“0dp”
。我正在用我得到的图像更新我的问题,我已经为绘图布局设置了高度=0dp,为抽屉布局设置了背景图像