У меня есть изображение размером 6x10 dp
Я хочу добавить его динамически в textView.
У меня есть 3 вида текста, и в соответствии с некоторым состоянием я добавляю его как составной чертеж.
TextViewCompat.setCompoundDrawablesRelative(targetTextView, null, null, drawable, null);
Я хочу, чтобы изображение было почти центрировано по вертикали к текстовому виду + на 1 sp меньше, чем центр. Таким образом, в каждом текстовом представлении я добавил
android:gravity="center_vertical"
так:
Я пытался
1) создайте холст высотой 8 x 10 и отцентрируйте его по текстовому виду, а затем ящики привязываются к (0,1sp, 10, 8-1sp)
но кажется, что текстовое представление также сдвинуто вниз относительно его положения перед добавлением compund imageView.
2) создайте холст с высотой текстового представления и отцентрируйте его к текстовому представлению, а затем ящики привязываются к (0, (высота textView - 6) / 2, 10, ...)
но затем ожидание обозревателя. Дерево делает код более сложным.
Есть ли другой способ сделать это?
вот мой код для опции (1):
private void tintAndAddPadding(
...
@DrawableRes int drawableId, @ColorRes int colorId) {
Drawable drawable =
Preconditions.checkNotNull(AppCompatResources.getDrawable(getContext(), drawableId));
Drawable drawableWithTint = DrawableCompat.wrap(drawable);
DrawableCompat.setTint(
drawableWithTint.mutate(), getContext().getResources().getColor(colorId));
// Bitmap dimensions sets the canvas dimensions
Bitmap bitmap =
Bitmap.createBitmap(
getContext()
.getResources()
.getDimensionPixelSize(R.dimen.account_menu_collapse_expand_width),
getContext()
.getResources()
.getDimensionPixelSize(R.dimen.account_menu_collapse_expand_canvas_height),
Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
// Drawable bounds should be all 4 coordinates on the canvas to draw on.
// This implies the drawable width and height.
drawableWithTint.setBounds(
0,
getContext()
.getResources()
.getDimensionPixelSize(R.dimen.account_menu_collapse_expand_top_padding)
, canvas.getWidth(),
canvas.getHeight() -
getContext()
.getResources()
.getDimensionPixelSize(R.dimen.account_menu_collapse_expand_top_padding));
drawableWithTint.draw(canvas);
TextViewCompat.setCompoundDrawablesRelative(targetTextView, null, null, drawableWithTint, null);
// Padding between text and drawable
targetTextView.setCompoundDrawablePadding(
getContext()
.getResources()
.getDimensionPixelSize(R.dimen.account_menu_collapse_expand_left_padding))
}
- Я знаю, что могу использовать относительный план, но моя команда, тем не менее, рекомендует мне использовать составной текст.