将文本视图移动到文本视图的末尾

Posted

技术标签:

【中文标题】将文本视图移动到文本视图的末尾【英文标题】:Move the textview next to the end of the textview 【发布时间】:2021-08-06 04:43:03 【问题描述】:

我正在开发我的 android 项目,以在两个文本视图中输入文本并在 email_subject 文本视图旁边显示 Inbox 文本。我遇到了 textview 的问题,因为当文本又短又大时,它不会将 Inbox 移动到 textview 旁边。

这是它显示的内容:

这是我想要实现的目标:

这里是 content_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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:layout_
    android:layout_
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    android:orientation="horizontal">

    <FrameLayout
        android:id="@+id/flString"
        android:layout_
        android:layout_
        tools:layout_editor_absoluteX="10dp"
        tools:ignore="MissingConstraints">

        <TextView
            android:id="@+id/email_subject"
            android:layout_
            android:layout_
            android:layout_marginLeft="4dp"
            android:layout_marginTop="19dp"
            android:text="Mail delivery failed: returning message to sender"
            android:textColor="#757575"
            android:textSize="20sp"
            android:textStyle="bold" />

        <RelativeLayout
            android:layout_
            android:layout_>

            <TextView
                android:id="@+id/mailbox_name"
                android:layout_
                android:layout_
                android:background="@drawable/rounded_mailbox"
                android:text="Inbox"
                android:textColor="#757575"
                android:textSize="12sp"
                android:layout_alignParentRight="true"
                android:layout_alignParentBottom="true" />
        </RelativeLayout>
    </FrameLayout>

    <ImageView
        android:id="@+id/ivFavorite"
        android:layout_
        android:layout_
        android:layout_marginLeft="284dp"
        android:layout_marginTop="16dp"
        android:padding="5dp"
        android:src="@drawable/ic_star_black_24dp"
        app:layout_constraintHorizontal_bias="0.723"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />



    <ImageView
        android:id="@+id/more_menu"
        android:layout_
        android:layout_
        android:layout_marginLeft="284dp"
        android:layout_marginTop="54dp"
        android:padding="5dp"
        android:src="@drawable/ic_baseline_3_dots_24"
        app:layout_constraintHorizontal_bias="0.723"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />


    <TextView
        android:id="@+id/from_me"
        android:layout_
        android:layout_
        android:layout_marginLeft="72dp"
        android:layout_marginTop="8dp"
        android:text="to me"
        android:textColor="#757575"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/from_sender" />


    <ImageView
        android:id="@+id/dropdown_btn"
        android:layout_
        android:layout_
        android:layout_marginLeft="114dp"
        android:layout_marginTop="8dp"
        android:src="@drawable/ic_arrow_down"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/from_sender" />
</androidx.constraintlayout.widget.ConstraintLayout>

你能告诉我一个例子,当文本又短又大时,如何让 Inbox 文本显示在文本的末尾??

编辑:当我尝试这个时:

<androidx.constraintlayout.widget.ConstraintLayout
    android:id="@+id/flString1"
    android:layout_
    android:layout_
    tools:ignore="MissingConstraints">

    <TextView
        android:id="@+id/email_subject"
        android:layout_
        android:layout_
        android:text="RE: SRX1517391641ID - [EXTERNAL] Re: Reported deliverability problem to Outlook.com SRX1517391641ID "
        android:textColor="#757575"
        android:textSize="20sp"
        android:textStyle="bold"
        tools:ignore="MissingConstraints" />

    <TextView
        android:id="@+id/mailbox_name"
        android:layout_
        android:layout_
        android:layout_alignParentRight="false"
        android:layout_alignParentBottom="false"
        android:layout_marginBottom="83dp"
        android:background="@drawable/rounded_mailbox"
        android:text="Inbox"
        android:textColor="#757575"
        android:textSize="12sp"
        android:gravity="bottom|end" />

</androidx.constraintlayout.widget.ConstraintLayout>

它不会将收件箱文本移动到文本末尾。有什么想法吗??

【问题讨论】:

在使用constraint layout 时尝试保持简单的层次结构,删除framelayout 并将收件箱限制为bottom-end 应该可以解决您的问题。 @SantanuSur 感谢您的帮助。我已将androidx.constraintlayout.widget.ConstraintLayout 替换为framelayout。如何在收件箱文本视图中添加bottom-end @Santanu Sur 我添加了android:gravity="bottom|end",它不会将收件箱文本视图移动到文本视图的末尾。有什么想法吗? 【参考方案1】:

一个想法是像下面这样使用 Spannable

    TextView textView = rootView.findViewById(R.id.email_subject);
    String subject = "RE: SRX1517391641ID - [EXTERNAL] Re: Reported deliverability problem to Outlook.com SRX1517391641ID ";
    subject = subject + "Inbox";
    Spannable wordtoSpan = new SpannableString(subject);
    wordtoSpan.setSpan(new BackgroundColorSpan(Color.LTGRAY), subject.length() - 5,  subject.length(), Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
    wordtoSpan.setSpan(new StyleSpan(Typeface.NORMAL), subject.length() - 5, subject.length(), Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
    wordtoSpan.setSpan(new RelativeSizeSpan(0.7f), subject.length() - 5, subject.length(), Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
    textView.setText(wordtoSpan);

注意:这只是一个基本示例,如果您认为值得探索,可以为您提供一些探索的想法。

注意:您可以探索https://github.com/googlearchive/android-text/tree/master/RoundedBackground-Kotlin

也可以在这里查看有关进行跨度回合的解决方案https://***.com/a/19297086/4828650

【讨论】:

谢谢,看来这是唯一的出路。我有可绘制的代码,但我如何使用你的代码来添加可绘制的?我拥有的可绘制对象的名称称为rounded_mailbox 请在底部查看我的答案的更新部分。

以上是关于将文本视图移动到文本视图的末尾的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UItableview 的末尾显示带有自定义文本的页脚视图

通过整个屏幕移动文本视图

导航栏将文本视图中的文本向下移动 2 倍其高度

在swift或obj-c中的uitextview末尾添加一个视图

回收站视图滚动到特定位置

文本输入的 Flex 可移动视图问题