无法为图像视图设置约束

时间:2018-03-20 13:52:04

标签: android android-layout imageview constraints

首先我要强调的是,我花了很长时间寻找一个答案,也许我没有找到一个因为我不是真的了解它是如何工作的。 我正在设置UI,但无法通过修改其约束来移动图像视图。基本上我的问题是修改约束似乎不会修改图像的位置。

这是我的布局:

    <?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"
    tools:context="geoensea.ensea.com.geoensea.MainActivity">

    <Button
        android:id="@+id/button"
        android:layout_width="80dp"
        android:layout_height="41dp"
        android:layout_marginBottom="60dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:text="@string/button_send"
        android:visibility="visible"
        app:layout_constraintBottom_toTopOf="@+id/imageView"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/textView"
        app:layout_constraintTop_toTopOf="parent" />

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="326dp"
        android:layout_height="320dp"
        android:layout_marginBottom="16dp"
        android:layout_marginStart="16dp"
        android:layout_marginTop="8dp"
        android:contentDescription="@string/map_rdc"
        android:src="@drawable/ic_two_men"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView"
        app:layout_constraintVertical_bias="0.541" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="165dp"
        android:layout_height="74dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:text="@string/title"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>

我的主要活动

    package geoensea.ensea.com.geoensea;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.LinearLayout;

public class MainActivity extends AppCompatActivity {

    LinearLayout mLinearLayout;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //Image

            // Create a LinearLayout in which to add the ImageView
            mLinearLayout = new LinearLayout(this);

            // Instantiate an ImageView and define its properties
            ImageView i = new ImageView(this);
            i.setImageResource(R.drawable.ic_two_men);

            // set the ImageView bounds to match the Drawable's dimensions
            i.setAdjustViewBounds(true);
            i.setLayoutParams(new Gallery.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
                    LinearLayout.LayoutParams.WRAP_CONTENT));

            // Add the ImageView to the layout and set the layout as the content view
            mLinearLayout.addView(i);
            setContentView(mLinearLayout);

        //Button new activity

    }
}

图像始终位于布局的左上角:

Here is an image of the problem

1 个答案:

答案 0 :(得分:0)

你实际上并没有说出问题是什么,但我看到你的ImageView声明了水平偏差。如果没有指定开始和结束约束,它将无法工作。

<ImageView
    android:id="@+id/imageView"
    android:layout_width="326dp"
    android:layout_height="320dp"
    android:contentDescription="@string/map_rdc"
    android:src="@drawable/ic_two_men"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/textView"
    app:layout_constraintVertical_bias="0.5"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.5" />

澄清此代码:您已为视图指定了开始和结束约束,并将其宽度设置为给定值。在这种情况下,有边缘(在scren边缘和视图边缘之间)。 Android必须计算它们,并且它使用垂直偏置参数(dafault设置为0.5)来执行此操作。水平偏差只是左右边距的比率(0.5:边距相等,0:左边距等于0,1:右边距等于0)。

编辑:

您想在onCreate方法中使用此代码得到什么?只是做简单:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.ID_OF_THE_XML_YOU'VE_PASTED);
}

你知道你没有真正使用你的xml文件吗?您在屏幕上看到的所有内容都是在onCreate方法中动态生成的!

只是为了100%确定你理解一切。你的xml文件(这个我们一直在讨论的文件)有它的名字......例如activity_main.xml。在这种情况下输入:

setContentView(R.layout.activity_main)