使用右对齐按钮将textview居中

时间:2018-07-25 18:08:59

标签: android android-layout

我有一个任意长度的textview + icon(图标+文本),需要在屏幕上居中。在同一行上,有一个按钮与屏幕右侧对齐。 (X)

|图标+文字| X’|

使用LinearLayout,我可以将其与视图居中放置,但是右侧的按钮将其向左移动。

使用相对布局,我可以实现所需的功能,但是如果文本太长,则按钮会与文本重叠。

什么是正确的方法?我以前没有使用过ConstraintLayout,会解决吗?

6 个答案:

答案 0 :(得分:1)

您可以这样设置

at \'ed og \'fd \'fattalast uj; at \'f3 \'fattalast sum ou og \'fa sum yv, ei sum aj, at g og k hava

答案 1 :(得分:1)

只需使用相对布局。 使您的Textview居中 并在按钮上放置toRightOf = txtViewsName。

///更新了DP中的强制宽度,以确保文本始终居中且永不重叠。

    <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:drawableLeft="@mipmap/ic_launcher"
        android:maxWidth="230dp"
        android:layout_centerHorizontal="true"
        android:ellipsize="end"
        android:text="My text to show test abcdefghyijkldkf here" />

    <Button
        android:layout_width="80dp"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:text="Button" />

</RelativeLayout>

您需要调整按钮的宽度和textview的最大宽度以匹配您的设计,并在预览时确认所有分辨率,但是在这种情况下dp应该可以很好地覆盖您。

注意* 这只是回答了您的问题,但没有做任何有趣的行为,即,如果文本变得太多,请忽略居中命令并开始向左移动,但这不会这样做。如果这是您的愿望,请更新您的问题。

//在左视图中居中显示文本,并使用权重确保文本区域占据适当的空间百分比(根据您的评论而不是您要查找的布局,但会保留它,以防其他人使用)

    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:weightSum="10">

    <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="7"
        android:drawableLeft="@mipmap/ic_launcher"
        android:gravity="center"
        android:text="My text to show here" />

    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:text="Button" />

</LinearLayout>

答案 2 :(得分:1)

我建议您使用约束布局,

示例:

<?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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:context=".YourActivity">

    <TextView
        android:id="@+id/my_text_view"
        android:text="My Long Text That must not overlap the button"
        android:layout_width="0dp"
        android:gravity="center"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginEnd="8dp"
        app:layout_constraintHorizontal_chainStyle="spread_inside"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/my_btn"
        app:layout_constraintTop_toTopOf="@+id/my_btn"
        app:layout_constraintBottom_toBottomOf="@+id/my_btn"/>

    <Button
        android:id="@+id/my_btn"
        android:layout_marginTop="16dp"
        android:text="My Nice Button "
        android:layout_marginEnd="8dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintStart_toEndOf="@id/my_text_view"
        app:layout_constraintEnd_toEndOf="parent"/>


</android.support.constraint.ConstraintLayout>

示例输出:

example

答案 3 :(得分:0)

对于最佳实践,我认为ConstraintLayout是设计的最佳解决方案,是的,它当然可以为您提供所需的帮助。
有关更多信息,请检查此Build a Responsive UI with ConstraintLayout和此 ConstraintLayout

答案 4 :(得分:0)

由于您右边的ImageButton具有固定的宽度(在本示例中为40dp),因此您可以通过在末尾添加相同宽度的边距来获得所需的结果TextView,以确保它们没有重叠。要使TextView保持在屏幕中央,您还必须在开始时添加相同的边距:

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/textview"
        android:text="TextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="40dp"
        android:layout_marginEnd="40dp"
        app:layout_constrainedWidth="true"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <ImageButton
        android:id="@+id/button"
        android:layout_width="40dp"
        android:layout_height="40dp"
        app:layout_constrainedWidth="true"
        app:layout_constraintHorizontal_bias="1.0"
        app:layout_constraintVertical_bias="0.0"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@id/textview"
        app:layout_constraintTop_toTopOf="parent"/>

</android.support.constraint.ConstraintLayout>

enter image description here enter image description here

如果要将文本放在TextView中居中,请使用android:gravity="center"

enter image description here

如果ImageButton's的宽度为wrap_content,则此方法将行不通,因为无法将TextView的结尾都约束到父对象的结尾(因此同时位于屏幕的中心)和ImageButton的开头(因此,如果文本变长,它们就不会重叠)。

答案 5 :(得分:0)

最后,我最终按照Sam的建议使用了RelativeLayout,并在TextView上设置了maxWidth和margin。