Как добавить закругленные углы к полупрозрачному фону активности? - PullRequest
5 голосов
/ 23 мая 2011

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

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

<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>

Ответы [ 2 ]

9 голосов
/ 26 мая 2011

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

<?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-Patch, которое я создал. Это изображение может быть чем угодно, изображением, 9-патчем или произвольной формой. Я использовал 9-патч, чтобы у меня была хорошая граница и закругленные углы, при этом оставалось очень полупрозрачное окно активности (показывая все за ним, но оставляя приятный оттенок серого в том месте, где находится окно активности).

Файл 9-patch messages_panel.9.png находится в моей папке для рисования. Сначала я немного испугался, создав собственный образ из 9 патчей, но оказалось, что с помощью Inkscape и утилиты android draw9patch.bat я смог сделать это с удовлетворительными результатами.

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

5 голосов
/ 23 мая 2011

Вам нужно сделать нестандартную форму.Вот пример 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>
...