Я хочу разместить невидимую кнопку за вырезом дисплея в строке состояния. Я хочу отображать пользователю не уведомление, как другие коды, а невидимую кнопку в строке состояния. Я добавил код для определения размера и положения выреза дисплея, но не могу разместить кнопку на строка состояния, расположенная сразу за вырезом дисплея. Я хочу, чтобы пользователь нажимал на вырез камеры, и за вырезом камеры должна быть невидимая кнопка.
Я использовал приведенный ниже код. В этом случае кнопка видна в строке состояния, но на нее нельзя нажать.
import android.app.Service;
import android.content.Intent;
import android.graphics.PixelFormat;
import android.os.Build;
import android.os.IBinder;
import android.view.Gravity;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.Toast;
public class ButtonOverlayService extends Service {
private WindowManager windowManager;
private Button overlayButton;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
// Create WindowManager and set LayoutParams for the overlay button
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ?
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY :
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
| WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR
| WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSLUCENT
);
// Set gravity to the top of the screen including the status bar
params.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL;
params.x = 0;
params.y = 0;
// Inflate the overlay button layout
overlayButton = new Button(this);
overlayButton.setText("Button");
overlayButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Handle button click
Toast.makeText(ButtonOverlayService.this, "Button Clicked", Toast.LENGTH_SHORT).show();
}
});
// Add the button to the window manager
windowManager.addView(overlayButton, params);
}
@Override
public void onDestroy() {
super.onDestroy();
if (overlayButton != null) {
windowManager.removeView(overlayButton);
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/785 ... status-bar
Размещение кнопки в строке состояния ⇐ JAVA
Программисты JAVA общаются здесь
1716219483
Anonymous
Я хочу разместить невидимую кнопку за вырезом дисплея в строке состояния. Я хочу отображать пользователю не уведомление, как другие коды, а невидимую кнопку в строке состояния. Я добавил код для определения размера и положения выреза дисплея, но не могу разместить кнопку на строка состояния, расположенная сразу за вырезом дисплея. Я хочу, чтобы пользователь нажимал на вырез камеры, и за вырезом камеры должна быть невидимая кнопка.
Я использовал приведенный ниже код. В этом случае кнопка видна в строке состояния, но на нее нельзя нажать.
import android.app.Service;
import android.content.Intent;
import android.graphics.PixelFormat;
import android.os.Build;
import android.os.IBinder;
import android.view.Gravity;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.Toast;
public class ButtonOverlayService extends Service {
private WindowManager windowManager;
private Button overlayButton;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
// Create WindowManager and set LayoutParams for the overlay button
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ?
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY :
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
| WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR
| WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSLUCENT
);
// Set gravity to the top of the screen including the status bar
params.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL;
params.x = 0;
params.y = 0;
// Inflate the overlay button layout
overlayButton = new Button(this);
overlayButton.setText("Button");
overlayButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Handle button click
Toast.makeText(ButtonOverlayService.this, "Button Clicked", Toast.LENGTH_SHORT).show();
}
});
// Add the button to the window manager
windowManager.addView(overlayButton, params);
}
@Override
public void onDestroy() {
super.onDestroy();
if (overlayButton != null) {
windowManager.removeView(overlayButton);
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78507511/placing-a-button-on-the-status-bar[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия