Добавить ImageView поверх TextView (ConstraintLayout)

Я не нашел способа поместить ImageView поверх TextView (ов) с помощью ConstraintLayout. Это должно выглядеть так, как на скриншоте ниже, но если я запустил свое приложение, изображение исчезнет.

Добавить ImageView поверх TextView (ConstraintLayout)

Редактировать:

Добавление android:translationZ = "2dp" в ImageView не решает проблему. Однако вот мой 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"
    xmlns:tools = "http://schemas.android.com/tools"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent">

    <TextView
        android:id = "@+id/line1"
        android:layout_width = "160dp"
        android:layout_height = "20dp"
        android:layout_marginStart = "8dp"
        android:layout_marginTop = "8dp"
        android:background = "@color/colorTableWhite"
        android:text = "Lorem ipsum"
        android:textAlignment = "center"
        app:layout_constraintStart_toStartOf = "parent"
        app:layout_constraintTop_toTopOf = "parent"
        tools:textColor = "@color/colorTableBlack" />

    <TextView
        android:id = "@+id/line2"
        android:layout_width = "160dp"
        android:layout_height = "20dp"
        android:layout_marginStart = "8dp"
        android:background = "@color/colorTableWhite"
        android:text = "Lorem ipsum"
        android:textAlignment = "center"
        app:layout_constraintStart_toStartOf = "parent"
        app:layout_constraintTop_toBottomOf = "@+id/line1"
        tools:textColor = "@color/colorTableBlack" />

    <TextView
        android:id = "@+id/line3"
        android:layout_width = "160dp"
        android:layout_height = "20dp"
        android:layout_marginStart = "8dp"
        android:background = "@color/colorTableRed"
        android:text = "Lorem ipsum"
        android:textAlignment = "center"
        app:layout_constraintStart_toStartOf = "parent"
        app:layout_constraintTop_toBottomOf = "@+id/line2"
        tools:textColor = "@color/colorTableWhite" />

    <ImageView
        android:id = "@+id/imageView"
        android:layout_width = "160dp"
        android:translationZ = "2dp"
        android:layout_height = "60dp"
        android:layout_marginStart = "8dp"
        android:foregroundGravity = "top"
        app:layout_constraintStart_toStartOf = "parent"
        app:layout_constraintTop_toBottomOf = "@+id/space2"
        app:srcCompat = "@drawable/ic_launcher_foreground" />

    <TextView
        android:id = "@+id/title"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_marginStart = "8dp"
        android:gravity = "left"
        android:text = "Lorem ipsum"
        android:textSize = "20sp"
        app:layout_constraintStart_toEndOf = "@+id/line1"
        app:layout_constraintTop_toBottomOf = "@+id/space2" />

    <TextView
        android:id = "@+id/description"
        android:layout_width = "0dp"
        android:layout_height = "36dp"
        android:layout_marginStart = "8dp"
        android:layout_marginEnd = "8dp"
        android:text = "Lorem ipsum dolor sit amet, consetetur sadipscing"
        app:layout_constraintEnd_toEndOf = "parent"
        app:layout_constraintStart_toEndOf = "@+id/line2"
        app:layout_constraintTop_toBottomOf = "@+id/title" />

    <Space
        android:id = "@+id/space2"
        android:layout_width = "225dp"
        android:layout_height = "8dp"
        app:layout_constraintEnd_toEndOf = "parent"
        app:layout_constraintHorizontal_bias = "0.426"
        app:layout_constraintStart_toStartOf = "parent"
        app:layout_constraintTop_toTopOf = "parent" />

    <Space
        android:id = "@+id/space"
        android:layout_width = "225dp"
        android:layout_height = "8dp"
        app:layout_constraintEnd_toEndOf = "parent"
        app:layout_constraintStart_toStartOf = "parent"
        app:layout_constraintTop_toBottomOf = "@+id/description" />

</android.support.constraint.ConstraintLayout>

app: layout_constraintTop_toBottomOf = "@ + id / space2", проверьте позицию space2.

navylover 21.10.2018 02:09

Не могли бы вы опубликовать больше xml, пожалуйста?

Aaron 21.10.2018 02:27

@ Аарон да, я сделал

Philipp Niedergesäß 21.10.2018 11:04
0
3
1 233
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я нашел два решения этой проблемы:

  1. Ваш minSdk = 24, поэтому использовать srcCompat не нужно. Попробуйте это изменить:

app:srcCompat = "@drawable/ic_warning"

к этому:

android:background = "@drawable/ic_warning"

  1. Если вы предпочитаете использовать app: srcCompat, вам следует немного изменить свой метод getView в TemplateRow.class. Ниже модифицированная версия метода getView ():

    public View getView(int position, View convertView, ViewGroup parent) {
    // Get the data item for this position
    DisplayTemplate displayTemplate = getItem(position);
    // Check if an existing view is being reused, otherwise inflate the view
    ViewHolder viewHolder; // view lookup cache stored in tag
    
    final View result;
    
    if (convertView == null) {
    
        viewHolder = new ViewHolder();
        LayoutInflater inflater = LayoutInflater.from(getContext());
        convertView = inflater.inflate(R.layout.template, parent, false);
        viewHolder.line1 = convertView.findViewById(R.id.line1);
        viewHolder.line2 = convertView.findViewById(R.id.line2);
        viewHolder.line3 = convertView.findViewById(R.id.line3);
        viewHolder.title = convertView.findViewById(R.id.title);
        viewHolder.description = convertView.findViewById(R.id.description);
        viewHolder.imageView = convertView.findViewById(R.id.imageView);
    
        result = convertView;
    
        convertView.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) convertView.getTag();
        result = convertView;
    }
    
    Animation animation = AnimationUtils.loadAnimation(mContext, (position > lastPosition) ? R.anim.up_from_bottom : R.anim.down_from_top);
    result.startAnimation(animation);
    lastPosition = position;
    
    
    viewHolder.title.setText(displayTemplate.getTitle());
    viewHolder.description.setText(displayTemplate.getDescription());
    
    Drawable drawable = parent.getResources().getDrawable(R.drawable.ic_warning, null);
    viewHolder.imageView.setImageDrawable(drawable);
    
    showModel(viewHolder.line1,displayTemplate.getLines().get(0));
    showModel(viewHolder.line2,displayTemplate.getLines().get(1));
    showModel(viewHolder.line3,displayTemplate.getLines().get(2));
    // Return the completed view to render on screen
    return convertView;}
    

У меня минимальный уровень API 24. К сожалению, оба варианта мне не помогли. Я добавил полный xml сейчас

Philipp Niedergesäß 21.10.2018 11:06

Я пробовал ваш XML только что изменил цвета, он работает с повышением или без него. CompileSDK: 28 и minSDK: 24 Получил снимок экрана: imgur.com/a/V7Nja5u Возможно, в вашем коде есть что-то, что делает ваше представление невидимым или меняет его положение.

Sinan Ceylan 21.10.2018 16:45

Я этого не понимаю. Я проверил это и никогда ничего не делал с ImageView в коде. Единственное, что я делаю, это помещаю это в список. Если хотите, можете посмотреть здесь: github.com/Philipp97714/LenaControl

Philipp Niedergesäß 21.10.2018 20:05

Ok. Я сейчас ищу

Sinan Ceylan 21.10.2018 20:09

Поскольку вы используете app:srcCompat, либо измените ImageView на AppCompatImageView в вашем XML-макете:

<android.support.v7.widget.AppCompatImageView
    android:id = "@+id/imageView"
    android:layout_width = "160dp"
    android:translationZ = "2dp"
    android:layout_height = "60dp"
    android:layout_marginStart = "8dp"
    android:foregroundGravity = "top"
    app:layout_constraintStart_toStartOf = "parent"
    app:layout_constraintTop_toBottomOf = "@+id/space2"
    app:srcCompat = "@drawable/ic_launcher_foreground" />

Или замените app:srcCompat на android:src:

<ImageView
    android:id = "@+id/imageView"
    android:layout_width = "160dp"
    android:layout_height = "60dp"
    android:layout_marginStart = "8dp"
    android:foregroundGravity = "top"
    android:translationZ = "2dp"
    app:layout_constraintStart_toStartOf = "parent"
    app:layout_constraintTop_toBottomOf = "@+id/space2"
    android:src = "@drawable/ic_warning" />

Хорошие решения @Aaron. Проще и лучше, чем у меня.

Sinan Ceylan 23.10.2018 17:21

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