Выровнять выведенное изображение внутри текстового вида в центр

У меня есть текстовое представление, которое содержит изображение и некоторый текст.

программно я добавил рисованное изображение в левую сторону текстового представления

txtIDFav.setCompoundDrawablesWithIntrinsicBounds(R.drawable.fav_enabled, 0, 0, 0);

Я выровнял текстовое представление к центру с помощью

txtIDFav.setGravity(Gravity.CENTER);

Теперь текст в текстовом виде выровнен по центру. но изображение находится на левой стороне.

например: [изображение] _____________________ mytext

использовал _, чтобы дать пробел, поскольку его не разрешено.

Я хочу выровнять изображение в центре вместе с текстом.

например: _____________________ [изображение] mytext

Пожалуйста, совет.

Спасибо и оцените.

Ответ 1

Попробуйте это, он должен работать:

    Spannable span = new SpannableString("  " + txtIDFav.getText());  // or set your text manually

    Drawable drawable;

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
    {
        drawable = getResources().getDrawable(R.drawable.fav_enabled, getContext().getTheme());
    }
    else
    {
        drawable = getResources().getDrawable(R.drawable.fav_enabled);
    }

    drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
    ImageSpan imageSpan = new ImageSpan(drawable);
    span.setSpan(imageSpan, 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

    txtIDFav.setText(span);

Ответ 2

Я также столкнулся с той же проблемой, но я не хочу использовать Button и TextView по отдельности, а также я не хочу делать это с помощью кода Java. Итак, я нашел это. Я знаю, что даю решение поздно. Но это помогает тебе

<FrameLayout
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:layout_margin="20dp"
            android:background="@drawable/next_btn_bg_rounded_corners">


            <TextView
                android:id="@+id/btn_restore_purchases"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:background="@null"
                android:drawableLeft="@mipmap/restore"
                android:drawablePadding="10dp"
                android:drawableStart="@mipmap/restore"
                android:text="@string/restore_purchases"
                android:textAllCaps="false"
                android:textColor="@color/white" />
        </FrameLayout>

icon with text in center

Ответ 3

Вставьте выделение в свой текст с помощью SpannableString.

        SpannableStringBuilder textspan = new SpannableStringBuilder("  " + yourText);
        Drawable icon = getResources().getDrawable(R.drawable.fav_enabled);
        // jump drawable to the text view state (if it is a state drawable)
        icon.setState(textView.getBackground().getState());  // match the background state
        textspan.setSpan(new ImageSpan(icon, ImageSpan.ALIGN_BOTTOM), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        textView.setText(textspan);

Ответ 4

Я предполагаю, что это произошло, потому что ширина textView установлена в match_parent или fill_parent. Попробуйте установить ширину textView в wrap_content и центрировать весь textView, а не только текст.

Планировка:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/textViewTest"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="Test"
        android:textSize="28sp" />
</FrameLayout>

Деятельность:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView textViewTest=(TextView)findViewById(R.id.textViewTest);
        textViewTest.setCompoundDrawablesWithIntrinsicBounds(R.mipmap.ic_launcher, 0, 0, 0);
    }
}

Результат

Ответ 5

невозможно установить изображение в фоновом режиме текстового представления, вместо этого вы можете установить свой drawable on textview следующим образом

Android: drawableRight = "@вытяжке/ic_launcher"

"или"

Android: drawableleft = "@вытяжке/ic_launcher"

"или"

Android: drawableBottom = "@вытяжке/ic_launcher"

только для решения вашей проблемы вы можете использовать texview внутри framelayout таким образом

   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<FrameLayout
    android:layout_width="match_parent"
    android:background="@drawable/ic_launcher"
    android:layout_gravity="center"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/textView1"
        android:layout_gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

</FrameLayout>

Ответ 6

Вам нужно написать такой код: -

txtIDFav.setGravity(Gravity.CENTER | Gravity.RIGHT);