Java android在特定片段中隐藏工具栏
我有一个我不知道如何解决的问题。如何将工具栏隐藏在一个特定的片段中,我已经在互联网上搜索过了,我发现的是交流活动和片段可以解决这个问题。但这对我根本不起作用,以下是我的代码: 主要活动:Java android在特定片段中隐藏工具栏,java,android,android-fragments,toolbar,Java,Android,Android Fragments,Toolbar,我有一个我不知道如何解决的问题。如何将工具栏隐藏在一个特定的片段中,我已经在互联网上搜索过了,我发现的是交流活动和片段可以解决这个问题。但这对我根本不起作用,以下是我的代码: 主要活动: public class MainActivity extends ActionBarActivity implements like_frag.OnHideToolbar{ .... public void onHidingToolbar(int position){ Toolbar to
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();
}
}
比如_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);
}
}
提前谢谢
我在工具栏里有一个抽屉
在片段的
onCreate
方法调用中:((AppCompatActivity)getActivity()).getSupportActionBar().hide()代码>
用您使用的活动类替换AppCompatieActivity
已编辑:
您可以简单地使用onResume
方法调用hide()
,使用onStop
方法调用show()
,正如一些注释中所建议的那样
@覆盖
恢复时公开作废(){
super.onResume();
((AppCompatActivity)getActivity()).getSupportActionBar().hide();
}
@凌驾
公共void onStop(){
super.onStop();
((AppCompatActivity)getActivity()).getSupportActionBar().show();
}
在片段中创建一个界面,并使用它告诉父活动隐藏工具栏
将这些行添加到片段中:
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();
从片段内部。将此代码放入要隐藏工具栏的片段中
@Override
public void onResume() {
super.onResume();
((AppCompatActivity)getActivity()).getSupportActionBar().hide();
}
@Override
public void onStop() {
super.onStop();
((AppCompatActivity)getActivity()).getSupportActionBar().show();
}
只需将这些方法添加到要禁用工具栏的片段中,并在片段的onStop()
中使其再次可见即可
@Override
public void onResume() {
super.onResume();
((AppCompatActivity)getActivity()).getSupportActionBar().hide();
}
@Override
public void onStop() {
super.onStop();
((AppCompatActivity)getActivity()).getSupportActionBar().show();
}
将此代码放入要隐藏工具栏的片段中…
将此(((AppCompatActivity)getActivity()).getSupportActionBar().hide();)添加到onCreateView或onResume中
在onDestroy()中执行此操作
在kotlin中隐藏并显示supportActionBar
,如下所示:
override fun onResume() {
super.onResume()
(activity as AppCompatActivity).supportActionBar?.hide()
}
override fun onStop() {
super.onStop()
(activity as AppCompatActivity).supportActionBar?.show()
}
如果您想拥有自己的自定义工具栏,请在OncreateView
set中:
//your Custom toolbar in xml
val toolbar = binding.toolbar
(activity as AppCompatActivity).setSupportActionBar(toolbar)
如果您正在使用新工具栏,请在设置工具栏时添加此选项
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);
}
}
使用getSupportActionBar().hide()代码>和getSupportActionBar().show()代码>在生命周期方法中只需使用supportActionBar?.hide()
或supportActionBar?.show()
。
如果您使用的是NavigationController:
navController.addOnDestinationChangedListener { controller, destination, arguments ->
if (destination.id == R.id.loginSuccessFragment) {
supportActionBar?.hide()
} else {
supportActionBar?.show()
}
}
已经试过了,但不起作用。我必须把它放在片段的onCreate()或onCreateView()中吗?OnActivityCreated或onCreateView类似于onCreate()或onCreateView()中的onCreateView:((ActionBarActivity)getActivity.getSupportActionBar().hide();它不起作用,还有其他想法吗?请在帖子中添加一些代码,以提高回答质量。离开该片段时,这不会再次显示工具栏。您需要显示它:getYourActivity().getSupportActionBar().show();正如@ODAXY所说,您需要调用getYourActivity().getSupportActionBar().show();在片段的onDestroy()方法上。这样,应用程序的其余行为就可以回滚了。它工作得非常好。我在stackoverflow中尝试了许多答案。但什么都没用。你救了我一天。谢谢。我也同意,这应该是正确的答案。这太棒了。一直试图从片段中调用它的setVisibility()
.hide()
和.show()
在片段中可以完美地工作。使用此选项时,请注意闪烁问题!我连续两天失眠,分析我的约束布局和底部导航,检查性能问题。@nandu你是如何解决的?当前,约束布局和底部导航面临同样的问题,它在重置之前不断拉长,这看起来很可怕。@Big_Chair我想我解决了这个问题,将它完全移除,并使用(activity as AppCompatActivity?)将其设置在需要的位置。setSupportActionBar(appbar)以下是Android解释addOnDestinationChangedListener
对于初学者来说,确保getSupportActionBar()无法从Fragment访问也是值得注意的。如果需要,您需要调用getActivity()并进行强制转换。只需确保在onPostCreate(savedInstanceState:Bundle?
中调用此函数,而不是onCreate
或onPostCreate(savedInstanceState:Bundle?、persistentState:PersistableBundle?
这会隐藏操作栏,但返回其他屏幕时,布局现在位于操作栏后面,向上移动。
navController.addOnDestinationChangedListener { controller, destination, arguments ->
if (destination.id == R.id.loginSuccessFragment) {
supportActionBar?.hide()
} else {
supportActionBar?.show()
}
}