使imageview居中并使其成为屏幕宽度的50%而没有约束线?

时间:2018-08-08 15:29:12

标签: android android-layout user-interface imageview

我正在尝试将图像居中,并使其达到屏幕宽度的50%。我尝试使用权重为线性的布局,如下所示:

<LinearLayout
    android:baselineAligned="false"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:weightSum="100">
    <ImageView
         android:id="@+id/imageView"
         android:layout_width="0dp"
         android:layout_height="match_parent"
         android:contentDescription="@string/additionContent"
         app:srcCompat="@drawable/ic_additivecolor"
         android:layout_weight="50"/>

</LinearLayout>

这正确设置了宽度,我知道如何居中,但高度与父项匹配。如果将高度设置为wrap_content,则图像会变得很小。 constraintDimensionRatio也不起作用。我该如何解决?

enter image description here

高度为wrap_content的图像。

enter image description here

编辑

我尝试了Sudhi的方法,结果就是这样:

enter image description here

图像居中,但所提供的代码未调整尺寸。 编辑2:

我尝试了Mtak的回答。这是结果。

enter image description here

这填满了我的屏幕。因此,我删除了两个视图。

enter image description here

看起来好多了,但是LinearLayout占用了太多空间,因为它是match_parent。我尝试将其更改为wrap_content:

 <LinearLayout
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:orientation="vertical"
     android:weightSum="100">

然后发生这种情况:

enter image description here

我现在发现了许多工作宽度的方法,但是我希望高度相同。大多数时候,高度占据了整个屏幕,这不是我想要的。

很抱歉造成混乱。这就是我想要的:

enter image description here

如您所见,图像的高度和宽度相等。另外,无论布局包含图像是什么,都不会一直延伸到底部,而是包裹内容(这是我现在的主要工作)。

4 个答案:

答案 0 :(得分:0)

使用固定高度

android:layout_height="100dp"

答案 1 :(得分:0)

使用约束布局。 使用“准则”并设置图片属性“ AdjustViewBounds” = true。

答案 2 :(得分:0)

我认为要进行对齐,您需要使用布局重力,并且要使图像视图的大小占屏幕的50%,您可以遵循以下代码。

 final View rootView = findViewById(R.id.llRoot);

    rootView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
        @Override
        public boolean onPreDraw() {
            if (rootView.getViewTreeObserver().isAlive())
                rootView.getViewTreeObserver().removeOnPreDrawListener(this);
            int width=rootView.getWidth();
            ImageView ivIcon=findViewById(R.id.ivIcon);
            ivIcon.getLayoutParams().width=width/2;
            ivIcon.requestLayout();
            // put your code here
            return false;
        }
    });

Xml看起来像这样

    <LinearLayout
    android:id="@+id/llRoot"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal">


    <ImageView
        android:id="@+id/ivIcon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:srcCompat="@drawable/square_img" />

</LinearLayout>

结果将是

enter image description here

答案 3 :(得分:0)

使用外部线性布局,该布局具有上下两个虚拟视图:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:weightSum="100">

    <View
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="25"/>

    <LinearLayout
        android:baselineAligned="false"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:orientation="horizontal"
        android:gravity="center"
        android:layout_weight="50"
        android:weightSum="100"
        android:layout_gravity="center">

        <ImageView
            android:id="@+id/imageView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:contentDescription="@string/additionContent"
            app:srcCompat="@drawable/ic_additivecolor" />

    </LinearLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="25"/>

</LinearLayout>