Как добавить закругленные углы к полупрозрачному фону активности?

#android #background #rounded-corners

#Android #фон #закругленные углы

Вопрос:

У меня есть простое действие, и я хотел бы иметь форму закругленного прямоугольника. В действии используется полупрозрачный объект рисования. Я видел всплывающие окна других разработчиков, которые являются полупрозрачными (не тема диалога) со скругленными углами, и я пытаюсь воспроизвести это. Буду признателен за любую помощь.

Вот код, который у меня есть на данный момент, который создает прямоугольное полупрозрачное окно в середине экрана.

 <style name="Theme.TranslucentDialog">
    <item name="android:colorBackgroundCacheHint">@null</item>
    <item name="android:windowIsTranslucent">true</item>
    <!-- Note that we use the base animation style here (that is no
         animations) because we really have no idea how this kind of
         activity will be used. -->
    <item name="android:windowBackground">@drawable/translucent_background</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:colorForeground">#fff</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:backgroundDimEnabled">false</item>
    <item name="android:windowAnimationStyle">@android:style/Animation.Translucent</item> 
</style>

<drawable name="translucent_background">#60000000</drawable>
  

Ответ №1:

Я не смог этого сделать, сгенерировав пользовательскую форму в коде. Мне пришлось выполнить это, создав свой собственный файл png с 9 патчами. Вот последняя тема, которую я создал:

 <?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="Theme" parent="android:Theme">
    </style>

    <style name="Theme.TranslucentDialog">
        <item name="android:colorBackgroundCacheHint">@null</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:colorForeground">#ffffff</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:backgroundDimEnabled">false</item>
        <item name="android:windowAnimationStyle">@android:style/Animation.Translucent</item> 
        <item name="android:windowBackground">@drawable/notification_panel</item>
    </style>

</resources>
  

Пожалуйста, обратите внимание на строку:

 <item name="android:windowBackground">@drawable/notification_panel</item>
  

Это строка, которая задает фон действия для изображения с 9 патчами, которое я создал. Это изображение может быть любым, изображением, 9-патчем или пользовательской формой. Я использовал исправление 9, чтобы у меня была красивая граница и закругленные углы, сохраняя при этом очень прозрачное окно активности (показывая все, что за ним, но оставляя приятный оттенок серого там, где расположено окно активности).

Уведомление о 9 исправлениях_panel.9.png находится в моей папке для рисования. Сначала я был немного напуган созданием собственного изображения с 9 патчами, но оказалось, что с помощью Inkscape и утилиты Android draw9patch.bat я смог сделать это с удовлетворительными результатами.

Дайте мне знать, если у кого-нибудь возникнут какие-либо вопросы.

Комментарии:

1. Можете ли вы предоставить общий доступ к файлу изображения с 9 путями?

2. Я не знаю, как прикреплять файлы png к сообщениям: (Если вы загуглите в поисках «Исправления для Android 9», я уверен, что вы сможете найти примеры.

Ответ №2:

Вам нужно создать пользовательскую форму. Вот пример XML-файла (белый прямоугольник со скругленными углами):

 <?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:startColor="#ffffff"
        android:endColor="#ffffff"/>
    <corners
        android:radius="8dp"/>
</shape>
  

Комментарии:

1. Вы уверены, что можете сделать это с помощью полупрозрачного объекта рисования? <имя для рисования=»translucent_background»>#60000000</drawable>

2. Просто замените startColor и endColor на #60000000

3. Спасибо, я попробую и дам вам знать, как это получается.

4. Извините, у меня это не сработало. : ( Если у вас есть полный набор или рабочий код, я хотел бы его увидеть.

5. Что не сработало? Вы заменили @drawable/translucent_background на новый xml, отображаемый выше? Можете ли вы более подробно описать то, что вы видите?

Ответ №3:

Хотя этому вопросу почти 10 лет, для достижения этого вам нужно создать XML-файл в папке drawable. В этом файле определите форму, подобную этой :

  <shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:startColor="#0f000000"
        android:endColor="#0f000000"/>
    <corners
        android:radius="10dp"/>
</shape>
  

В Style.xml создайте новый стиль, и в нем создайте элемент для фона и определите @drawable/yourFileNameInDrawbaleFolder.xml

 <style name="AppTheme.customTheme">
        <item name="android:windowIsTranslucent">true</item>
        <item name="windowNoTitle">true</item>
        <item name="android:background">@drawable/dialogbg</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:radius">15dp</item>
    </style>