Как выровнять компонент с текстом кнопки, который имеет drawableLeft

#android

#Android

Вопрос:

В настоящее время у меня есть TextView , который я хотел бы правильно выровнять с текстом кнопки (а не с самой кнопкой)

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

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@ id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="This is text view"
        android:id="@ id/textView"
        tools:textColor="#ff000000"
        android:textStyle="normal|bold"
        android:textSize="18sp" />

    <Button
        android:text="Button Text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="32dp"
        android:id="@ id/button"
        android:drawableLeft="@drawable/flag_za"
        android:drawablePadding="10dp" />
</LinearLayout>
 

введите описание изображения здесь

Как вы можете видеть, верхняя TextView часть правильно выровнена сама с Button собой. Однако я бы хотел, TextView чтобы он был выровнен с «ТЕКСТОМ КНОПКИ».

Мне было интересно, как я могу выполнить вычисление, чтобы определить, сколько требуется заполнения, чтобы моя TextView воля была правильно выровнена с «ТЕКСТОМ КНОПКИ»? (Вместо позиционирования TextView по вертикальной красной линии я хотел бы позиционировать TextView по вертикальной синей линии)

введите описание изображения здесь

Ответ №1:

Я не думаю, что вы можете рассчитать, как вы предлагаете. Если вам это действительно нужно, я бы создал невидимое изображение того же размера, что и флаг, а затем использовал то же поле отступ, что и в кнопке.

Ответ №2:

Если вы измените свой макет и используете RelativeLayout, вы можете добиться этого. Проблема с этим решением заключается в том, что вам нужно будет использовать пользовательскую кнопку и знать, какая из них больше по высоте (текст или значок):

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@ id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="10dp"
    android:paddingLeft="15dp"
    android:paddingRight="15dp"
    android:paddingTop="10dp"
    android:orientation="vertical">

    <TextView
        android:id="@ id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="This is text view"
        tools:textColor="#ff000000"
        android:textStyle="normal|bold"
        android:textSize="18sp"
        android:layout_alignStart="@ id/button_text"/>

    <View
        android:id="@ id/button"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_alignStart="@ id/button_image"
        android:layout_alignEnd="@ id/button_text"
        android:layout_alignTop="@ id/button_image"
        android:layout_alignBottom="@ id/button_image"
        android:background="#555"/>

    <ImageView
        android:id="@ id/button_image"
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:layout_marginTop="32dp"
        android:src="@drawable/flag_za"/>

    <TextView
        android:id="@ id/button_text"
        android:text="Button Text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="32dp"
        android:layout_toRightOf="@ id/button_image"
        android:paddingLeft="10dp"/>

</RelativeLayout>