layout_gravity=right的相对布局在Android中收缩包含TextView
出于某种原因,重力设置为“右”的相对布局不会在重力位于最长窗口小部件上时停止,而是一直到最短窗口小部件,将最长窗口小部件向右移动 下面是一张更好地解释它的图片: 我希望它在到达@id/timestampTextView时停止向右拉动重力,也就是说,我希望“一些长文本”完全显示,而不隐藏。此外,我希望它尊重android:layout_alignRight=“@+id/textView”,即“一些长文本”应该与“短文本”右对齐 以下是该图像的布局:layout_gravity=right的相对布局在Android中收缩包含TextView,android,android-layout,Android,Android Layout,出于某种原因,重力设置为“右”的相对布局不会在重力位于最长窗口小部件上时停止,而是一直到最短窗口小部件,将最长窗口小部件向右移动 下面是一张更好地解释它的图片: 我希望它在到达@id/timestampTextView时停止向右拉动重力,也就是说,我希望“一些长文本”完全显示,而不隐藏。此外,我希望它尊重android:layout_alignRight=“@+id/textView”,即“一些长文本”应该与“短文本”右对齐 以下是该图像的布局: <?xml version="1.0" e
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/abc_cab_background_top_holo_dark" >
<RelativeLayout
android:id="@+id/messageRelativeLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="right"
android:background="@drawable/abc_cab_background_top_holo_light">
<TextView
android:id="@+id/textTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="short text"
android:textSize="20sp"
android:layout_below="@+id/timestampTextView" />
<TextView
android:id="@+id/timestampTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:singleLine="true"
android:text="some long long long long text"
android:layout_alignRight="@+id/textTextView"
android:textSize="10sp" />
</RelativeLayout>
</LinearLayout>
有趣的是,将layout_gravity设置为左侧,android:layout_alignLeft=“@+id/textTextView”而不是alignRight,它在左侧可以正常工作,但我需要它在右侧也能正常工作。为什么同样的事情不适用于右侧
以下是正确显示左侧的图像和代码:
更新:
通过将RelativeLayout替换为LinearLayout解决了此问题:i.stack.imgur.com/dD5TL.png
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/abc_cab_background_top_holo_dark" >
<LinearLayout
android:id="@+id/messageLinearLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:orientation="vertical"
android:background="@drawable/abc_cab_background_top_holo_light">
<TextView
android:id="@+id/timestampTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:text="some long long long long text"
android:textSize="12sp"
android:layout_gravity="right" />
<TextView
android:id="@+id/textTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="short text"
android:textSize="20sp"
android:layout_gravity="right" />
</LinearLayout>
</LinearLayout>
对于id为TextView的TextView,您可以使用android:layout\u alignRight属性,而不是id为timestampTextView的TextView。见下文。我认为这不是最好的方法,但它是有效的
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/abc_cab_background_top_holo_dark" >
<RelativeLayout
android:id="@+id/messageRelativeLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="right"
android:background="@drawable/abc_cab_background_top_holo_light">
<TextView
android:id="@+id/textTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="short text"
android:layout_alignRight="@id/timestampTextView"
android:textSize="20sp"
android:layout_below="@+id/timestampTextView" />
<TextView
android:id="@+id/timestampTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:singleLine="true"
android:text="some long long long long text"
android:textSize="10sp" />
</RelativeLayout>
</LinearLayout>
您应该至少使用12sp textsizeb,但我希望相对布局能够包装文本视图,也就是说,我希望它在@id/timestampTextView之前开始,在该图像上的红线与它所在的位置类似,但不隐藏@id/timestampTextView。@JohnBerger我编辑了答案。我认为应该有更好的解决办法,但也许现在对你来说已经足够了。@JohnBerger我的回答对你有帮助吗?没有。我从RelativeLayout切换到LinearLayout,这解决了我的问题。这是我的布局最终布局,但我希望相对布局包装文本视图,也就是说,我希望它在@id/timestampTextView之前开始,在该图像上的红线与它所在的位置类似,但不隐藏@id/timestampTextView。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/abc_cab_background_top_holo_dark" >
<RelativeLayout
android:id="@+id/messageRelativeLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="right"
android:background="@drawable/abc_cab_background_top_holo_light">
<TextView
android:id="@+id/textTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="short text"
android:layout_alignRight="@id/timestampTextView"
android:textSize="20sp"
android:layout_below="@+id/timestampTextView" />
<TextView
android:id="@+id/timestampTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:singleLine="true"
android:text="some long long long long text"
android:textSize="10sp" />
</RelativeLayout>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:gravity="right|top"
android:orientation="vertical" >
<RelativeLayout
android:id="@+id/messageRelativeLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/textTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignStart="@+id/timestampTextView"
android:layout_below="@+id/timestampTextView"
android:layout_centerVertical="true"
android:text="short text"
android:textSize="20sp" />
<TextView
android:id="@+id/timestampTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:singleLine="true"
android:text="some long long long long text"
android:textSize="10sp" />
</RelativeLayout>
</LinearLayout>