android隐藏特定片段中的工具栏

smo*_*ie9 30 java android toolbar android-fragments

我有一个问题,我不知道如何解决.你如何隐藏特定片段中的工具栏,我已经在互联网上搜索,我发现的是通信活动和片段将解决它.但它根本不适用于我,这是我的代码:

主要活动:

public class MainActivity extends ActionBarActivity implements like_frag.OnHideToolbar{

....

public void onHidingToolbar(int position){
        Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
        if(toolbar == null){
            getSupportActionBar().hide();
        }else{
            getSupportActionBar().hide();
        }
    }
Run Code Online (Sandbox Code Playgroud)

like_frag.java

public class like_frag extends Fragment {

    OnHideToolbar mCallback;
    Toolbar toolbar;

    public interface OnHideToolbar {
        public void onHidingToolbar(int position);
    }

    public void onAttach(Activity activity){

        try{
            mCallback = (OnHideToolbar) activity;
        }catch(ClassCastException e){
            throw new ClassCastException(activity.toString() + "error implementing");
        }
    }
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        View rootView = inflater.inflate(R.layout.swipefrag, container, false);

        toolbar = (Toolbar)getActivity().findViewById(R.id.toolbar);

        return rootView;
    }

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
    }
}
Run Code Online (Sandbox Code Playgroud)

提前致谢.

我的工具栏里面有一个抽屉.

Son*_*mar 75

将此代码放在要隐藏工具栏的片段中...

 @Override
public void onResume() {
    super.onResume();
    ((AppCompatActivity)getActivity()).getSupportActionBar().hide();
}
@Override
public void onStop() {
    super.onStop();
    ((AppCompatActivity)getActivity()).getSupportActionBar().show();
}
Run Code Online (Sandbox Code Playgroud)

  • 使用时请注意闪烁问题!我连续两天失眠了,分析我的约束布局和底部导航,检查性能问题。 (5认同)
  • @Big_Chair我想我通过完全删除它并使用(activity as AppCompatActivity?)?.setSupportActionBar(appbar)在需要的地方设置它来解决它 (2认同)

dc-*_*oxn 28

在片段的onCreate方法调用中:
((AppCompatActivity) getActivity()).getSupportActionBar().hide();
替换AppCompateActivity为您使用的活动类.

  • 离开该片段时,这不会再显示工具栏. (6认同)

Chr*_*ead 8

在片段中创建一个接口,并使用它来告诉父活动隐藏工具栏.

将这些行添加到您的片段:

private OnEventListener listener;

public interface OnEventListener {

    void hideToolbar() ;
}

public void setOnEventListener(OnEventListener listener) {

    this.listener = listener;
}
Run Code Online (Sandbox Code Playgroud)

在主要活动中创建片段后添加:

    myFragment.setOnEventListener(new MyFragment.OnEventListener() {
        @Override
        public void hideToolbar() {

            getSupportActionBar().hide();
        }
    });
Run Code Online (Sandbox Code Playgroud)

每当你需要隐藏工具栏时执行:

listener.hideToolbar();
Run Code Online (Sandbox Code Playgroud)

从你的片段里面.


小智 7

只需将这些方法添加到要禁用工具栏的片段中,并在片段中onStop()使其再次可见。

 @Override
    public void onResume() {
        super.onResume();
        ((AppCompatActivity)getActivity()).getSupportActionBar().hide();
    }

    @Override
    public void onStop() {
        super.onStop();
        ((AppCompatActivity)getActivity()).getSupportActionBar().show();
    }
Run Code Online (Sandbox Code Playgroud)


San*_*por 6

在 kotlin 中隐藏和显示supportActionBar如下:

override fun onResume() {
    super.onResume()
    (activity as AppCompatActivity).supportActionBar?.hide()
}

override fun onStop() {
    super.onStop()
    (activity as AppCompatActivity).supportActionBar?.show()
}
Run Code Online (Sandbox Code Playgroud)

如果您想拥有自己的自定义工具栏,请OncreateView设置:

//your Custom toolbar in xml
val toolbar = binding.toolbar
(activity as AppCompatActivity).setSupportActionBar(toolbar)
Run Code Online (Sandbox Code Playgroud)


San*_*eev 5

如果您使用的是new Navigationa Component,那么在您设置工具栏的位置写下此内容

navController.addOnDestinationChangedListener(new NavController.OnDestinationChangedListener() {
   @Override
   public void onDestinationChanged(@NonNull NavController controller,
           @NonNull NavDestination destination, @Nullable Bundle arguments) {
       if(destination.getId() == R.id.full_screen_destination) {
           toolbar.setVisibility(View.GONE);
           bottomNavigationView.setVisibility(View.GONE);
       } else {
           toolbar.setVisibility(View.VISIBLE);
           bottomNavigationView.setVisibility(View.VISIBLE);
       }
   }
});
Run Code Online (Sandbox Code Playgroud)

  • 这是 Android [官方文档](https://developer.android.com/guide/navigation/navigation-ui#listen_for_navigation_events) 解释 `addOnDestinationChangedListener` (2认同)

avi*_*per 5

只需使用 supportActionBar?.hide()supportActionBar?.show()。如果您使用的是导航控制器:

 navController.addOnDestinationChangedListener { controller, destination, arguments ->
        if (destination.id == R.id.loginSuccessFragment) {
            supportActionBar?.hide()
        } else {
            supportActionBar?.show()
        }
    }
Run Code Online (Sandbox Code Playgroud)