- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想知道是否有可能实现以下(消息线程;首先从发件人的右侧开始,而不是收件人的一侧) View :
...使用支持库中的 Android 约束而不是 maxWidth 属性,特别是文本气泡的宽度 - 我非常想要容器的宽度(由 TextView 及其圆形背景组成,以及发件人的 ImageView icon) 宽度最多为屏幕的五分之四,然后像标准消息应用程序一样相应地包裹下面的以下文本行。因为截至目前,我无法使用约束准则实现它,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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_width="match_parent"
android:layout_height="wrap_content">
<android.support.constraint.Guideline
android:id="@+id/left_margin_guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.2"/>
<android.support.constraint.ConstraintLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:padding="@dimen/padding_one_half"
app:layout_constraintStart_toEndOf="@+id/left_margin_guideline"
app:layout_constraintEnd_toEndOf="parent">
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/message_icon"
android:layout_width="@dimen/conversation_icon_size"
android:layout_height="@dimen/conversation_icon_size"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
tools:src="@drawable/ic_toolbar_logo"/>
<io.github.rockerhieu.emojicon.EmojiconTextView
android:id="@+id/message_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ic_curved_corners_message"
android:padding="@dimen/padding_one_half"
android:layout_marginRight="@dimen/padding_one_half"
android:layout_marginEnd="@dimen/padding_one_half"
app:layout_constraintEnd_toStartOf="@+id/message_icon"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
tools:text="This is a message that should wrap if it gets too long or if there is a \nnewline in the middle of the message"/>
<TextView
android:id="@+id/message_posted"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/font_small"
android:textColor="@color/colorGrayXLight"
android:layout_marginTop="@dimen/padding_one_half"
app:layout_constraintTop_toBottomOf="@+id/message_text"
app:layout_constraintEnd_toEndOf="@+id/message_text"
tools:text="2:45 PM"/>
</android.support.constraint.ConstraintLayout>
</android.support.constraint.ConstraintLayout>
...结果是:
如您所见,消息文本从一开始就被截断了,如果我用父级设置文本的开始约束,那么单行文本(即单行文本)的整个目的就落空了word),因为当我希望它像上面屏幕截图中顶部的那样被包裹时,文本的宽度将与居中的文本相匹配。
综上所述,如果我能在有约束的情况下解决这个问题就好了,因为我希望这个布局在其他屏幕尺寸上尽可能地响应,而不使用带有硬编码值的 maxWidth 属性或者根据屏幕大小以编程方式设置它,我发现这在样板代码方面非常不方便,尤其是对于消息线程 View 。
最佳答案
是的,您可以在该文本元素上使用偏置居中约束(左 + 右 + 偏置 1)和 constrainedWidth(使用 ConstraintLayout 1.1)来实现:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textView7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="32dp"
android:layout_marginEnd="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="32dp"
android:text="a message that should wrap if it is too long or if there is a space in the middle of the text"
app:layout_constrainedWidth="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/imageView2"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/imageView2"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@mipmap/ic_launcher_round" />
<TextView
android:id="@+id/textView8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="2:45 PM"
app:layout_constraintEnd_toStartOf="@+id/imageView2"
app:layout_constraintTop_toBottomOf="@+id/textView7" />
</android.support.constraint.ConstraintLayout>
用它正确适应的较短消息替换文本:
关于android - 使用 Constraints 而不是 maxWidth 属性来限制宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49467308/
如果我尝试将 'android:maxWidth="400dp"' 添加到以下 ImageView,什么也没有发生...和想法? 最佳答案 对于遇到此问题的任何其他人:我必须将其包装在 FrameL
我想设置编辑框的最大宽度。所以我创建了这个小布局: 但它不起作用,盒子无论如何可能超过 150 dp。 EditText 中的 android:maxWidth="150dp" 将给出相
这个问题源于无法让我的 TextBlock 换行。基本上作为最后的尝试,我在容器网格的列上设置 MaxWidth。我惊讶地发现我的子标签和文本框仍然可以为所欲为(坏 child ,BAD),并且不受我
http://jsfiddle.net/ndpnU/2/ 我想设置 maxWidth,但找不到任何解决方案,您可以帮助我吗? 我用这个: $("#one").resizable({ minWi
我在仅使用可用视口(viewport)设置颜色框时遇到问题。一旦我设置了 maxHeight 或 maxWidth 属性,就不会显示任何图像。颜色框打开,但停留在“旋转轮”处。 function sh
我有一个带有 DataTemplate 设置的数据绑定(bind) ListBox。 DataTemplate 包含一个具有 Auto 和 * 两个列宽的 Grid 控件。我希望此列始终填充 List
我有一个使用 maxWidth 定义的 jqueryui 对话框。 $("#myDialog").dialog({ autoOpen: false, width: 'a
我的鳕鱼是这样的: COMMENT var img = new Image(); img.onload = function () { alert(this.width); } img.src =
忽略 JavaFx 8 最大宽度 对于具有更宽内容的 HBox 子项,将忽略 maxWidth。 例如,下面的中心 Pane 太大,延伸到右列 (Pane) 下:
我试图在 Android 中的 EditText 上应用 maxWidth。但是属性似乎被忽略了。事实上,我只是想让一个 EditText 在屏幕中央对齐,并为大屏幕设置最大尺寸。这是我的代码:
我需要获取特定字体的任意字符的最大宽度(以磅为单位)。 基本上,我有一个字符串数组,全部都有四个字符。我需要计算这些字符串之一可能的最大宽度是多少。 UIFont 有很多计算不同情况下高度的方法,但没
我有以下布局: 在代码中,我使用以下设置用户可自定义的 maxWidth 大小: textview.setMaxWidth(768); 我面临的问题是,maxWidth 设置只能
Windows 7 SP1 MSVS 2010 Qt 4.8.4 我想确定 QLineEdit 小部件的最大大小,知道必须放入其中的最大字符数。 因此,我想使用: int QFontMetrics::
使用fill_parent时,maxWidth无效。 最佳答案 maxWidth 属性对match_parent(或已弃用的fill_parent)的
我有一个在 XAML 中定义的 WPF 窗口,如下所示: ..... ..... 问题是当窗口被创建并显示在屏幕上时 - 它总是大于我在宽度定义中指定的 70 像素。宽度大概是 80-90 像素。
documentation对于 Paint.breakText说 breakText int breakText (CharSequence text, int sta
考虑这段代码: var img = new Image(); img.onload = function() { console.log(this.width); }; img.src = '
我正在尝试为 Angular ng-grid 元素创建一些自动调整大小的属性: for (var i = 0; i < $scope.dates.length; i++) {
我在内容中得到了 RelativeLayout: android:maxWidth="350dp" 不起作用。对于 layout_width 和 layout_height 使用 wrap_cont
我想知道是否有可能实现以下(消息线程;首先从发件人的右侧开始,而不是收件人的一侧) View : ...使用支持库中的 Android 约束而不是 maxWidth 属性,特别是文本气泡的宽度 - 我
我是一名优秀的程序员,十分优秀!