我一直在收到一些小米设备(例如Mi 2,运行API级别21)没有显示叠加层的报告.我的应用针对API 23.
有几个 帖子在那里对此.似乎MIUI设备在安装时不启用此权限(与其他Marshmallow之前的设备不同).
不幸的是,Settings.canDrawOverlays()仅适用于Android 23+.
new Intent("android.settings.action.MANAGE_OVERLAY_PERMISSION", packageName)但我没办法测试这个.当我尝试使用 XML 在覆盖层中插入 Compose(在其他应用程序上绘制)时,出现以下异常:
java.lang.IllegalStateException: ViewTreeLifecycleOwner not found from androidx.constraintlayout.widget.ConstraintLayout{d596746 V.E...... ......ID 0,0-0,0}
Run Code Online (Sandbox Code Playgroud)
但如果没有覆盖(在活动中),它可以正常工作。有谁知道如何解决吗?我已经将 AppCompat 库更新到 1.3.0
我的 XML 代码:
java.lang.IllegalStateException: ViewTreeLifecycleOwner not found from androidx.constraintlayout.widget.ConstraintLayout{d596746 V.E...... ......ID 0,0-0,0}
Run Code Online (Sandbox Code Playgroud)
我的叠加代码:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black">
<androidx.compose.ui.platform.ComposeView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/compose_view"/>
</androidx.constraintlayout.widget.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud) 我有2个视图:视图A和视图B.视图A被渲染并具有输入文本值的操作.我正在显示叠加视图 - 在此顶部查看B. 我希望View A上的操作被禁用,但它们没有,我仍然可以输入View A上的输入字段.如何禁用它?
我想制作一个覆盖整个屏幕的覆盖屏幕,包括状态栏和导航栏。
我花了几个小时的谷歌搜索/研究仍然没有运气。
这是我的代码:
MainActivity.java(启动器):
package com.blogspot.diannaoxiaobai.myapplication;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startActivity(new Intent(this, Main2Activity.class));
}
}
Run Code Online (Sandbox Code Playgroud)
活动_main.xml :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.blogspot.diannaoxiaobai.myapplication.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
Main2Activity.java(由MainActivity启动):
package com.blogspot.diannaoxiaobai.myapplication;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
public class Main2Activity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) …Run Code Online (Sandbox Code Playgroud) android overlay android-theme android-overlay android-statusbar
我对 Android 上的辅助功能不太熟悉。在学习课程和文档时,我在课堂TYPE_ACCESSIBILITY_OVERLAY上遇到了这种情况WindowManager。
文档说(仅相关文字)
例如,如果存在可触摸的全屏辅助功能覆盖层,则辅助功能服务可以对其下方的窗口进行内省,即使它们被可触摸窗口覆盖。
因此,我着手实现这一目标,即全屏辅助功能叠加层,并尝试内省其下方的窗口
扩展AccessibilityService并在调用时添加了我的全屏覆盖onServiceConnected(添加覆盖的灵感来自这里)
@Override
protected void onServiceConnected() {
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
FrameLayout mLayout = new FrameLayout(this);
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.type = WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY;
lp.format = PixelFormat.TRANSLUCENT;
lp.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.MATCH_PARENT;
lp.gravity = Gravity.TOP;
wm.addView(mLayout, lp);
mLayout.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// Here I'm getting the touch events on the overlay …Run Code Online (Sandbox Code Playgroud) 我想制作一个应用程序,其中会有一个水印,该水印将显示在每个活动中,包括片段(如果存在)。我想以编程方式完成此操作,而不使用任何 XML 来减少冗余和样板代码。其主要目的是,如果我与其他人共享 APK,那么他就无法窃取我的 APK,因为它到处都包含奇怪的水印。