我遇到了一个无法找到解决方案的问题。我有一个圆形布局,我将随机颜色设置为背景。问题是,布局是方形而不是圆形。这是我的代码:
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);
这就是我得到的结果
注意:如果我没有以编程方式设置背景,则布局呈圆形(请参见下面的屏幕截图)
如何获取圆形布局并可选择以编程方式将颜色添加为背景?谢谢。
答案 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);
}
希望它有所帮助。