如果我以编程方式设置背景,则圆形布局将变为方形

时间:2016-07-22 14:25:45

标签: android user-interface mobile background

我遇到了一个无法找到解决方案的问题。我有一个圆形布局,我将随机颜色设置为背景。问题是,布局是方形而不是圆形。这是我的代码:

res / drawable中的椭圆形

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size
    android:width="@dimen/avatar_height"
    android:height="@dimen/avatar_height" />
</shape>

位于drawable / values / colors

中的颜色数组
    <integer-array name="avatar_colors">
    <item>@color/avatar_1</item>
    <item>@color/avatar_2</item>
    <item>@color/avatar_3</item>
    <item>@color/avatar_4</item>

</integer-array>

这是我的圈子布局

<RelativeLayout
                        android:id="@+id/letter_avatar"
                        android:layout_width="@dimen/avatar_height"
                        android:layout_height="@dimen/avatar_height"
                        android:background="@drawable/avatar">

                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:textSize="@dimen/textsize_splash_screen"
                            android:textColor="@color/jwhite"
                            android:layout_marginBottom="@dimen/gap_small"
                            android:text="A"
                            android:layout_centerInParent="true"/>
                    </RelativeLayout>

这就是我将随机颜色设置为背景的方式

    mLetterAvatar = (RelativeLayout) findViewById(R.id.letter_avatar);

  int[] androidColors = getResources().getIntArray(R.array.avatar_colors);
        int randomAndroidColor = androidColors[new Random().nextInt(androidColors.length)];
        mLetterAvatar.setBackgroundColor(randomAndroidColor);

这就是我得到的结果

enter image description here

注意:如果我没有以编程方式设置背景,则布局呈圆形(请参见下面的屏幕截图)

enter image description here

如何获取圆形布局并可选择以编程方式将颜色添加为背景?谢谢。

3 个答案:

答案 0 :(得分:1)

问题是你用这条线用纯色替换你的可绘制背景:

mLetterAvatar.setBackgroundColor(randomAndroidColor);

因此,如果你想改变圆形颜色,你应该有另一种颜色不同的形状,或者从代码中获取可绘制的颜色并设置颜色如下所述link

答案 1 :(得分:0)

我看到你将avatar.xml作为背景放在XML中,avatar_color.xml [带随机索引]作为代码。

答案 2 :(得分:0)

所以在一个忙碌的周末之后,我设法找到了基于Jonathan Aste回答的解决方案。我不知道这是否是最干净的方法,但在这里:

res / drawable中的

我创建了4种不同的背景颜色形状。

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">

<solid android:color="#ffcc00"/>
<size
    android:width="@dimen/avatar_height"
    android:height="@dimen/avatar_height" />

之后,我在res / values / arrays.xml中创建了这个数组。

<array name="random_avatar_array">
    <item>@drawable/avatar_green</item>
    <item>@drawable/avatar_yellow</item>
    <item>@drawable/avatar_red</item>
    <item>@drawable/avatar_blue</item>
</array>

在代码中,这就是我所做的

        if (view.getBackground() == null) {
        TypedArray avatars = getResources().obtainTypedArray(R.array.random_avatar_array);
        Drawable drawable = avatars.getDrawable(new Random().nextInt(avatars.length()));
        view.setBackground(drawable);
    }

希望它有所帮助。