根据方向改变背景图片。

3
我有一个看起来有两个简单解决方案的简单问题,但它们都对我不起作用,我似乎无法理解为什么。
我想在我的布局中拥有纵向视图背景和备选的横向视图背景。我将不同的图像分别放置在layout和layout-land文件夹中。
纵向 = 恰好应该是什么样子 横向 = 黑屏幕
然后我尝试创建一个名为drawable-land的文件夹,并在那里放置宽视图背景。相同的结果。
切换到纵向时黑屏幕。
我错过了什么吗?这似乎很简单,我无法理解我可能犯了什么错误。
提前感谢。
4个回答

5

为了根据屏幕方向来自动更改背景,请使用以下方法:

     @Override
     public void onCreate(Bundle savedInstanceState){
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);

     LinearLayout linearLayout = (LinearLayout)findViewById(R.id.layout);
     Resources res = getResources();
     Drawable portrait = res.getDrawable(R.drawable.portrait);
     Drawable landscape = res.getDrawable(R.drawable.landscape);

     WindowManager window = (WindowManager)getSystemService(WINDOW_SERVICE);
     Display display = window.getDefaultDisplay();
     int num = display.getRotation();
     if (num == 0){
         linearLayout.setBackgroundDrawable(portrait);
     }else if (num == 1 || num == 3){
         linearLayout.setBackgroundDrawable(landscape);
     }else{
        linearLayout.setBackgroundDrawable(portrait);
     }
    }

请试一下,希望有所帮助!


又出现了FC(程序崩溃)的问题。可能是因为图片仍在drawable-port和drawable-land中?显然,我仍然在Java中声明了它们,但这就是我能想到的了... - TheRedStig
好的,所以我把本地文件夹都改成了Drawable文件夹,现在在横屏模式下又出现了黑屏的问题......难道是横屏图片太大了或者其他什么原因吗? - TheRedStig
图片文件有多大?布局是什么样子的?另外,查看一下这个链接是否可以帮到你:https://dev59.com/X1jUa4cB1Zd3GeqPTqwE - chRyNaN
Logcat显示位图太大...下一步更改它。 - TheRedStig
1
太好了,现在运行得很好。我可以说,真高兴找到一个不介意编写代码来帮助我的人...这是我来这里最大的挫败感,每个人都对我的问题过于高深,而代码更容易理解。再次感谢。 - TheRedStig
显示剩余2条评论

2

1
感谢chRyNan提供的被采纳的答案,对我非常有用。由于Constraint Layout现在是默认布局,而setBackGroundDrawable已经过时了,所以这里提供了适用于2018年的另一个版本。请注意保留html标签。
super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_organization_key_enter);

    ConstraintLayout constraintLayout = (ConstraintLayout) findViewById(R.id.layout);
    Resources res = getResources();
    Drawable portrait = res.getDrawable(R.drawable.portrait);
    Drawable landscape = res.getDrawable(R.drawable.landscape);

    WindowManager window = (WindowManager)getSystemService(WINDOW_SERVICE);
    Display display = window.getDefaultDisplay();
    int num = display.getRotation();
    if (num == 0){
        constraintLayout.setBackground(portrait);
    }else if (num == 1 || num == 3){
        constraintLayout.setBackground(landscape);
    }else{
        constraintLayout.setBackground(portrait);
    }

0

确保两个图像文件具有相同的名称,即使文件包含不同的图像。例如,如果您在drawable-land和drawable-port文件夹中都有一个名为“background01.png”的图像,则以下内容将起作用:

   <ImageView
            android:id="@+id/imageView1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scaleType="fitXY"
            android:src="@drawable/background01" />

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接