Android - стиль фона текстового поля

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

Я попытался создать текстовое представление динамически, и у меня получилось что-то вроде этого. Может ли кто-нибудь помочь мне добиться стиля, подобного изображенному выше?

Android - стиль фона текстового поля

Ниже приведен блок кода, который я использовал для достижения указанного выше стиля.

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)

}

Заранее спасибо.

0
0
966
1

Ответы 1

Создайте форму для фона пузыря чата:

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 количество текстовых представлений в прокручиваемом макете может измениться.) Поэтому я боюсь, что это не так просто, как использование файла макета. Но да, еще раз спасибо за код. Я постараюсь использовать это и постараюсь создавать их динамически

ASN 08.04.2018 16:35

Другие вопросы по теме