顶部菜单显示,并且不会消失

时间:2019-02-11 09:27:14

标签: android webview

我在Android Studio中创建了简单的Webview应用。显示虚拟键盘或显示“警报”对话框时,Android顶部菜单(包含时间,电池状态等)会出现,并且不会消失。

我尝试过的事情:

-添加      在styles.xml上 -添加

mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
}
};

提醒消息处理程序。它有助于处理警报消息,但不适用于虚拟键盘。

activity_fullscreen

<?xml version="1.0" encoding="utf-8"?>    

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"    
xmlns:tools="http://schemas.android.com/tools"    
android:layout_width="match_parent"    
android:layout_height="match_parent"    
android:layout_gravity="top"    
android:background="#0099cc"    
tools:context=".FullscreenActivity">    

<TextView    
android:id="@+id/fullscreen_content"    
android:layout_width="match_parent"    
android:layout_height="match_parent"    
android:gravity="center"    
android:keepScreenOn="true"    
android:text="@string/dummy_content"    
android:textColor="#33b5e5"    
android:textSize="50sp"    
android:textStyle="bold"    
/>    

<WebView    
android:id="@+id/mywebview"    
android:layout_width="match_parent"    
android:layout_height="match_parent"    
android:layout_gravity="top"    
android:foregroundGravity="top">    

</WebView>    

<LinearLayout    
android:id="@+id/fullscreen_content_controls"    
style="?metaButtonBarStyle"    
android:layout_width="match_parent"    
android:layout_height="match_parent"    
android:layout_gravity="bottom|center_horizontal"    
android:background="@color/black_overlay"    
android:orientation="horizontal"    
tools:ignore="UselessParent">    
</LinearLayout>    

</FrameLayout>'    

AndroidManifext

<?xml version="1.0" encoding="utf-8"?>    
<manifest xmlns:android="http://schemas.android.com/apk/res/android"    
package="com.example.crownalabugaru">    
<uses-permission android:name="android.permission.INTERNET" />    
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />    
<uses-feature android:name="android.hardware.sensor.accelerometer" android:required="true" />    
<application    
android:allowBackup="true"    
android:windowSoftInputMode="stateHidden|adjustPan"    
android:icon="@mipmap/ic_launcher"    
android:label="@string/app_name"    
android:roundIcon="@mipmap/ic_launcher_round"    
android:supportsRtl="true"    
android:theme="@android:style/Theme.Black.NoTitleBar">    
<activity    
android:name=".FullscreenActivity"    
android:configChanges="orientation|keyboardHidden|screenSize"    
android:label="@string/app_name"    
android:theme="@style/FullscreenTheme">    
<intent-filter>    
<action android:name="android.intent.action.MAIN" />    
<category android:name="android.intent.category.LAUNCHER" />    
</intent-filter>    
</activity>    
</application>    

styles.xml

<resources>    
<!— Base application theme. —>    
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">    
<!— Customize your theme here. —>    
<item name="colorPrimary">@color/colorPrimary</item>    
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>    
<item name="colorAccent">@color/colorAccent</item>    
</style>    
<style name="FullscreenTheme" parent="AppTheme">    
<item name="android:windowNoTitle">true</item>    
<item name="android:windowActionBar">false</item>    
<item name="colorPrimary">@color/colorPrimary</item>    
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>    
<item name="colorAccent">@color/colorAccent</item>    
<item name="android:windowActionBarOverlay">true</item>    
<item name="android:windowBackground">@null</item>    
<item name="metaButtonBarStyle">?android:attr/buttonBarStyle</item>    
<item    
name="metaButtonBarButtonStyle">?android:attr/buttonBarButtonStyle</item>    
</style>    
</resources>    

FullScreenActivity

public class FullscreenActivity extends AppCompatActivity {    
private SensorManager mSensorManager;    
private Sensor mAccelerometer;    
private ShakeDetector mShakeDetector;    

@Override    
public void onBackPressed() {    
new AlertDialog.Builder(this)    
.setTitle("Выйти из приложения?")    
.setMessage("Нельзя выйти из приложения")    
.setPositiveButton(android.R.string.ok, null)    
}    

public void shaker() {    
new AlertDialog.Builder(this)    
.setTitle("God mode")    
.setMessage("Godmode")    
.setPositiveButton(android.R.string.ok, null)    
.create().show();    
}    

//показ диалога при тряске    
public void showdialog() {    
AlertDialog.Builder builder = new AlertDialog.Builder(this);    
// Add the buttons    
builder.setTitle("Вы вошли в режим бога");    
builder.setMessage("Вы круты");    
builder.setPositiveButton("clear cache", new DialogInterface.OnClickListener() {    
public void onClick(DialogInterface dialog, int id) {    
// User clicked OK button    
//showdialog();    
WebView mywebview=(WebView) findViewById(R.id.mywebview);    
mywebview.clearCache(true);    
mywebview.clearHistory();    
//mywebview.reload();    
android.webkit.CookieManager.getInstance().removeAllCookie();    
mywebview.loadUrl("https://ya.ru");    
mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE    
| View.SYSTEM_UI_FLAG_FULLSCREEN    
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE    
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY    
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION    
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);    

}    
});    
builder.setNegativeButton("Fix.php", new DialogInterface.OnClickListener() {    
public void onClick(DialogInterface dialog, int id) {    
// User cancelled the dialog    
WebView mywebview=(WebView) findViewById(R.id.mywebview);    
mywebview.loadUrl("https://mail.ya.ru/");    
getSupportActionBar().hide();    
mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE    
| View.SYSTEM_UI_FLAG_FULLSCREEN    
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE    
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY    
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION    
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);    

}    
});    
// Set other dialog properties    

// Create the AlertDialog    
AlertDialog dialog = builder.create();    
dialog.show();    
}    

/**    
* Whether or not the system UI should be auto-hidden after    
* {@link #AUTO_HIDE_DELAY_MILLIS} milliseconds.    
*/    
private static final boolean AUTO_HIDE = true;    

/**    
* If {@link #AUTO_HIDE} is set, the number of milliseconds to wait after    
* user interaction before hiding the system UI.    
*/    
private static final int AUTO_HIDE_DELAY_MILLIS = 3000;    

/**    
* Some older devices needs a small delay between UI widget updates    
* and a change of the status and navigation bar.    
*/    
private static final int UI_ANIMATION_DELAY = 300;    
private final Handler mHideHandler = new Handler();    
private View mContentView;    
private final Runnable mHidePart2Runnable = new Runnable() {    
@SuppressLint("InlinedApi")    
@Override    
public void run() {    
// Delayed removal of status and navigation bar    

// Note that some of these constants are new as of API 16 (Jelly Bean)    
// and API 19 (KitKat). It is safe to use them, as they are inlined    
// at compile-time and do nothing on earlier devices.    
mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE    
| View.SYSTEM_UI_FLAG_FULLSCREEN    
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE    
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY    
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION    
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);    
}    
};    
private View mControlsView;    
private final Runnable mShowPart2Runnable = new Runnable() {    
@Override    
public void run() {    
// Delayed display of UI elements    
ActionBar actionBar = getSupportActionBar();    
if (actionBar != null) {    
actionBar.show();    
}    
mControlsView.setVisibility(View.VISIBLE);    
}    
};    
private boolean mVisible;    
private final Runnable mHideRunnable = new Runnable() {    
@Override    
public void run() {    
hide();    
}    
};    
/**    
* Touch listener to use for in-layout UI controls to delay hiding the    
* system UI. This is to    
prevent the jarring behavior of controls going away    
* while interacting with activity UI.    
*/    
private final View.OnTouchListener mDelayHideTouchListener = new View.OnTouchListener() {    
@Override    
public boolean onTouch(View view, MotionEvent motionEvent) {    
if (AUTO_HIDE) {    
delayedHide(AUTO_HIDE_DELAY_MILLIS);    
}    
return false;    
}    
};    

@Override    
protected void onCreate(Bundle savedInstanceState) {    
super.onCreate(savedInstanceState);    
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);    
mAccelerometer = mSensorManager    
.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);    
mShakeDetector = new ShakeDetector();    
mShakeDetector.setOnShakeListener(new ShakeDetector.OnShakeListener() {    

@Override    
public void onShake(int count) {    
/*    
* The following method, "handleShakeEvent(count):" is a stub //    
* method you would use to setup whatever you want done once the    
* device has been shook.    
*/    

showdialog();    

}    
});    

setContentView(R.layout.activity_fullscreen);    

mVisible = true;    
mControlsView = findViewById(R.id.fullscreen_content_controls);    
mContentView = findViewById(R.id.fullscreen_content);    

// Set up the user interaction to manually show or hide the system UI.    
mContentView.setOnClickListener(new View.OnClickListener() {    
@Override    
public void onClick(View view) {    
toggle();    
}    
});    

WebView mywebview=(WebView) findViewById(R.id.mywebview);    
WebSettings websettings=mywebview.getSettings();    
websettings.setJavaScriptEnabled(true);    
mywebview.setWebViewClient(new WebViewClient(){    
public boolean shouldOverrideUrlLoading(WebView view, String url) {    
Intent intent = null;    

String url2="https://ya.ru/";    
// all links with in ur site will be open inside the webview    
//links that start ur domain example(http://www.example.com/)    
if (url != null && url.startsWith(url2)){    
return false;    
}    
// all links that points outside the site will be open in a normal android browser    
else {    
view.getContext().startActivity(    
new Intent(Intent.ACTION_VIEW, Uri.parse(url)));    
return true;    
}    
}    
});    
mywebview.loadUrl("https://ya.ru");    

}    

@Override    
protected void onPostCreate(Bundle savedInstanceState) {    
super.onPostCreate(savedInstanceState);    

// Trigger the initial hide() shortly after the activity has been    
// created, to briefly hint to the user that UI controls    
// are available.    
delayedHide(100);    
}    

private void toggle() {    
if (mVisible) {    
hide();    
} else {    
show();    
}    
}    

private void hide() {    
// Hide UI first    
ActionBar actionBar = getSupportActionBar();    
if (actionBar != null) {    
actionBar.hide();    
}    
mControlsView.setVisibility(View.GONE);    
mVisible = false;    

// Schedule a runnable to remove the status and navigation bar after a delay    
mHideHandler.removeCallbacks(mShowPart2Runnable);    
mHideHandler.postDelayed(mHidePart2Runnable, UI_ANIMATION_DELAY);    
}    

@SuppressLint("InlinedApi")    
private void show() {    
// Show the system bar    
mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN    
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);    
mVisible = true;    

// Schedule a runnable to display UI elements after a delay    
mHideHandler.removeCallbacks(mHidePart2Runnable);    
mHideHandler.postDelayed(mShowPart2Runnable, UI_ANIMATION_DELAY);    
}    

/**    
* Schedules a call to hide() in delay milliseconds, canceling any    
* previously scheduled calls.    
*/    
private void delayedHide(int delayMillis) {    
mHideHandler.removeCallbacks(mHideRunnable);    
mHideHandler.postDelayed(mHideRunnable, delayMillis);    
}    

@Override    
public void onResume() {    
super.onResume();    
// Add the following line to register the Session Manager Listener onResume    
mSensorManager.registerListener(mShakeDetector, mAccelerometer, SensorManager.SENSOR_DELAY_UI);    
}    

@Override    
public void onPause() {    
// Add the following line to unregister the Sensor Manager onPause    
mSensorManager.unregisterListener(mShakeDetector);    
super.onPause();    
}    

}

0 个答案:

没有答案