Это зависит от варианта использования. Если вы хотите показывать разные изображения на ImageView
, использование LeveListDrawable
сделает ваш код более изолированным и чистым.
Скажем, в вашем ImageView
вы должны показывать разные эмоции, как в Facebook, и вам нужно будет показать пользователю, какую реакцию он выбрал.
Мы можем показывать правильное эмоциональное изображение каждый раз, используя оператор if
или switch
.
private void setProperImageForEmotion() {
int emotion = 1; // Let's imagine 1 is for like, ... , 6 is for angry
int resId = getCorrectDrawableSource(emotion);
}
private int getCorrectDrawableSource(int emotion) {
switch (emotion) {
case 2:
return R.drawable.love;
case 3:
return R.drawable.haha;
case 4:
return R.drawable.wow;
case 5:
return R.drawable.sad;
case 6:
return R.drawable.angry;
default:
return R.drawable.like;
}
}
Представьте себе, что в будущем вам придется добавить больше эмоций, что заставит вас добавить дополнительные элементы рисования к вашему утверждению switch
. Однако использование LevelListDrawable
сделает ваш код намного чище, и вам не нужно добавлять несвязанные идентификаторы рисования в ваш код Java или Kotlin. Поэтому, если мы изменим приведенный выше код на использование LevelListDrawable
, ваш код будет выглядеть следующим образом:
private void setProperImageForEmotion() {
int emotion = 1; // Let's imagine 1 is for like, ... , 6 is for angry
imageView.setImageLevel(emotion);
}
Как видите, это упрощает код. Также вы можете использовать LevelListDrawable
для настройки значка в Notification и NotificationCompat .
Мне нравится это:
perl -ne 'print "$_\n" foreach /"((?>[^"\\]|\\+[^"]|\\(?:\\\\)*")*)"/g;'
Это является немного подробным, но это обрабатывает оставленные кавычки и отслеживание в обратном порядке намного лучше, чем самая простая реализация. То, что это говорит:
my $re = qr{
" # Begin it with literal quote
(
(?> # prevent backtracking once the alternation has been
# satisfied. It either agrees or it does not. This expression
# only needs one direction, or we fail out of the branch
[^"\\] # a character that is not a dquote or a backslash
| \\+ # OR if a backslash, then any number of backslashes followed by
[^"] # something that is not a quote
| \\ # OR again a backslash
(?>\\\\)* # followed by any number of *pairs* of backslashes (as units)
" # and a quote
)* # any number of *set* qualifying phrases
) # all batched up together
" # Ended by a literal quote
}x;
Если Вам не нужно так много питания - говорят, что это, только, вероятно, будет диалоговое окно и не структурированные кавычки, то
/"([^"]*)"/
вероятно, работы о, а также что-либо еще.
Никакое regexp решение не будет работать, если Вы вложили кавычки, но для Ваших примеров это работает хорошо
$ echo \"HAL,\" noted Frank, \"said that everything was going extremely well\"
| perl -n -e 'while (m/(".*?")/g) { print $1."\n"; }'
"HAL,"
"said that everything was going extremely well"
$ cat eula.txt| perl -n -e 'while (m/(".*?")/g) { print $1."\n"; }'
"EULA"
"online"
"Software"
"Workstation Computer"
"Device"
"multiplexing"
"DRM"
"Secure Content"
"DRM Software"
"Secure Content Owners"
"DRM Upgrades"
"WMFSDK"
"Not For Resale"
"NFR,"
"Academic Edition"
"AE,"
"Qualified Educational User."
"Exclusion of Incidental, Consequential and Certain Other Damages"
"Restricted Rights"
"Exclusion des dommages accessoires, indirects et de certains autres dommages"
"Consumer rights"
grep -o "\"[^\"]*\""
Это держит для "
+ что-либо кроме кавычки, любое количество раз + "
-o заставляет его только произвести подобранный текст, не целую строку.
grep -o '"[^"]*"' file
Параметр '-o' печатает только шаблон