2013-02-14 2 views
0

У меня проблема с компоновкой/выравниванием с TextView, которой я еще не смог найти решение, т. Е. Я хочу выровнять текст вне центра внутри TextView горизонтально.Нецентрированное выравнивание текста внутри TextView

Чтобы дать немного больше контекста, у меня есть ImageView и сторона TextView бока, то ImageView прикасаясь к левому краю экрана и TextView заполняющего остальной части экрана по горизонтали, как это:

[-img-|-----text-----] 

TextView сконфигурирован как singleLine = "true" и maxLines = "1", так что он будет усечен, если он слишком длинный для его горизонтального пространства. Моя цель - выровнять текст в центре экрана, а не в центре TextView, потому что на экране есть другие элементы, которые выровнены по центру, и мне нужен текст, чтобы соответствовать этому.

Так что, если я использую гравитацию = «центр» на TextView, я получаю изображение выше, но то, что я на самом деле хочу

[-img-|--text--------] 

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

Я также экспериментировал с полями, дополнением и соединением, выведенным влево, но текст всегда центрирован относительно доступного пространства (которое я бы рассматривал ожидаемое поведение).

Есть ли какие-либо сведения о том, как достичь этого выравнивания, то есть относительно центра другого компонента, чем TextView, возможно, программно во время выполнения? Заранее благодарим за полезные советы.

Edit: пользователь Budius предложил использовать отступы вправо, чтобы достичь выравнивания по центру, который работает, но приводит к длинным текстам усекается до правого края TextView достигнута и я ищу решение, которое позволяет избежать, что , т. е., если это возможно, использует все пространство.

+0

Вы можете добиться этого с FrameLayout, поставив TextView как первый view with width = match_parent и gravity = center, а затем ImageView с layout_gravity left и wrap_content width. Проблема заключается в длине текста, поскольку он может быть достаточно длинным, чтобы находиться под изображением. Надеюсь, это поможет. –

+0

Благодарим вас за ответ, но этот подход является эквивалентом моей попытки помещать взгляды внутри RelativeLayout - возможность скрытия текста за изображением - это именно одна из проблем, которые я хотел бы исправить. – handtwerk

ответ

0

Попробуйте использовать

android:layout_weight="1" 

, если это поможет вам ..

+0

Спасибо, но я действительно не понимаю, как это помогает, может быть, вы могли бы объяснить? – handtwerk

+0

Я поделился кодом, который может быть не соответствующим образом (я его знаю). В противном случае FrameLayout является наилучшим способом, который я знаю для решения вашей проблемы. – MRX

2

Я считаю, что будет центрировать его и двигаться 20dp в сторону.

gravity:centrepadding:right=20dp

+0

Спасибо, вы правы в том, что это дает мне выравнивание, которое я хочу, но, как следствие, длинные тексты усекаются, даже если будет больше места для справа (потребляется дополнением), что выглядит немного странно. – handtwerk

+0

Я понимаю проблему, но я не могу думать ни о каком «легком» способе выхода. Вы можете попробовать программно проверить длину текста и удалить пометку по мере необходимости. – Budius

0

Я знаю, что это не правильный подход, чем тоже дать ему попробовать ..

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

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight=".33" 
    android:src="@drawable/ic_launcher" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:layout_weight=".33" 
    android:gravity="center" 
    android:text="text" /> 

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight=".33" 
    android:src="@drawable/ic_launcher" 
    android:visibility="invisible" /> 

+0

Спасибо за код, он в основном выполняет то же самое, что и предложение Будиуса, но вводит ту же проблему, т. Е. Длинные тексты не заполняют все пространство (занимаемое невидимым изображением), но будут усеканы перед правильным край достигнут. – handtwerk

Смежные вопросы