gpt4 book ai didi

java - android状态栏隐藏抽屉导航

转载 作者:太空狗 更新时间:2023-10-29 13:15:31 25 4
gpt4 key购买 nike

我有一个带此代码的抽屉导航:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.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"
android:fitsSystemWindows="true"
android:layout_width="match_parent" android:layout_height="match_parent"
tools:openDrawer="start">


<!--<android.support.design.widget.AppBarLayout android:layout_height="wrap_content"-->
<!--android:layout_width="match_parent" android:theme="@style/AppTheme.AppBarOverlay">-->

<!--<android.support.v7.widget.Toolbar android:id="@+id/toolbar"-->
<!--android:layout_width="match_parent" android:layout_height="?attr/actionBarSize"-->
<!--android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay" />-->

<!--</android.support.design.widget.AppBarLayout>-->

<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:background="#000000"
android:layout_height="match_parent" >
</FrameLayout>


<!--<android.support.design.widget.AppBarLayout android:layout_height="wrap_content"-->
<!--android:layout_width="match_parent" android:theme="@style/AppTheme.AppBarOverlay">-->

<!--</android.support.design.widget.AppBarLayout>-->

<!--<include-->
<!--layout="@layout/app_bar_home_page"-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="match_parent" />-->

<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/nav_header_home_page"
app:menu="@menu/activity_home_page_drawer"
app:insetForeground="#4000"/>

</android.support.v4.widget.DrawerLayout>

我还用 v21 设置了我的风格:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="windowActionModeOverlay">true</item>
</style>

但我的问题是操作栏总是在我的抽屉导航上方,隐藏了他的顶部。这是截图:

enter image description here

如您所见,我的操作栏隐藏了抽屉导航。

我该如何解决这个问题?任何帮助将不胜感激。

谢谢大家

附言:

这是我想要实现的,这是我在网上找到的第一张图片。 enter image description here

编辑:请注 Intent 片,我的目标与“重复”不同。他想在标题下方设置他的列表,我想用我的抽屉隐藏状态栏

编辑2:

我回到了原点,现在抽屉导航就在 actionBar 的下方。这是我的 Java 代码:

public class HomePageActivity extends AppCompatActivity implements IHomePage {

private DrawerLayout drawerLayout;
private NavigationView navigationView;
private ActionBarDrawerToggle mDrawerToggle;
private ActionBar ab;

private boolean isDetail = false;
private int lastSelected = 0;

@Override
protected void onResume() {
super.onResume();

if(mDrawerToggle != null) {
mDrawerToggle.syncState();
}

if(navigationView != null){
navigationView.getMenu().getItem(0).setChecked(true);
} else{
initDrawer();
navigationView.getMenu().getItem(0).setChecked(true);
}
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home_page);

navigationView = (NavigationView) findViewById(R.id.nav_view);
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

initActionBar() ;
initDrawer();

FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
PreferitiFragment fragment = new PreferitiFragment();
fragmentTransaction.add(R.id.content_frame, fragment);
fragmentTransaction.commit();

mDrawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mDrawerToggle.onConfigurationChanged(newConfig);
}
@Override
public boolean onOptionsItemSelected(final MenuItem item) {
return mDrawerToggle.onOptionsItemSelected(item) || super.onOptionsItemSelected(item);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
mDrawerToggle.syncState();
}

private void initActionBar() {
ab = getSupportActionBar();
if (ab == null) {
Toast.makeText(this, "no", Toast.LENGTH_SHORT).show();
return;
}
ab.setDisplayHomeAsUpEnabled(true);
ab.setHomeButtonEnabled(true);


}

private void initDrawer() {

navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem item) {

int id = item.getItemId();
lastSelected = id;

switch (id){
case R.id.nav_favorite:
setFragment(new PreferitiFragment());
break;

case R.id.nav_search:
setFragment(new CercaPaeseFragment());
break;

case R.id.nav_settings:
setFragment(new ImpostazioniFragment());
break;

case R.id.nav_guida:
setFragment(new GuidaFragment());
break;
default:
setFragment(new PreferitiFragment());
break;
}

DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
});

mDrawerToggle = new ActionBarDrawerToggle(
this,
drawerLayout,
R.string.navigation_drawer_open,
R.string.navigation_drawer_close
) {
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);

invalidateOptionsMenu();
// mDrawerToggle.syncState();
}

@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
invalidateOptionsMenu();
// mDrawerToggle.syncState();
}


};
drawerLayout.setDrawerListener(mDrawerToggle);
}

@Override
public void showDetails(UUID idPharmacy) {

isDetail = true;
setFragment(new DettagliFragment());
}

@Override
public void onBackPressed() {
if (isDetail) {
if(lastSelected == R.id.nav_search) {
setFragment(new CercaPaeseFragment());
} else if(lastSelected == R.id.nav_favorite){
setFragment(new PreferitiFragment());
}
} else {
super.onBackPressed();
}
}

private void setFragment(Fragment fragment){


IMyFragments iMyFragments = (IMyFragments) fragment;
ab.setTitle(iMyFragments.getTitle());

FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.content_frame, fragment);
fragmentTransaction.commit();
}
}

这是我的主页布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.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"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:openDrawer="start">

<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:background="#000000"
android:layout_height="match_parent" >
</FrameLayout>

<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/nav_header_home_page"
app:menu="@menu/activity_home_page_drawer" />

</android.support.v4.widget.DrawerLayout>

最佳答案

android.support.v4.widget.DrawerLayout上可以尝试添加

android:paddingTop="?attr/actionBarSize"

这是一个类似的问题 Android Navigation Drawer and windowActionBarOverlay = true

或者你可以隐藏操作栏

来自 https://stackoverflow.com/a/22891560/1815624

Very simple.

getActionbar().hide();
getActionbar().show();

关于分隔符的最后一部分

<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:color/darker_gray"/>

To add vertical separator, switch the layout_width and layout_height values

或者将抽屉放在 ActionbBar 的顶部,您可以尝试以下答案:

https://stackoverflow.com/a/26174941/1815624

Below is some detailed steps for you to do that.

First, create a xml named "decor.xml" or anything you like. Only put the DrawerLayout and the drawer in. The "FrameLayout" below is just a container. We will use it to wrap your activity's content.

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout ...>
<FrameLayout android:id="@+id/container"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
<fragment android:name="com...."
android:layout_gravity="start"
android:id="@id/navigation"
android:layout_width="@dimen/navigation_menu_width"
android:layout_height="fill_parent" />
</android.support.v4.widget.DrawerLayout>

and then remove the DrawerLayout in your main layout. Now the layout of your main activity should look like

<RelativeLayout android:orientation="vertical" 
android:layout_width="fill_parent"
android:layout_height="fill_parent">
...
</RelativeLayout>

we assume that the main activity's layout is named "main.xml".

in your MainActivity, write as the following:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

// Inflate the "decor.xml"
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
DrawerLayout drawer = (DrawerLayout) inflater.inflate(R.layout.decor, null); // "null" is important.

// HACK: "steal" the first child of decor view
ViewGroup decor = (ViewGroup) getWindow().getDecorView();
View child = decor.getChildAt(0);
decor.removeView(child);
FrameLayout container = (FrameLayout) drawer.findViewById(R.id.container); // This is the container we

defined just now. container.addView(child);

    // Make the drawer replace the first child
decor.addView(drawer);

// Do what you want to do.......

}

Now you've got a DrawerLayout which can slide over the ActionBar. But you might find it covered by status bar. You might need to add a paddingTop to the Drawer in order to fix that.

这并不理想,但它应该可以帮助您...白色是抽屉,黑色是主要内容,蓝色是标题栏...

enter image description here

public class HomePageActivity extends AppCompatActivity {

private DrawerLayout drawerLayout;
private NavigationView navigationView;
private ActionBarDrawerToggle mDrawerToggle;
private ActionBar ab;

private boolean isDetail = false;
private int lastSelected = 0;

@Override
protected void onResume() {
super.onResume();

if(mDrawerToggle != null) {
mDrawerToggle.syncState();
}

// if(navigationView != null){
// navigationView.getMenu().getItem(0).setChecked(true);
// } else{
// initDrawer();
// navigationView.getMenu().getItem(0).setChecked(true);
// }
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home_page);

navigationView = (NavigationView) findViewById(R.id.nav_view);
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

initActionBar() ;
initDrawer();

// FragmentManager fragmentManager = getFragmentManager();
// FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
// PreferitiFragment fragment = new PreferitiFragment();
// fragmentTransaction.add(R.id.content_frame, fragment);
// fragmentTransaction.commit();

mDrawerToggle.syncState();

LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
navigationView = (NavigationView) findViewById(R.id.nav_view);
DrawerLayout drawer = (DrawerLayout) inflater.inflate(R.layout.drawer_layout, null);

// HACK: "steal" the first child of decor view
ViewGroup decor = (ViewGroup) getWindow().getDecorView();
View child = decor.getChildAt(0);
decor.removeView(child);
FrameLayout container = (FrameLayout) drawer.findViewById(R.id.content_frame); // This is the container we defined just now.
container.addView(child);
decor.addView(drawer);
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mDrawerToggle.onConfigurationChanged(newConfig);
}
@Override
public boolean onOptionsItemSelected(final MenuItem item) {
return mDrawerToggle.onOptionsItemSelected(item) || super.onOptionsItemSelected(item);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
mDrawerToggle.syncState();
}

private void initActionBar() {
ab = getSupportActionBar();
if (ab == null) {
Toast.makeText(this, "no", Toast.LENGTH_SHORT).show();
return;
}
ab.setDisplayHomeAsUpEnabled(true);
ab.setHomeButtonEnabled(true);


}

private void initDrawer() {

navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem item) {

int id = item.getItemId();
lastSelected = id;

// switch (id){
// case R.id.nav_favorite:
// setFragment(new PreferitiFragment());
// break;
//
// case R.id.nav_search:
// setFragment(new CercaPaeseFragment());
// break;
//
// case R.id.nav_settings:
// setFragment(new ImpostazioniFragment());
// break;
//
// case R.id.nav_guida:
// setFragment(new GuidaFragment());
// break;
// default:
// setFragment(new PreferitiFragment());
// break;
// }

DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
});

mDrawerToggle = new ActionBarDrawerToggle(
this,
drawerLayout,
android.R.drawable.ic_btn_speak_now,
R.string.open,
R.string.close
) {
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);

invalidateOptionsMenu();
// mDrawerToggle.syncState();
}

@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
invalidateOptionsMenu();
// mDrawerToggle.syncState();
}


};
drawerLayout.setDrawerListener(mDrawerToggle);
}

// @Override
// public void showDetails(UUID idPharmacy) {
//
// isDetail = true;
// setFragment(new DettagliFragment());
// }

// @Override
// public void onBackPressed() {
// if (isDetail) {
// if(lastSelected == R.id.nav_search) {
// setFragment(new CercaPaeseFragment());
// } else if(lastSelected == R.id.nav_favorite){
// setFragment(new PreferitiFragment());
// }
// } else {
// super.onBackPressed();
// }
// }

// private void setFragment(Fragment fragment){
//
//
// IMyFragments iMyFragments = (IMyFragments) fragment;
// ab.setTitle(iMyFragments.getTitle());
//
// FragmentManager fragmentManager = getFragmentManager();
// FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
// fragmentTransaction.add(R.id.content_frame, fragment);
// fragmentTransaction.commit();
// }
}

关于java - android状态栏隐藏抽屉导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35135249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com