以编程方式设置活动背景时的背景黑色

时间:2016-10-09 15:59:57

标签: android

我有一个全屏活动,我想以编程方式设置背景。我的drawable文件夹中有四个不同的图像,每次创建活动时,我想随机选择一个作为背景。这是我的代码:

LayoutInflater inflater = getLayoutInflater();
FrameLayout layout = (FrameLayout) inflater.inflate(R.layout.activity_my, null);
int[] images = {R.drawable.img1,R.drawable.img2,R.drawable.img3,R.drawable.img4};
Random rand = new Random();
layout.setBackgroundResource(images[rand.nextInt(images.length)]);

这是XML文件:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.mkessler.MyApp.MyActivity">


<TextView
    android:id="@+id/fullscreen_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:keepScreenOn="true"
    android:textColor="#33b5e5"
    android:textSize="50sp"
    android:textStyle="bold" />


<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <LinearLayout
        android:id="@+id/fullscreen_content_controls"
        style="?metaButtonBarStyle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|center_horizontal"
        android:background="@color/black_overlay"
        android:orientation="horizontal"
        tools:ignore="UselessParent">

        <Button
            android:id="@+id/dummy_button"
            style="?metaButtonBarButtonStyle"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Unimportant text"
            android:onClick="someFunction"/>

    </LinearLayout>
</FrameLayout>

然而,当我在手机上运行应用程序时,背景只是黑色。当我尝试使用特定的一个图像设置它时,也会发生同样的情况。不用说,当我从XML文件设置它时,它工作正常。

编辑: 只是为了澄清,即使我尝试以编程方式将其设置为给定图像而不是XML文件,我也会得到黑色背景。我认为专注于问题的随机方面并不会随处可见。

编辑#2:我的项目的最低API设置为15.不知道这是否相关,但是如果有人认为这很重要......

2 个答案:

答案 0 :(得分:2)

不能通过LayoutInflater查看,如果您的Activity具有xml布局而您调用了setContentView(int resId),则只需找到根视图并设置背景。

FrameLayout layout = (FrameLayout) findViewById(...);
layout.setBackgroundResource(images[rand.nextInt(images.length)]);

如果您想通过LayoutInflater获取观看次数:

LayoutInflater inflater = getLayoutInflater();
FrameLayout layout = (FrameLayout) inflater.inflate(R.layout.activity_my, null);
layout.setBackgroundResource(images[rand.nextInt(images.length)]);
setContentView(layout);

答案 1 :(得分:0)

试试这个:

LayoutInflater inflater = getLayoutInflater();
FrameLayout layout = (FrameLayout) inflater.inflate(R.layout.activity_my, null);
int[] images = {R.drawable.img1,R.drawable.img2,R.drawable.img3,R.drawable.img4};
Random rand = new Random();

final int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
    layout.setBackgroundDrawable(getResources().getDrawable(images[rand.nextInt(images.length)]));
} else {
    layout.setBackground(getResources().getDrawable(images[rand.nextInt(images.length)]));
}