我将导航栏隐藏在一个活动中,并且工作正常。
我的问题是是否可以在其他活动中调用此方法,还是应该将其复制并粘贴两次?
public void hideNavigationBar() {
int currentApiVersion;
currentApiVersion = android.os.Build.VERSION.SDK_INT;
final int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
// This work only for android 4.4+
if(currentApiVersion >= Build.VERSION_CODES.KITKAT)
{
getWindow().getDecorView().setSystemUiVisibility(flags);
// Code below is to handle presses of Volume up or Volume down.
// Without this, after pressing volume buttons, the navigation bar will
// show up and won't hide
final View decorView = getWindow().getDecorView();
decorView
.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener()
{
@Override
public void onSystemUiVisibilityChange(int visibility)
{
if((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0)
{
decorView.setSystemUiVisibility(flags);
}
}
});
}
}
我尝试通过创建活动的一个实例在另一个活动中调用相同的方法
MainActivity mainActivity = new MainAcitivity();
mainAcitvity.hideNavigationBar();
,但会抛出
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.getDecorView()' on a null object reference
答案 0 :(得分:6)
创建BaseActivity()
,并用Activity
扩展其他BaseActivity
。并将您的常用方法放在BaseActivity
中。然后,您可以从任何Activity
进行呼叫。
答案 1 :(得分:0)
作为创建基类的替代方法:
public static void hideNavigationBar(View decorView) {
final int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
if(SDK_INT >= KITKAT) {
decorView.setSystemUiVisibility(flags);
decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
if((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
decorView.setSystemUiVisibility(flags);
}
}
});
}
}
使用情况(在任何“活动”中):
hideNavigationBar(getWindow().getDecorView());
答案 2 :(得分:0)
是的,创建扩展Activity.java或AppcompatActivity.java类的父活动类肯定会为您提供帮助。
此父活动可以在您的两个活动中扩展。
class ParentActivity extends Activity{
public void yourMethod(){
}
}
//Later
class FirstActivity extends ParentActivity {
}
class SecondActivity extends ParentActivity {
}
答案 3 :(得分:0)
首先,您必须创建父活动。
public class ParentActivity extends Activity {
public void yourMethod() {
//implement your method here
}
}
之后,您只需要创建活动即可:
class Activity1 extends ParentActivity {
//call the override method
}
class Activity2 extends ParentActivity {
//call the override method
}
如果有碎片,您可以用相同的方法解决此问题