2016-08-03 6 views
4

Я использую новый макет Constraint для создания моего макета. Мне нужно иметь Button, который занимает почти всю ширину экрана, и это было легко с использованием ограничений.Строка выравнивания текста текстовое выравнивание центра

enter image description here

Как вы можете видеть на картинке я устанавливаю ширину для 0dp (любого размера), но текст не склеиваются в центре, что, как правило, нормальный для текста кнопки в.

Я пробовал: - установить гравитацию в центр - установить TextAlignment в центр

Похоже, эти свойства не могут работать с 0dp шириной (любого размера).

Итак, я попытался установить ширину match_parent с помощью гравитационного центра.

enter image description here

Это немного вправо.

Кто-нибудь знает, как исправить это поведение?

Обратите внимание, что я использую альфа-4

compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha4'

XML код

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/content_login" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    tools:context="br.com.marmotex.ui.LoginActivityFragment" 
    tools:showIn="@layout/activity_login"> 

    <Button 
     android:text="Log in" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:id="@+id/btLogin" 
     android:layout_marginTop="48dp" 
     app:layout_constraintTop_toBottomOf="@+id/textView6" 
     android:layout_marginEnd="16dp" 
     app:layout_constraintRight_toRightOf="@+id/content_login" 
     android:layout_marginRight="16dp" 
     android:layout_marginStart="16dp" 
     app:layout_constraintLeft_toLeftOf="@+id/content_login" 
     android:layout_marginLeft="16dp" 
     android:textColor="@android:color/white" 
     android:background="@color/BackgroundColor" /> 

</android.support.constraint.ConstraintLayout> 

EDIT Это была ошибка в ConstraintLayout альфа-4.

UPDATE Google выпустил alpha5, приведенный выше код теперь работает. Release note

ответ

5

Это немного вправо.

Я думаю, что маржа (ы) вызывает их. И это не только влияет на Кнопки, по моему опыту. Маржа также вставляет TextInputEditText.

Ниже приведен рабочий код, но обратите внимание на android:layout_width="match_parent" на кнопке. Каждый раз, когда я щелкнул в редакторе, он изменится на android:layout_width="0dp" и разрушит выравнивание кнопок.

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity"> 


    <Button 
     android:id="@+id/button_survey" 
     android:layout_width="match_parent" 
     android:layout_height="52dp" 
     android:text="Button" 
     app:layout_constraintBottom_toBottomOf="@+id/activity_main" 
     app:layout_constraintLeft_toLeftOf="@+id/activity_main" 
     app:layout_constraintRight_toRightOf="@+id/activity_main" 
     app:layout_constraintTop_toTopOf="@+id/activity_main" 
     tools:text="@string/main_activity_btn_survey" 
     android:layout_marginEnd="8dp" 
     android:layout_marginRight="8dp" 
     android:layout_marginStart="8dp" 
     android:layout_marginLeft="8dp" /> 


</android.support.constraint.ConstraintLayout> 

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

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity"> 

    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:layout_constraintLeft_toLeftOf="@+id/activity_main" 
     app:layout_constraintTop_toTopOf="@+id/activity_main" 
     app:layout_constraintRight_toRightOf="@+id/activity_main" 
     app:layout_constraintBottom_toBottomOf="@+id/activity_main" 
     android:padding="16dp"> 
     <Button 
      android:text="Button" 
      android:layout_width="match_parent" 
      android:layout_height="52dp" 
      android:id="@+id/button_survey" 
      android:layout_weight="1" 
      tools:text="@string/main_activity_btn_survey" 
      /> 
    </LinearLayout> 
</android.support.constraint.ConstraintLayout> 
+1

Google выпустил альфа5, обновил его, и вам больше не понадобится эта работа. –

+0

спасибо @ClaytonOliveira. могу ли я обновить свой ответ? –

0

Это ошибка. Однако вы можете обойти это, поместив кнопку внутри LinearLayout (или другую стандартную ViewGroup). Установите родительское представление и ширину кнопки на match_parent и переместите все ограничения, которые у вас были на кнопке, на родительский макет.

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    app:layout_constraintLeft_toLeftOf="@+id/parent_left" 
    app:layout_constraintTop_toTopOf="@+id/parent_top" 
    app:layout_constraintRight_toRightOf="@+id/parent_right"> 

    <Button 
     android:id="@+id/test" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="Centered Text"/> 

</LinearLayout> 
+0

Я сделал то, что вы предложили, но не сработал. –

+0

Можете ли вы разместить свой код макета? Я только что протестировал с XML, который я разместил, и это сработало. –

+0

посмотреть код добавлен! –

0

Ну я думаю, что его из-за эти ограничения приложения: layout_constraintRight_toRightOf приложение: layout_constraintLeft_toLeftOf

заменить текущую кнопку с этим:

<Button 
    android:text="Log in" 
    android:layout_width="match_parent" 
    android:layout_height="48dp" 
    android:id="@+id/btLogin" 
    android:textColor="@android:color/white" 
    android:background="@color/BackgroundColor" 
    android:gravity="center" 
    android:textAlignment="center" 
    android:layout_marginTop="100dp" 
    tools:layout_editor_absoluteX="-1dp" 
    app:layout_constraintTop_toBottomOf="@+id/textView6" /> 

Надеется, что это поможет.

3

Вы пробовали?

android:textAlignment="center" 

Это работает для меня.