我正在尝试使用一个包含两段文本的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>
答案 0 :(得分:20)
这是另一种方法:
<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告诉父母将孩子放在哪里。在FrameLayout中,孩子们可以去任何地方,并且不受其他孩子的阻碍。如果存在重叠,则添加的最后一个子项位于顶部。祝你好运!
答案 1 :(得分: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>
如果您希望文本与右侧对齐,可以在右侧文本框中设置android:gravity =“right”
答案 2 :(得分:2)
这绝对适合你...
<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 :(得分:2)
如果您只需要一行(标签:...值,或类似的东西),您实际上可以使用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。
答案 4 :(得分:1)
这可能更好,因为它不允许文本重叠。
MainWindow
答案 5 :(得分: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>