我有一个全屏活动,我想以编程方式设置背景。我的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.不知道这是否相关,但是如果有人认为这很重要......
答案 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)]));
}