如何使用最大宽度的wrap_content?

我想布置一个视图,应该包装它的内容,但不应该比它的父宽度less100多pd。 我怎么能使用RelativeLayout或其他布局? 我现在所拥有的东西总是会使视图100dp比它的父母less,这样就有了另一个视图的空间。

这张照片是我所拥有的一个例子:

在这里输入图像说明

正如你所看到的,文字不会填满整个框,所以它可能会更小。 但是,它不应该比其父母大100dp,这样消息发送的时间就有空间。

这是我的布局。

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:clipChildren="false" android:orientation="vertical" android:paddingBottom="10dp" android:paddingRight="@dimen/horizontalMargin" android:paddingTop="10dp"> <TextView android:id="@+id/message_holder" android:layout_toLeftOf="@id/blank" android:layout_alignParentLeft="true" android:layout_marginLeft="@dimen/horizontalMargin" android:background="@drawable/message_corners" style="@style/white_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="alsdkjf; alsdkf" /> <RelativeLayout android:id="@+id/blank" android:layout_width="wrap_content" android:layout_height="1dp" android:layout_alignParentRight="true" android:minWidth="100dp"> </RelativeLayout> <TextView android:minWidth="100dp" android:id="@+id/time" style="@style/gray_text" android:layout_toRightOf="@id/message_holder" android:paddingLeft="10dp" android:text="Yesterday,\n11:30 PM" /> <RelativeLayout android:layout_width="40dp" android:layout_height="40dp" android:layout_alignBottom="@id/message_holder" android:layout_alignParentLeft="true" android:background="@drawable/triangle" /> </RelativeLayout> 

我曾尝试使用消息框右侧的空白视图上的“minWidth”属性来提供间距,但它不调整大(这将使消息框更小)。 当我没有空白视图时,只需将TextView放置到消息框的右侧,那么当消息框展开时,TextView就不可见。

更新:

这是我的“message_corners.xml”:

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="@color/green" > </solid> <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" > </padding> <corners android:radius="10dp"> </corners> </shape> 

更新2:

这是我正在寻找与短文本的布局:

在这里输入图像说明

这是我在寻找长文本的布局:

在这里输入图像说明

Solutions Collecting From Web of "如何使用最大宽度的wrap_content?"

在这里,你去做一个完全按照你的意愿做的布局。

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:clipChildren="false" android:paddingBottom="10dp" android:paddingRight="10dp" android:paddingTop="10dp"> <RelativeLayout android:id="@+id/blank" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#aaaaaa"> <LinearLayout android:id="@+id/message_container" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingRight="100dp"> <TextView android:id="@+id/message" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello?" android:background="#00ff00" /> </LinearLayout> <TextView android:id="@+id/time" android:layout_width="100dp" android:layout_height="wrap_content" android:layout_toRightOf="@id/message_container" android:layout_marginLeft="-100dp" android:text="12:30 PM" android:background="#ff0000" /> </RelativeLayout> </RelativeLayout> 

短消息 短消息

长信息 长信息

这个问题的作者真正要问的是,如何让TextView展开以适应其内部的信息,而不会溢出时间TextView,也不会留下空白。

既然你实际上不知道整个屏幕的宽度,你不能告诉你的TextView比它less100dp。 你应该做的是将你的TextView包装在一个容器中,该容器将有toLeftOf规则,而TextView只包装它的内容。 这样, 容器会一直向上扩展 (没有溢出TextView的时间), 但是TextView只会包装它的文本内容 (所以它不会扩展任何空格)

代替

 <TextView android:id="@+id/message_holder" android:layout_toLeftOf="@id/blank" android:layout_alignParentLeft="true" android:layout_marginLeft="@dimen/horizontalMargin" android:background="@drawable/message_corners" style="@style/white_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="alsdkjf; alsdkf" /> 

使用

 <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toLeftOf="@id/blank" android:layout_alignParentLeft="true" android:layout_marginLeft="@dimen/horizontalMargin"> <TextView android:id="@+id/message_holder" android:background="@drawable/message_corners" style="@style/white_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="alsdkjf; alsdkf" /> </LinearLayout> 

顺便说一句,你的布局不是很好。 你应该优化它。

你可以尝试下面的视图排列和宽度:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="6dp" > <FrameLayout android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@android:color/holo_blue_bright" tools:text="Some long test is this which is support to wrap at the end of parent view" /> </FrameLayout> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="6dp" tools:text="Yesterday,\n 11:30 PM" /> </LinearLayout> 

如果你想在右边做文本,在左边写文本信息,你可以做类似的事情(在相对布局中使用),你也可以使用maxWidth而不是minWidth

 <TextView android:id="@+id/view_textView_timeText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true"/> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_toLeftOf="@id/view_textView_timeText" android:maxWidth="100dp"/> 

你可以做的是在2个视图之间放置一个空视图,并保持其宽度为MATCH_PARENT,并将textview分配给这个空视图的左边,将空视图分配给date视图的左边。 只要确保保持视图为空。

据我所知,你想要使布局或文本视图比屏幕尺寸小100 DP,你可以通过获得由此完成的像素的屏幕宽度

 Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); int width = size.x; int height = size.y; 

然后,你可以设置textbiew宽度从屏幕尺寸小于100dp希望这个帮助Ps我想你可能想转换DP到PX,但我不知道

你可以这样做( 不是问题的直接答案 ):

  <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="bottom" android:orientation="horizontal"> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:ellipsize="end" android:maxLines="1" android:paddingLeft="45px" android:text="asdfadsfsafasdfsakljkljkhjhkkhjkjhjkjhjkhjkhljkhlkhjlkjhljkhljkhlkjhljkhljkhlfasd" android:textColor="#4a4a4a" android:textSize="40px" /> </LinearLayout> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:maxLines="1" android:paddingLeft="45px" android:paddingRight="48px" android:text="2017.08.09 13:00" android:textColor="#9b9b9b" android:textSize="34px" /> </LinearLayout>