Код
<?xml version = "1.0" encoding = "utf-8"?>
<RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"
android:layout_width = "match_parent"
android:background = "@null"
android:id = "@+id/relativelayout"
android:layout_height = "match_parent"
xmlns:app = "http://schemas.android.com/apk/res-auto">
<Button
android:id = "@+id/button5"
android:layout_width = "70dp"
android:layout_height = "70dp"
android:layout_centerVertical = "true"
android:layout_marginEnd = "9dp"
android:layout_toStartOf = "@+id/button12"
android:background = "@drawable/service_button_background"
android:text = "Akash" />
<Button
android:id = "@+id/button6"
android:layout_width = "70dp"
android:layout_height = "70dp"
android:layout_above = "@+id/button5"
android:layout_alignStart = "@+id/button7"
android:background = "@drawable/service_button_background"
android:text = "Sanjana" />
<Button
android:id = "@+id/button7"
android:layout_width = "70dp"
android:layout_height = "70dp"
android:layout_alignStart = "@+id/button5"
android:layout_below = "@+id/button5"
android:layout_marginStart = "19dp"
android:background = "@drawable/service_button_background"
android:text = "Sahana" />
<Button
android:id = "@+id/button12"
android:layout_width = "70dp"
android:layout_height = "70dp"
android:layout_above = "@+id/button5"
android:layout_alignParentEnd = "true"
android:layout_marginBottom = "30dp"
android:background = "@drawable/service_button_background"
android:text = "Akash" />
<Button
android:layout_width = "70dp"
android:background = "@drawable/service_button_background"
android:text = "Akash"
android:layout_height = "70dp"
android:layout_alignParentEnd = "true"
android:layout_alignTop = "@+id/button7"
android:layout_marginTop = "30dp"
android:id = "@+id/button11" />
Код
public class FloatingWindow extends Service{
WindowManager wm;
RelativeLayout ll;
LayoutInflater li;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
final View myview;
li = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
wm = (WindowManager) getSystemService(WINDOW_SERVICE);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.TYPE_INPUT_METHOD |
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,// | WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.TRANSLUCENT);
/////////////////////////Another params
params = new WindowManager.LayoutParams(
750,1250,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.RIGHT | Gravity.CENTER;
myview = li.inflate(R.layout.service_pie, null); // your layout here
wm.addView(myview, params);
params.x = 0;
params.y = 0
}
@Override
public void onDestroy() {
super.onDestroy();
stopSelf();
}
Я сделал основной фон макетов нулевым, но он все еще там ... например, как мне его удалить ... Это означает, что у меня есть эта служба, и когда я запускаю эту службу, это действие будет раздуто ... Но мне нужны только кнопки быть раздутым, а не вся деятельность ... Как мне этого добиться .................................. .......................................
Пожалуйста, разместите здесь соответствующий код, чтобы в ближайшее время получить рабочее решение вашей проблемы :)
Посмотрите отредактированный вопрос, пожалуйста, @Quicklearner
каково текущее поведение, можно ли добавить с ним снимок экрана?
я опубликовал ответ




Создайте стиль на вашем styles.xml
<?xml version = "1.0" encoding = "utf-8"?>
<resources>
<style name = "Theme.Transparent" parent = "Theme.AppCompat.NoActionBar">
<item name = "android:windowIsTranslucent">true</item>
<item name = "android:windowBackground">@android:color/transparent</item>
<item name = "android:windowContentOverlay">@null</item>
<item name = "android:windowNoTitle">true</item>
<item name = "android:windowIsFloating">true</item>
<item name = "android:backgroundDimEnabled">false</item>
</style>
</resources>
Установите его в свой тег активности в manifest.xml
<activity android:name = ".YourActivity" android:theme = "@style/Theme.Transparent">
...
</activity>
Не устанавливайте ориентацию при плавании. Поскольку это вызовет сбой на устройствах Oreo.
Выход
Обновлять
Начните свою деятельность с чистого верхнего стека из службы.
Intent intent1 = new Intent(this, MainActivity.class);
intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent1);
Обновление 2
Если вы хотите поместить какое-либо наложение на экран Android, поместите SYSTEM_ALERT_WINDOW в манифест.
<uses-permission android:name = "android.permission.SYSTEM_ALERT_WINDOW"/>
Отредактировал ответ, попробуйте parent = "Theme.AppCompat.NoActionBar" по теме.
это не сработает в любом случае, он хочет показать только некоторые виджеты с использованием класса обслуживания, а класс обслуживания не является классом активности, вы просите установить стиль для класса активности, который считается классом обслуживания, который определенно не будет работать
@Quicklearner Вы когда-нибудь раздували макет из службы, это делается с помощью действия или диалогового окна. Так что это решение будет работать. Заказчик начинает деятельность из службы.
@Quicklearner Из вопроса явно кажется, что он хочет надуть Activity (прозрачный) при запуске службы. А также как класс обслуживания будет иметь расположение?
Он хочет показать какой-нибудь виджет, используя класс обслуживания, а активность не будет работать как класс обслуживания @VirRajpurohit
@Quicklearner Подскажите, пожалуйста, способ показать какой-нибудь макет из класса Service без использования Dialog / Activity, возможно, я этого не узнал.
@MichelleKinsten Как вы показываете свой макет? Это действие или диалог?
узнайте больше об этом SYSTEM_ALERT_WINDOW, вы получите лучший способ
будет ли ваш код работать, когда запущено другое приложение?
фон равен нулю, и да, это нормально ... но я не могу щелкнуть что-либо в фоновом режиме, потому что активность все еще существует наверху ... просто цвет прозрачный
конечно, я жду, чтобы он опубликовал соответствующий код, и я здесь, чтобы научиться делиться знаниями, не указывая, если бы я этого хотел, я бы проголосовал за ваш ответ :)
"фон пуст, и да, это нормально ... но я не могу щелкнуть что-либо в фоновом режиме, потому что активность все еще существует наверху ... только цвет прозрачный" Видите это, о чем я говорил, это не сработает ни на одном другом приложение или на главном экране, потому что активность запущена и использует всю область экрана :)
"мы всегда игнорируем SYSTEM_ALERT_WINDOW, потому что это опасное разрешение. Также, когда это можно сделать с помощью Activity, почему мы добавляем опасное разрешение. И SYSTEM_ALERT_WINDOW не является классом, о котором я просил, поскольку мы делаем Dialog, о котором я уже сказал, что вы может отображать макет из службы с помощью Activity / Dialog »- это не неправильно или проблема с его использованием, приложение для обмена сообщениями Facebook использует системное предупреждение для отображения всплывающего окна чата. Просто к сведению :)
В любом случае я загружу код в свой репозиторий git очень скоро для этого требования
@Quicklearner Он хочет создать сервис плавающих виджетов, вы правы, @_Michelle видит это stackoverflow.com/a/4482868/6891563
@MichelleKinsten см. Обновленный ответ. Пожалуйста, проверьте это также simpleifiedcoding.net/android-floating-widget-tutorial
Просто добавьте это в свой манифест.
<activity
android:name = ".YOUR_ACTIVITY"
android:theme = "@android:style/Theme.Translucent.NoTitleBar" />
В дополнение к этому набору
android:background = "@android:color/transparent"
к вашему корневому элементу
Попробуйте это решение
В manifest добавьте это
<uses-permission android:name = "android.permission.SYSTEM_ALERT_WINDOW" />
Затем в вашей пусковой установке или любом базовом действии добавьте эти разрешения
private static final int CODE_DRAW_OVER_OTHER_APP_PERMISSION = 2084;
В onCreate() добавьте это
if (SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, CODE_DRAW_OVER_OTHER_APP_PERMISSION);
//finish();
}
Обработка разрешения запроса
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CODE_DRAW_OVER_OTHER_APP_PERMISSION) {
if (SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, CODE_DRAW_OVER_OTHER_APP_PERMISSION);
} else {
// do stuff here
}
}
}
Затем запустите свой service и сделайте это в классе service, проверьте ссылку ниже и выполните свои действия соответственно
https://medium.com/@kevalpatel2106/create-chat-heads-like-facebook-messenger-32f7f1a62064
Еще один вопрос, если это не проблема ... могу ли я добавить такую функцию, как ... Служба должна открываться, когда я касаюсь экрана, и должна быть открыта, пока мой палец касается экрана, и должна останавливаться, когда я выхожу из нее ???
Я думаю, вы имеете в виду, что хотите показывать всплывающее окно, пока пользователь касается экрана, а затем снова сделать его невидимым?
даааа ... есть способ сделать это
по моему, вы можете сделать это только в своем приложении, например, играть с прикосновением, приземлением и т. д., а не когда приложение находится в фоновом режиме, я не уверен, что честно, подождите, я проверю это для вас
просто разместите здесь свой класс обслуживания, я помогу с этим :)