什么可以替代getWidth()和getHeight()来判断宽度和高度哪个更大

10
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Display;
import android.view.WindowManager;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        FragmentManager fm=getFragmentManager();
        FragmentTransaction ft= fm.beginTransaction();


        WindowManager wm= getWindowManager();
        Display d=wm.getDefaultDisplay();

        if (d.getWidth()>d.getHeight())
        {
            Fragment1 f1 = new Fragment1();
            ft.replace(android.R.id.content, f1);
        }
        else
        {
            Fragment2 f2 = new Fragment2();
            ft.replace(android.R.id.content, f2);
        }
    ft.commit();
    }
}

我正在尝试在Android中使用片段,并希望在显示器宽度大于显示器高度时显示fragment1,在显示器高度大于显示器宽度时显示fragment2,但是当使用getWidth()getHeight()时,Android Studio会提示这些方法已经过时。那么如何知道何时宽度更大,何时高度更大?


1
你是想在竖屏时显示片段1,在横屏时显示片段2吗? - A.s.ALI
@Shararti KAKA 是的...我正在尝试做同样的事情。 - Ankit
使用 DisplayMetrics - IntelliJ Amiya
2
当你在短短几分钟内得到四个答案时,这肯定表明你没有做足够的研究。 - Mike M.
5个回答

4

使用 DisplayMetrics 代替 Display

试试这样:

import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Display;
import android.view.WindowManager;
import android.util.DisplayMetrics;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        FragmentManager fm=getFragmentManager();
        FragmentTransaction ft= fm.beginTransaction();

        DisplayMetrics displayMetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        int height = displayMetrics.heightPixels;
        int width = displayMetrics.widthPixels;

        if (width > height)
        {
            Fragment1 f1 = new Fragment1();
            ft.replace(android.R.id.content, f1);
        }
        else
        {
            Fragment2 f2 = new Fragment2();
            ft.replace(android.R.id.content, f2);
        }

        ft.commit();
    }
}

@Ankit 请阅读这篇文章:http://stackoverflow.com/help/someone-answers - Ferdous Ahamed
先生,我正准备勾选复选框,但网站警告我只有在10分钟后才能勾选,所以我一直在等待。 - Ankit
您已经接受了这个答案。谢谢 :) 请确保稍后点赞。 - Ferdous Ahamed
已经完成,朋友。 - Ankit
之前您接受了我的答案,但现在您改变了它。请问是什么原因呢? - Ferdous Ahamed

3
您可以使用 DisplayMetrics
DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int height = displaymetrics.heightPixels;
int Width = displaymetrics.widthPixels;

if (Width  > height )
    {
        Fragment1 f1 = new Fragment1();
        ft.replace(android.R.id.content, f1);
    }
    else
    {
        Fragment2 f2 = new Fragment2();
        ft.replace(android.R.id.content, f2);
    }

感谢您的回答和宝贵时间。 - Ankit

2
DisplayMetrics displaymetrics = new DisplayMetrics();
mContext.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int screenWidth = displaymetrics.widthPixels;
int screenHeight = displaymetrics.heightPixels;

1
使用这个来获取宽度和高度。
int Measuredwidth = 0;  
int Measuredheight = 0;  
Point size = new Point();
WindowManager wm = getWindowManager();

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)    {
    wm.getDefaultDisplay().getSize(size);
    Measuredwidth = size.x;
    Measuredheight = size.y; 
}else{
    Display d = w.getDefaultDisplay(); 
    Measuredwidth = d.getWidth(); 
    Measuredheight = d.getHeight(); 
}

这个 x 和 y 是从哪里来的? - Ankit
它显示了以像素为单位的x和y维度。 - Fathima km

1

尝试

 context.getWindowManager().getDefaultDisplay().getMetrics(dm);
 if(dm.widthPixels > dm.heightPixels) {
     //width is greater, i.e. landscape
     Fragment1 f1 = new Fragment1();
        ft.replace(android.R.id.content, f1);
 } else {
     //height is greater i.e. portrait
     Fragment2 f2 = new Fragment2();
     ft.replace(android.R.id.content, f2);
 }

你可以通过在MainActivity中覆盖onConfigurationChanges方法来直接检测方向。
@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Fragment1 f1 = new Fragment1();
        ft.replace(android.R.id.content, f1);
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        Fragment2 f2 = new Fragment2();
        ft.replace(android.R.id.content, f2);
    }
}

//Add configChanges in manifest
<activity android:name=".MainActivity"
      android:configChanges="orientation|keyboardHidden"
      android:label="@string/app_name">

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