Как выровнять TextView вокруг ImageView?
Я пытаюсь выровнять TextView вокруг ImageView. Я использую следующий код:
private void createSpannableText(){ TextView myTextView = (TextView) findViewById(R.id.textView); SpannableStringBuilder builder = new SpannableStringBuilder(); builder.append(this.getText(R.string.loren__ipsum__max)); int lengthOfPart1 = builder.length(); builder.append(" "); builder.append(this.getText(R.string.lorem__ipsum)); Drawable d = getResources().getDrawable(R.drawable.myImage); d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); // <---- Very important otherwise your image won't appear ImageSpan myImage = new ImageSpan(d); builder.setSpan(myImage, 0, lengthOfPart1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); myTextView.setText(builder); }
Но не смог получить точный результат. Что мне делать? Нужно ли использовать SpannableStringBuilder в этом случае или есть другой способ. Пожалуйста помоги. Я использовал этот пост http://majaxandroidtips.blogspot.in/2009/06/how-to-have-few-layout-elements-wrap_17.html, чтобы получить решение.
- Как выровнять указатель в C
- Обосновать текст в Android-приложении, используя WebView, но представляя интерфейс TextView?
- Как вертикально центрировать divs?
- Выравнивание вывода printf в Java
- Как сделать элементы WPF ListView повторяющимися по горизонтали, например, горизонтальной полосой прокрутки?
PS: Я также хочу 6dp маржи вокруг ImageView
- Неравномерные указатели на x86
- Почему Mac ABI требует 16-байтного выравнивания стека для x86-32?
- Выравнивание ЦП и данных
- Назначение выравнивания памяти
- Правый выравнивающий текст в android TextView
- вертикальное и горизонтальное выравнивание (среднее и среднее) с помощью css
- В чем разница между выравниванием и выравниванием элементов?
- Должен ли я беспокоиться о выравнивании во время каста?
Вы можете добиться этого, используя интерфейс android.text.style.LeadingMarginSpan.LeadingMarginSpan2
который доступен в API 8. Вот статья , а не на английском языке, но переведите ее с помощью браузера. Кроме того, вы можете скачать исходный код примера прямо здесь .
Ваш макет:
Класс помощника реализует LeadingMarginSpan.LeadingMarginSpan2
class MyLeadingMarginSpan2 implements LeadingMarginSpan.LeadingMarginSpan2 { private int margin; private int lines; MyLeadingMarginSpan2(int lines, int margin) { this.margin = margin; this.lines = lines; } /* Возвращает значение, на которе должен быть добавлен отступ */ @Override public int getLeadingMargin(boolean first) { if (first) { /* * Данный отступ будет применен к количеству строк * возвращаемых getLeadingMarginLineCount() */ return margin; } else { // Отступ для всех остальных строк return 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) {} /* * Возвращает количество строк, к которым должен быть * применен отступ возвращаемый методом getLeadingMargin(true) * Замечание: * Отступ применяется только к N строкам первого параграфа. */ @Override public int getLeadingMarginLineCount() { return lines; } };
Ваш код активности:
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); String text = getString(R.string.text); // Получаем иконку и ее ширину Drawable dIcon = getResources().getDrawable(R.drawable.icon); int leftMargin = dIcon.getIntrinsicWidth() + 10; // Устанавливаем иконку в R.id.icon ImageView icon = (ImageView) findViewById(R.id.icon); icon.setBackgroundDrawable(dIcon); SpannableString ss = new SpannableString(text); // Выставляем отступ для первых трех строк абазца ss.setSpan(new MyLeadingMarginSpan2(3, leftMargin), 0, ss.length(), 0); TextView messageView = (TextView) findViewById(R.id.message_view); messageView.setText(ss); }
И, наконец, вот демонстрационный результат: