android在特定片段中隐藏工具栏
Posted
技术标签:
【中文标题】android在特定片段中隐藏工具栏【英文标题】:android hide toolbar in specific fragment 【发布时间】:2015-05-21 14:20:34 【问题描述】:我有一个不知道如何解决的问题。你如何在特定片段中隐藏工具栏,我已经在互联网上搜索,我发现是交流活动,片段会解决它。但这对我根本不起作用,这是我的代码:
main_activity:
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();
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);
提前致谢。
我在工具栏中有一个抽屉。
【问题讨论】:
***.com/questions/21504088/… 已经试过了,但还是不行。我必须将它放在片段的 onCreate() 或 onCreateView() 中吗? OnActivityCreated 或 onCreateView 像这样在onCreate()或onCreateView()里面:((ActionBarActivity)getActivity).getSupportActionBar().hide(); 它不起作用,还有其他想法吗? 【参考方案1】:将此代码放在要隐藏工具栏的片段中...
@Override
public void onResume()
super.onResume();
((AppCompatActivity)getActivity()).getSupportActionBar().hide();
@Override
public void onStop()
super.onStop();
((AppCompatActivity)getActivity()).getSupportActionBar().show();
【讨论】:
效果很好。我在***中尝试了很多答案。但没有任何效果。你拯救了我的一天。非常感谢。我也同意,这应该是正确的答案。 这太棒了。一直试图从片段中调用setVisibility ()
。 .hide()
和 .show()
在片段内完美工作。
小心使用时闪烁的问题!我失眠了 2 天,分析我的约束布局和底部导航,检查性能问题。
@nandu 你是怎么解决的?目前在约束布局和底部导航方面面临同样的问题,它在重置之前一直被拉伸,这看起来很可怕。
@Big_Chair 我想我解决了这个问题,方法是完全删除它并在需要的地方使用 (activity as AppCompatActivity?)?.setSupportActionBar(appbar)【参考方案2】:
在片段的onCreate
方法调用中:((AppCompatActivity) getActivity()).getSupportActionBar().hide();
将AppCompateActivity
替换为您使用的活动类。
已编辑:
您可以简单地使用onResume
方法调用hide()
和onStop
方法调用show()
,如某些cmets 中所建议的那样。
@Override
public void onResume()
super.onResume();
((AppCompatActivity)getActivity()).getSupportActionBar().hide();
@Override
public void onStop()
super.onStop();
((AppCompatActivity)getActivity()).getSupportActionBar().show();
【讨论】:
离开该片段时不会再次显示工具栏。 你需要显示它:getYourActivity().getSupportActionBar().show(); 正如@ODAXY 所说,您需要调用 getYourActivity().getSupportActionBar().show();在片段的 onDestroy() 方法上。这样应用程序的其余行为就会回滚。【参考方案3】:如果您使用的是新的Navigation 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);
);
对于 Kotlin,您可以执行以下操作:
navController.addOnDestinationChangedListener _, destination, _ ->
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);
【讨论】:
这里是android official doc解释addOnDestinationChangedListener
还有一点值得初学者注意,确保你remove the action bar before adding the toolbar
嘿。这确实是一个很好的解决方案。因为我需要在一些子片段上隐藏操作栏和导航视图【参考方案4】:
在fragment中创建一个接口,并用它告诉父activity隐藏工具栏。
将这些行添加到您的片段中:
private OnEventListener listener;
public interface OnEventListener
void hideToolbar() ;
public void setOnEventListener(OnEventListener listener)
this.listener = listener;
在主活动中创建片段后,添加:
myFragment.setOnEventListener(new MyFragment.OnEventListener()
@Override
public void hideToolbar()
getSupportActionBar().hide();
);
当你需要隐藏工具栏时执行:
listener.hideToolbar();
从你的片段内部。
【讨论】:
在您的帖子中添加一些代码以获得更好的答案质量。【参考方案5】:只需将这些方法添加到要禁用工具栏的片段中,并在片段的onStop()
中使其再次可见。
@Override
public void onResume()
super.onResume();
((AppCompatActivity)getActivity()).getSupportActionBar().hide();
@Override
public void onStop()
super.onStop();
((AppCompatActivity)getActivity()).getSupportActionBar().show();
【讨论】:
【参考方案6】:在kotlin中隐藏和显示supportActionBar
如下:
override fun onResume()
super.onResume()
(activity as AppCompatActivity).supportActionBar?.hide()
override fun onStop()
super.onStop()
(activity as AppCompatActivity).supportActionBar?.show()
如果您想拥有自己的自定义工具栏,请在OncreateView
中设置:
//your Custom toolbar in xml
val toolbar = binding.toolbar
(activity as AppCompatActivity).setSupportActionBar(toolbar)
【讨论】:
【参考方案7】:将此代码放入要隐藏工具栏的片段中...
在 onCreateView 或 onResume 中添加 this(((AppCompatActivity)getActivity()).getSupportActionBar().hide();)。
并在 onDestroy() 中执行此操作
@Override
public void onDestroy()
super.onDestroy();
((AppCompatActivity)getActivity()).getSupportActionBar().show();
【讨论】:
【参考方案8】:只需使用supportActionBar?.hide()
或supportActionBar?.show()
。
如果您使用的是 NavigationController:
navController.addOnDestinationChangedListener controller, destination, arguments ->
if (destination.id == R.id.loginSuccessFragment)
supportActionBar?.hide()
else
supportActionBar?.show()
【讨论】:
只要确保在onPostCreate(savedInstanceState: Bundle?)
而不是onCreate
或onPostCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?)
中调用它
这隐藏了操作栏,但是当返回其他屏幕时,布局现在位于操作栏后面,向上移动。【参考方案9】:
在 lifeCycle 方法中使用 getSupportActionBar().hide();
和 getSupportActionBar().show();
【讨论】:
getSupportActionBar() 无法从 Fragment 访问。如果需要,您需要调用 getActivity() 并进行转换。【参考方案10】:你可以试试。
@Override
public void onDestinationChanged(@NonNull NavController controller, @NonNull NavDestination destination, @Nullable Bundle arguments)
if (destination.getId() == R.id.nav_dashboard)
if (toolbar !=null)
toolbar.setVisibility(View.GONE);
else
toolbar.setVisibility(View.VISIBLE);
【讨论】:
以上是关于android在特定片段中隐藏工具栏的主要内容,如果未能解决你的问题,请参考以下文章