Tôi đang cố gắng ngăn chặn mở rộng thanh trạng thái và tôi đã sử dụng một số ví dụ mà mọi người đang cố gắng ghi đè nút trang chủ. Tất cả các giải pháp đều hướng đến việc sử dụng WindowManager.LayoutParams.TYPE_KEYGUARD
, tôi đọc here, rằng nếu TYPE_KEYGUARD được sử dụng, mục tiêu tối thiểu phải nhỏ hơn 14. TYPE_KEYGUARD không được chấp nhận, vì vậy tôi cũng sẽ cần một công việc để thực hiện việc này. Nó hoàn toàn bị xóa khỏi SDK 21.Mục tiêu tối thiểu phải nhỏ hơn 14 khi WindowManager.LayoutParams.TYPE_KEYGUARD sử dụng
CÂU HỎI: Giải pháp thay thế để tôi có thể ghi đè thanh trạng thái và giữ mục tiêu là 19 là gì?
tôi có một dự án thiết lập cho xây dựng như thế này:
android {
compileSdkVersion 17
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "com.mycompany.ediary"
minSdkVersion 12
targetSdkVersion 12
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
Tôi đã thử những lời khuyên here vô ích. Tôi muốn targetSdkVersion là 19, nhưng nếu tôi thay đổi nó thành 19, tôi nhận được IllegalArgumentException. StackTrace:
11-26 13:41:57.963 28667-28667/com.assistek.ediary E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.assistek.ediary, PID: 28667
java.lang.IllegalArgumentException: Window type can not be changed after the window is added.
at android.os.Parcel.readException(Parcel.java:1550)
at android.os.Parcel.readException(Parcel.java:1499)
at android.view.IWindowSession$Stub$Proxy.relayout(IWindowSession.java:903)
at android.view.ViewRootImpl.relayoutWindow(ViewRootImpl.java:5301)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1507)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5885)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
at android.view.Choreographer.doCallbacks(Choreographer.java:580)
at android.view.Choreographer.doFrame(Choreographer.java:550)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
My onCreate
:
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
...
}
My onAttachedToWindow
:
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
if (!GlobalVars.testing) {
GlobalVars.preventStatusBarExpansion(this);
}
}
Và mã có thể ngăn chặn sự bành trướng trên thanh trạng thái (chuyển thể từ this post):
public static void preventStatusBarExpansion(Context context) {
WindowManager manager = ((WindowManager) context.getApplicationContext()
.getSystemService(Context.WINDOW_SERVICE));
WindowManager.LayoutParams localLayoutParams = new WindowManager.LayoutParams();
localLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
localLayoutParams.gravity = Gravity.TOP;
localLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|
// this is to enable the notification to recieve touch events
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
// Draws over status bar
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
localLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
localLayoutParams.height = (int) (50 * context.getResources()
.getDisplayMetrics().scaledDensity);
localLayoutParams.format = PixelFormat.TRANSPARENT;
customViewGroup view = new customViewGroup(context);
manager.addView(view, localLayoutParams);
}
public static class customViewGroup extends ViewGroup {
public customViewGroup(Context context) {
super(context);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
Log.v("customViewGroup", "**********Intercepted");
return true;
}
}
Hãy thử bài này: https://stackoverflow.com/ câu hỏi/19920052/vô hiệu hóa-thông báo-panel-từ-được-kéo xuống – DH28