3

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

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

纵向=应该是什么横向=黑屏

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

去肖像时黑色。

我有什么遗漏吗?这看起来很简单,我无法理解我可能做错了什么。

提前致谢。

4

4 回答 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);
     }
    }

试试看,希望对你有帮助!

于 2012-11-19T01:49:55.630 回答
2

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

于 2015-03-17T09:50:57.360 回答
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);
    }
于 2018-04-16T05:26:48.727 回答
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" />
于 2014-11-17T15:23:00.250 回答