Android: используйте WebView для WallpaperService

В вашем текущем коде я абсолютно не знаю, что это должно делать:

let bulletPoint: String = "\u{2022}"
let attributedString = NSMutableAttributedString(string: bulletPoint)
formattedString.enumerateAttributes(in: NSRange(0..<attributedString.length), options: []) { (attributes, range, _) -> Void in
    for (attribute, _) in attributes {
        formattedString.removeAttribute(attribute, range: range)
    }
}

Тот факт, что вы используете NSRange(0..<attributedString.length), должен вызвать сбой, если formattedString короче чем attributedString. Это пуля, поэтому у вас не должно быть проблемы, но все же.

Пуля или \u{2022} создается после разбора, поэтому вам нужно проанализировать formattedString.string, что вы могли бы сделать:

let regex = try! NSRegularExpression(pattern: "\\s\u{2022}\\s", options: [])
let matches = regex.matches(in: formattedString.string, options: [], range: NSMakeRange(0, formattedString.string.utf16.count))
matches.reversed().forEach { formattedString.replaceCharacters(in: $0.range, with: "")}

Я не понял, если вы хотите удалить только пули или остальную часть текста (другие пытались с помощью .replacingOccurrences(of: "Click to open image!", with: "") просто убедиться, что вы действительно смогли достичь этой линии и удалить подстроки или нет.

1
задан iangilman 28 January 2019 в 05:57
поделиться

1 ответ

Хорошо, у меня все работает, благодаря некоторой помощи в Reddit . Поэтому в конечном итоге вам нужно создать WebView, но не пытаться прикрепить его к чему-либо. Затем вы должны настроить его таким образом, чтобы он отображал содержимое; это был последний недостающий кусок. Вот код для этого:

// Get the screen width and height and put them in screenWidth and screenWidth 
// and then do the following with them:
int widthSpec = View.MeasureSpec.makeMeasureSpec(screenWidth, View.MeasureSpec.EXACTLY);
int heightSpec = View.MeasureSpec.makeMeasureSpec(screenHeight, View.MeasureSpec.EXACTLY);
webView.measure(widthSpec, heightSpec);
webView.layout(0, 0, screenWidth, screenHeight);

Затем вы можете рисовать из WebView в Canvas SurfaceHolder, и все прекрасно.

Спасибо всем за помощь!

ОБНОВЛЕНИЕ 11 МАРТА 2019

Теперь все работает, поэтому я решил поделиться с вами Гистой код на случай, если он будет полезен другим людям:

https://gist.github.com/iangilman/71650d46384a2d4ae6387f2d4087cc37

0
ответ дан iangilman 28 January 2019 в 05:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: