Я пытаюсь добиться стиля текстового поля, подобного изображенному ниже.

Я попытался создать текстовое представление динамически, и у меня получилось что-то вроде этого. Может ли кто-нибудь помочь мне добиться стиля, подобного изображенному выше?
Ниже приведен блок кода, который я использовал для достижения указанного выше стиля.
chat_bubble.xml
<?xml version = "1.0" encoding = "utf-8"?>
<shape xmlns:android = "http://schemas.android.com/apk/res/android"
android:shape = "rectangle">
<solid android:color = "#D8000000" />
<corners android:bottomLeftRadius = "1dp" android:radius = "4dp" />
</shape>
Activity.kt
fun createTextView(activity: PlacesActivity){
var textView = TextView(this)
textView.setText("Text ABCDD")
textView.textSize = 24F
textView.alpha = 0F
textView.setTextColor(Color.MAGENTA)
textView.setBackgroundResource(R.drawable.chat_bubble)
textView.setPadding(10,10,10,10)
var params =
LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(50,50,50,50)
textView.setLayoutParams(params)
linearLayout.addView(textView, params);
fadeMarker(textView)
}
Заранее спасибо.
Создайте форму для фона пузыря чата:
shape_pill_background.xml
<?xml version = "1.0" encoding = "utf-8"?>
<shape xmlns:android = "http://schemas.android.com/apk/res/android"
android:shape = "rectangle">
<corners
android:bottomLeftRadius = "40dp"
android:bottomRightRadius = "40dp"
android:radius = "40dp"
android:topLeftRadius = "40dp"
android:topRightRadius = "40dp" />
<solid android:color = "#555555" />
<padding
android:bottom = "0dp"
android:left = "0dp"
android:right = "0dp"
android:top = "0dp" />
<size android:height = "40dp" />
</shape>
создайте свою стрелку, которую можно рисовать:
shape_arrow_down.xml
<?xml version = "1.0" encoding = "utf-8"?>
<layer-list xmlns:android = "http://schemas.android.com/apk/res/android">
<item>
<rotate
android:fromDegrees = "45"
android:pivotX = "230%"
android:pivotY = "30%"
android:toDegrees = "45">
<shape android:shape = "rectangle">
<solid android:color = "#555555" />
</shape>
</rotate>
</item>
</layer-list>
найдите актив, который лучше всего представляет вашу «золотую» стрелку, я взял встроенный векторный ресурс студии Android, который будет называться ic_arrow_forward_wattle_24dp.xml. Создайте свой макет:
<?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"
android:layout_width = "match_parent"
android:layout_height = "match_parent">
<android.support.constraint.ConstraintLayout
android:id = "@+id/constraintLayoutTextBubble"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_marginEnd = "8dp"
android:layout_marginStart = "8dp"
android:layout_marginTop = "8dp"
android:background = "@drawable/shape_pill_background"
android:padding = "16dp"
app:layout_constraintEnd_toEndOf = "parent"
app:layout_constraintStart_toStartOf = "parent"
app:layout_constraintTop_toTopOf = "parent">
<TextView
android:id = "@+id/textViewInput"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_marginBottom = "8dp"
android:layout_marginEnd = "8dp"
android:layout_marginStart = "8dp"
android:layout_marginTop = "8dp"
android:background = "#919191"
android:padding = "4dp"
android:text = "This is a text message"
app:layout_constraintBottom_toBottomOf = "parent"
app:layout_constraintEnd_toStartOf = "@+id/imageViewArrow"
app:layout_constraintHorizontal_chainStyle = "packed"
app:layout_constraintStart_toStartOf = "parent"
app:layout_constraintTop_toTopOf = "parent" />
<ImageView
android:id = "@+id/imageViewArrow"
android:layout_width = "32dp"
android:layout_height = "32dp"
android:layout_marginEnd = "8dp"
app:layout_constraintBottom_toBottomOf = "@+id/textViewInput"
app:layout_constraintEnd_toEndOf = "parent"
app:layout_constraintHorizontal_bias = "0.5"
app:layout_constraintStart_toEndOf = "@+id/textViewInput"
app:layout_constraintTop_toTopOf = "@+id/textViewInput"
app:srcCompat = "@drawable/ic_arrow_forward_wattle_24dp" />
</android.support.constraint.ConstraintLayout>
<View
android:id = "@+id/viewDownArrow"
android:layout_width = "22dp"
android:layout_height = "40dp"
android:layout_marginEnd = "8dp"
android:layout_marginStart = "8dp"
android:background = "@drawable/shape_arrow_down"
app:layout_constraintEnd_toEndOf = "@+id/constraintLayoutTextBubble"
app:layout_constraintStart_toStartOf = "@+id/constraintLayoutTextBubble"
app:layout_constraintTop_toBottomOf = "@+id/constraintLayoutTextBubble" />
</android.support.constraint.ConstraintLayout>
Результат будет таким:
Однако с этим есть несколько проблем. Когда у вас довольно большое сообщение, оно вытолкнет стрелку ImageView из пузыря из-за того, как wrap_content работает в цепочках и макете ограничений. Я предлагаю вам попробовать дать текстовому сообщению фиксированную ширину или установить ее ширину в соответствии с ограничениями. Это придаст вашему тексту серый фон там, где нет текста. Поиграйте с ним и посмотрите, что лучше всего подходит для вас.
Спасибо, бко. Но я пытаюсь создать все это динамически. (поскольку на основе вывода json количество текстовых представлений в прокручиваемом макете может измениться.) Поэтому я боюсь, что это не так просто, как использование файла макета. Но да, еще раз спасибо за код. Я постараюсь использовать это и постараюсь создавать их динамически