根据方向更改背景图像。

时间:2012-11-19 01:31:05

标签: android android-layout orientation

我有一个简单的问题似乎有两个简单的解决方案,这两个解决方案都不适合我,我似乎无法理解为什么。

我希望为我的布局设置纵向视图背景和备用横向背景。我将不同的图像分别放在单独的文件夹布局和布局 - 土地中。

portrait =到底应该是什么 landscape =黑屏

然后我尝试制作一个名为drawable-land的文件夹,并在那里放置宽视图背景。 同样的结果。

去画像时是黑色的。

有什么东西我不见了?这看起来很简单,我无法理解我可能做错了什么。

提前致谢。

4 个答案:

答案 0 :(得分: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);
     }
    }

尝试一下,我希望它有所帮助!

答案 1 :(得分:2)

基于Orientation的Drawable图像处理很容易,无需做任何额外的代码。 我们需要遵循一些可绘制的目录命名结构并相应地放置图像。 我想,这个链接会有很多帮助:http://developer.android.com/guide/topics/resources/providing-resources.html

答案 2 :(得分:1)

感谢chRyNan提供的接受答案,它确实对我有用。由于Constraint Layout现在是默认布局,因此不推荐使用setBackGroundDrawable。这是2018年的另一个版本。

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);
    }

答案 3 :(得分:0)

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

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