Теперь это возможно, но только для телефонов с версией выше или равной 2.2 с использованием интерфейса android.text.style.LeadingMarginSpan.LeadingMarginSpan2
, доступного в API 8.
Вот статья , но не на английском языке, но вы можете загрузить исходный код примера непосредственно из здесь .
Если вы хотите, чтобы ваше приложение совместимо со старыми устройствами, вы можете отобразить разная компоновка без плавающего текста. Вот пример:
Макет (по умолчанию для более старых версий будет изменен программно для более новых версий)
Вспомогательный класс
class FlowTextHelper {
private static boolean mNewClassAvailable;
static {
if (Integer.parseInt(Build.VERSION.SDK) >= 8) { // Froyo 2.2, API level 8
mNewClassAvailable = true;
}
}
public static void tryFlowText(String text, View thumbnailView, TextView messageView, Display display){
// There is nothing I can do for older versions, so just return
if(!mNewClassAvailable) return;
// Get height and width of the image and height of the text line
thumbnailView.measure(display.getWidth(), display.getHeight());
int height = thumbnailView.getMeasuredHeight();
int width = thumbnailView.getMeasuredWidth();
float textLineHeight = messageView.getPaint().getTextSize();
// Set the span according to the number of lines and width of the image
int lines = (int)FloatMath.ceil(height / textLineHeight);
//For an html text you can use this line: SpannableStringBuilder ss = (SpannableStringBuilder)Html.fromHtml(text);
SpannableString ss = new SpannableString(text);
ss.setSpan(new MyLeadingMarginSpan2(lines, width), 0, ss.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
messageView.setText(ss);
// Align the text with the image by removing the rule that the text is to the right of the image
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)messageView.getLayoutParams();
int[]rules = params.getRules();
rules[RelativeLayout.RIGHT_OF] = 0;
}
}
Класс myLeadingMarginSpan2 (обновлен для поддержки API 21)
public class MyLeadingMarginSpan2 implements LeadingMarginSpan2 {
private int margin;
private int lines;
private boolean wasDrawCalled = false;
private int drawLineCount = 0;
public MyLeadingMarginSpan2(int lines, int margin) {
this.margin = margin;
this.lines = lines;
}
@Override
public int getLeadingMargin(boolean first) {
boolean isFirstMargin = first;
// a different algorithm for api 21+
if (Build.VERSION.SDK_INT >= 21) {
this.drawLineCount = this.wasDrawCalled ? this.drawLineCount + 1 : 0;
this.wasDrawCalled = false;
isFirstMargin = this.drawLineCount <= this.lines;
}
return isFirstMargin ? this.margin : 0;
}
@Override
public void drawLeadingMargin(Canvas c, Paint p, int x, int dir, int top, int baseline, int bottom, CharSequence text, int start, int end, boolean first, Layout layout) {
this.wasDrawCalled = true;
}
@Override
public int getLeadingMarginLineCount() {
return this.lines;
}
}
Пример использования
ImageView thumbnailView = (ImageView) findViewById(R.id.thumbnail_view);
TextView messageView = (TextView) findViewById(R.id.message_view);
String text = getString(R.string.text);
Display display = getWindowManager().getDefaultDisplay();
FlowTextHelper.tryFlowText(text, thumbnailView, messageView, display);
Так выглядит приложение на устройстве Android 2.2: [/g2]
И это для устройства Android 2.1:
[/g3]
Вот и все! Нет команды для удаления вашей виртуальной среды. Просто отключите его и избавьте свое приложение от его артефактов, рекурсивно удалив его.
Обратите внимание, что это одно и то же независимо от того, какую виртуальную среду вы используете. virtualenv
, venv
, среда Анаконды, pyenv
, pipenv
основаны здесь на том же принципе.
шаг 1: удалите virtualenv virtualenvwrapper, скопируйте и вставьте следующую команду ниже:
$ sudo pip uninstall virtualenv virtualenvwrapper
шаг 2: перейдите в .bashrc и удалите все virtualenv и virtualenvwrapper
открытый терминал:
$ sudo nano .bashrc
прокрутите вниз, и вы увидите код внизу, затем удалите его.
# virtualenv and virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh
далее, источник .bashrc:
$ source ~/.bashrc
ЗАКЛЮЧИТЕЛЬНЫЕ шаги: без терминала / оболочки перейдите в / home и найдите .virtualenv
(я забыл имя, так что если ваша находка похожа на .virtualenv
или .venv
просто удалите его. Это сработает.
deactivate
- это команда, которую вы ищете. Как и то, что уже было сказано, нет команды для удаления вашей виртуальной среды. Просто отключите его!
Если вы пользователь Windows, и вы используете conda для управления средой в приглашении Anaconda, вы можете сделать следующее:
Убедитесь, что вы отключили виртуальную среду или перезапустите Anaconda Prompt. Используйте следующую команду для удаления виртуальной среды:
$ conda env remove --name $MyEnvironmentName
Кроме того, вы можете перейти в C: \ Users \ USERNAME \ AppData \ Local \ Continuum \ anaconda3 \ envs \ MYENVIRONMENTNAME (это путь к файлу по умолчанию) и удалите папку вручную.
Если вы используете pyenv, вы можете удалить вашу виртуальную среду:
$ pyenv virtualenv-delete <name>
Итак, я немного погуглил, но ни один из ответов не был удовлетворительным.
Но случайно, при прокрутке man-страниц pip (утилита для установки пакетов, поддерживаемых python - одна из них - virtualenv), было задокументировано использование ключевого слова «uninstall» с pip, ниже приведен точный вывод прямо из моего терминала
indresh-VBX] **$ sudo pip uninstall virtualenv**
Каталог '/home/indresh/.cache/pip/http' или его родительский каталог не принадлежат текущему пользователю, и кэш отключен. Пожалуйста, проверьте разрешения и владельца этого каталога. Если вы выполняете pip с помощью sudo, вам может потребоваться флаг -do sudo.
Uninstalling virtualenv-15.1.0:
/usr/bin/virtualenv
/usr/local/bin/virtualenv
/usr/local/lib/python2.7/dist-packages/virtualenv-15.1.0.dist-info/DESCRIPTION.rst
/usr/local/lib/python2.7/dist-packages/virtualenv-15.1.0.dist-info/INSTALLER
/usr/local/lib/python2.7/dist-packages/virtualenv-15.1.0.dist-info/METADATA
/usr/local/lib/python2.7/dist-packages/virtualenv-15.1.0.dist-info/RECORD
/usr/local/lib/python2.7/dist-packages/virtualenv-15.1.0.dist-info/WHEEL
/usr/local/lib/python2.7/dist-packages/virtualenv-15.1.0.dist-info/entry_points.txt
/usr/local/lib/python2.7/dist-packages/virtualenv-15.1.0.dist-info/metadata.json
/usr/local/lib/python2.7/dist-packages/virtualenv-15.1.0.dist-info/top_level.txt
/usr/local/lib/python2.7/dist-packages/virtualenv.py
/usr/local/lib/python2.7/dist-packages/virtualenv.pyc
/usr/local/lib/python2.7/dist-packages/virtuakmr.ndrsh@gmail.comlenv_support/__init__.py
/usr/local/lib/python2.7/dist-packages/virtualenv_support/__init__.pyc
/usr/local/lib/python2.7/dist-packages/virtualenv_support/argparse-1.4.0-py2.py3-none-any.whl
/usr/local/lib/python2.7/dist-packages/virtualenv_support/pip-9.0.1-py2.py3-none-any.whl
/usr/local/lib/python2.7/dist-packages/virtualenv_support/setuptools-28.8.0-py2.py3-none-any.whl
/usr/local/lib/python2.7/dist-packages/virtualenv_support/wheel-0.29.0-py2.py3-none-any.whl
Proceed (y/n)? y
Successfully uninstalled virtualenv-15.1.0
The directory '/home/indresh/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
--------------------------------
Если вы пользователь Windows, вы также можете удалить среду, перейдя по ссылке: C:/Users/username/Anaconda3/envs
Здесь вы можете увидеть список виртуальной среды и удалить ту, которая вам больше не нужна.
Вы можете удалить все зависимости, рекурсивно удалив их все, а затем удалив venv.
Редактировать , включая комментарий Айзека Тернера
source venv/bin/activate
pip freeze > requirements.txt
pip uninstall -r requirements.txt -y
deactivate
rm -r venv/
Если вы пользователь Windows, тогда он находится в C: \ Users \ your_user_name \ Envs. Вы можете удалить его оттуда.
Также попробуйте в командной строке имя среды rmvirtualenv.
Я попытался с помощью командной строки, чтобы он сказал, что удален, но он все еще существует. Поэтому я вручную удаляю его.
Использовать rmvirtualenv
Удалить среду, в $WORKON_HOME
.
Синтаксис:
rmvirtualenv ENVNAME
Вы должны использовать деактивацию перед удалением текущей среды.
$ rmvirtualenv my_env
Ссылка: http://virtualenvwrapper.readthedocs.io/en/latest/command_ref.html
из официального документа virtualenv https://virtualenv.pypa.io/en/stable/userguide/
Удаление среды
Удаление виртуального окружение просто делается путем его деактивации и удаления папки окружения со всем ее содержимым:
(ENV)$ deactivate $ rm -r /path/to/ENV
Я использовал pyenv uninstall my_virt_env_name
для удаления виртуальной среды.
Примечание: я использую pyenv-virtualenv, установленный через скрипт установки.
Следующая команда работает для меня.
rm -rf /path/to/virtualenv
Просто чтобы повторить то, что @skytreader ранее прокомментировал, rmvirtualenv
- это команда, предоставленная virtualenvwrapper
, а не virtualenv
. Может быть, у вас не установлено virtualenvwrapper
?
См. Справочник команд VirtualEnvWrapper для получения более подробной информации.
Просто удалите виртуальную среду из системы. Специальной команды для нее не существует
rm -rf venv