2012-05-23 161 views
7

我试图让TextView有两段文字,一段对着最左侧和一对最左侧对齐。我可以在这两个词之间留出空格,但我想知道是否有更好的技术?Android TextView将文本对齐到右侧和左侧

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@drawable/background_common" 
    android:id="@+id/LinearLayout0123"> 

    <TextView 
     android:layout_width="300dp" 
     android:layout_height="40dp" 
     android:textColor="@color/Black" 
     android:textStyle="bold" 
     android:textSize="15dp" 
     android:paddingLeft="10dp" 
     android:paddingTop="10dp" 
     android:layout_marginTop="10dp" 
     android:layout_marginLeft="10dp" 
     android:background="@drawable/selector_social_facebook_twitter" 
     android:text="Right Text         Left Text" /> 
</LinearLayout> 

回答

16

这里的另一种方法:

<FrameLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@drawable/background_common"> 
    <TextView 
     android:text="Left Text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="left"/> 
    <TextView 
     android:text="Right Text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="right"/> 
</FrameLayout> 

Layout_gravity告诉消减nt把孩子放在哪里。在FrameLayout中,孩子们可以去任何地方,并且不会被其他孩子阻挡。如果有重叠,则添加的最后一个孩子在最上面。祝你好运!

+0

但是,当你想使用后退按钮清除输入的文本,因为当过你专注编辑文本将其设置光标在输入文本的乞讨它不能正常工作。 –

4

为什么不来代替干扰文成单一的TextView

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="300dip" 
    android:layout_height="fill_parent" 
    android:background="@drawable/background_common" 
    android:id="@+id/LinearLayout0123"> 

    <TextView 
     android:layout_weight="1" 
     android:layout_width="0dip" 
     android:layout_height="40dp" 
     android:textColor="@color/Black" 
     android:textStyle="bold" 
     android:textSize="15dp" 
     android:paddingLeft="10dp" 
     android:paddingTop="10dp" 
     android:layout_marginTop="10dp" 
     android:layout_marginLeft="10dp" 
     android:background="@drawable/selector_social_facebook_twitter" 
     android:text="Left Text" /> 

    <TextView 
     android:layout_weight="1" 
     android:layout_width="0dip" 
     android:layout_height="40dp" 
     android:textColor="@color/Black" 
     android:textStyle="bold" 
     android:textSize="15dp" 
     android:paddingLeft="10dp" 
     android:paddingTop="10dp" 
     android:layout_marginTop="10dp" 
     android:layout_marginLeft="10dp" 
     android:background="@drawable/selector_social_facebook_twitter" 
     android:text="Right Text" /> 
</LinearLayout> 

您可以设置机器人2个textviews:重力=右侧文本框中输入“正确的”,如果你想要的文字是右对齐

1

这肯定会为你工作...

<RelativeLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" > 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_centerVertical="true" 
     android:layout_marginLeft="5dp" 
     android:text="Left Side" 
     android:textSize="15sp" 
     android:textStyle="bold" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_centerVertical="true" 
     android:layout_marginRight="5dp" 
     android:text="Right Side" 
     android:textSize="15sp" 
     android:textStyle="bold" /> 
</RelativeLayout> 
+3

op要求提供LinearLayout。另外,“请投票”太可爱了...... – katzenhut

1

这可能是更好,因为它不允许文本重叠。

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

    <TextView 
     android:id="@+id/title" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:layout_gravity="start" /> 

    <TextView 
     android:id="@+id/sub_title" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1 
     android:layout_gravity="end" /> 
</LinearLayout> 
+0

这不会将文本对齐到右边缘 –

1

如果你需要的是一个单一的线(标签:...值,或者类似的东西),你其实可以做到这一点使用Alignment跨度。唯一的问题是,跨度适用于整个段落,所以你必须将你的左/右文本放入单独的段落中,并使用“零线高度”跨度将它们合并到一行中。

事情是这样的:

public void setLeftRightText(TextView view, String left, String right) { 
    SpannableString merged = new SpannableString(left + "\n" + right); 
    merged.setSpan(
      new AlignmentSpan.Standard(Layout.Alignment.ALIGN_NORMAL), 
      0, left.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE 
    ); 
    merged.setSpan(
      new LineOverlapSpan(), 
      left.length(), left.length() + 1, Spanned.SPAN_INCLUSIVE_EXCLUSIVE 
    ); 
    merged.setSpan(
      new AlignmentSpan.Standard(Layout.Alignment.ALIGN_OPPOSITE), 
      left.length() + 1, left.length() + 1 + right.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE 
    ); 
    view.setText(merged); 
} 

LineOverlapSpan是这样实现的:

public class LineOverlapSpan implements LineHeightSpan { 
    @Override 
    public void chooseHeight(final CharSequence text, final int start, final int end, final int spanstartv, final int v, final Paint.FontMetricsInt fm) { 
     fm.bottom += fm.top; 
     fm.descent += fm.top; 
    } 
} 

详情请参阅this answer

0

这是我找到的最简单的方法。诀窍是在第二个文本视图上使用match_parent,以便占用剩余空间并允许gravity属性将文本移至末尾。

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

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Left Aligned" /> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="end" 
     android:text="Right Aligned" /> 
</LinearLayout> 
相关问题