我想制作一个红色的覆盖窗口。你可以在下面看到我的代码。当我单击按钮时它不执行任何操作。哪里有问题?我怎样才能解决这个问题。请提出建议
谢谢你!
public class MainActivity extends AppCompatActivity {
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, OverlayLayer.class);
startService(intent);
}
});
}
}
public class OverlayLayer extends Service {
public IBinder onBind(Intent ıntent) {
return null;
}
private LinearLayout mLayout;
private WindowManager mManager;
@Override
public void onCreate() {
super.onCreate();
mManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
mLayout = new LinearLayout(this);
LinearLayout.LayoutParams mParams=new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT);
mLayout.setBackgroundColor(Color.rgb(255,255,0));
mLayout.setLayoutParams(mParams);
WindowManager.LayoutParams parameters=new WindowManager.LayoutParams(400,150,WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,PixelFormat.TRANSLUCENT);
parameters.x=0;
parameters.y=0;
parameters.gravity = Gravity.CENTER;
mManager.addView(mLayout,parameters);
}
}
首先将您的服务添加到 AndroidManifest 中,将其设置为“静态”,因为它位于您的 MainActivity.java 文件中:
<service android:name=".MainActivity$OverlayLayer"/>
//make class static
public static class OverlayLayer extends Service {
...
}
或者创建一个独立的(与 MainActivity 分开的)类,例如 OverlayLayer.java 并将其添加到 Manifest 文件中,例如:
<service android:name=".OverlayLayer"/>
之后使用以下代码在窗口中添加视图:
在窗口上添加视图的标志取决于操作系统,因此以下代码将使其在每个操作系统上工作:
In 覆盖层班级 :
@Override
public void onCreate() {
super.onCreate();
mManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
mLayout = new LinearLayout(this);
LinearLayout.LayoutParams mParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT);
mLayout.setBackgroundColor(Color.rgb(255, 255, 0));
mLayout.setLayoutParams(mParams);
addToWindow(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
}
public void addToWindow(int LAYOUT_FLAG) {
WindowManager.LayoutParams parameters = new WindowManager.LayoutParams(400, 150, LAYOUT_FLAG, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT);
parameters.x = 0;
parameters.y = 0;
parameters.gravity = Gravity.CENTER;
try {
mManager.addView(mLayout, parameters);
} catch (Exception e) {
if (LAYOUT_FLAG == WindowManager.LayoutParams.TYPE_SYSTEM_ALERT) {
addToWindow(WindowManager.LayoutParams.TYPE_TOAST);
}
if (LAYOUT_FLAG == WindowManager.LayoutParams.TYPE_TOAST) {
addToWindow(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY);
}
if (LAYOUT_FLAG == WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY) {
addToWindow(WindowManager.LayoutParams.TYPE_PHONE);
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)