开发一个应用程序,当收到调用时应该出现浮动组件,组件将有几个按钮来执行必要的操作。 我试过以下。 我实现了一个弹出窗口,主要活动是半透明的。当这个组件弹出时,我能够在屏幕上移动它,但由于活动是半透明的,我无法执行任何其他活动。
在这里你可以看到弹出窗口,我可以移动它,但我无法在后台滚动menudrawer。我如何以这样的方式实现我可以执行两种操作,即在弹出窗口和后台屏幕上。
我的代码
`public class MainActivity extends Activity {
int mCurrentX;
int mCurrentY;
private float mDx;
private float mDy;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
final View cv = new View(this);
TextView tv = new TextView(this);
tv.setBackgroundColor(0xffeeeeee);
tv.setTextColor(0xff000000);
tv.setTextSize(24);
tv.setText("click me\nthen drag me");
tv.setPadding(8, 8, 8, 8);
final PopupWindow mPopup = new PopupWindow(tv, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
OnTouchListener otl = new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
int action = event.getAction();
if (action == MotionEvent.ACTION_DOWN) {
mDx = mCurrentX - event.getRawX();
mDy = mCurrentY - event.getRawY();
} else
if (action == MotionEvent.ACTION_MOVE) {
mCurrentX = (int) (event.getRawX() + mDx);
mCurrentY = (int) (event.getRawY() + mDy);
mPopup.update(mCurrentX, mCurrentY, -1, -1);
}
return true;
}
};
tv.setOnTouchListener(otl);
mCurrentX = 20;
mCurrentY = 50;
cv.post(new Runnable() {
@Override
public void run() {
mPopup.showAtLocation(cv, Gravity.NO_GRAVITY, mCurrentX, mCurrentY);
}
});
}
}`
清单
`<application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
<activity android:name=".MainActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:label="@string/app_name"
android:configChanges="orientation|screenSize"
android:windowSoftInputMode="adjustResize|stateAlwaysHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity
android:name="PopupMainActivity"
android:label="@string/app_name"
android:theme="@style/Theme.FloatingWindow.Popup"
android:configChanges="orientation|screenSize"
android:windowSoftInputMode="adjustResize|stateAlwaysHidden"
android:clearTaskOnLaunch="true"
android:exported="true"
tools:ignore="ExportedActivity" />
</application>`
请帮我解决这个问题。我想在整体上实现一个小部件组件。谢谢!
答案 0 :(得分:1)
您必须启动前台服务并使用WindowManager在其他所有内容上绘制,管理您的弹出窗口位置,大小等...
WindowManger windowManager = Context.getSystemService(Context.WINDOW_SERVICE);
您还必须添加此权限&#34; android.permission.SYSTEM_ALERT_WINDOW&#34;到你的清单。
更简单的解决方案是使用名为StandOut的库,它基本上处理了我上面提到的所有内容,并提供了额外的功能,如: