Что мне следует использовать вместо getWidth () и getHeight (), чтобы узнать, когда ширина больше, а когда высота больше

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 говорит, что эти методы лишены . Тогда как узнать, когда ширина больше, а когда высота больше?


person Ankit    schedule 19.04.2017    source источник
comment
Вы пытаетесь показать первый фрагмент на портрете и фрагмент 2 на альбомном?   -  person A.s.ALI    schedule 19.04.2017
comment
@Shararti KAKA да .... Я пытаюсь сделать то же самое   -  person Ankit    schedule 19.04.2017
comment
используйте 1_   -  person IntelliJ Amiya    schedule 19.04.2017
comment
Когда вы получаете четыре ответа за такое же количество минут, это верный признак того, что вы не провели достаточного исследования.   -  person Mike M.    schedule 19.04.2017


Ответы (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();
    }
}
person Ferdous Ahamed    schedule 19.04.2017
comment
@Ankit любезно прочтите это: stackoverflow.com/help/someone-answers - person Ferdous Ahamed; 19.04.2017
comment
сэр, я собирался поставить галочку, но сайт предупреждал, что я могу проверить галочку только через 10 минут, поэтому я ждал этого - person Ankit; 19.04.2017
comment
Вы уже приняли этот ответ. Спасибо :) Не забудьте проголосовать позже. - person Ferdous Ahamed; 19.04.2017
comment
уже сделал друг - person Ankit; 19.04.2017
comment
Раньше вы принимали мой ответ, но теперь изменили его. Могу я узнать почему? - person Ferdous Ahamed; 19.04.2017

Вы можете использовать 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);
    }
person Kishore Jethava    schedule 19.04.2017
comment
спасибо за ответ и драгоценное время - person Ankit; 19.04.2017

Пытаться

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

Вы можете определить ориентацию напрямую, переопределив onConfigurationChanges в MainActivity

@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">
person Pehlaj - Mobile Apps Developer    schedule 19.04.2017

Используйте это, чтобы получить ширину и высоту.

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(); 
}
person Fathima km    schedule 19.04.2017
comment
откуда эти x и y - person Ankit; 19.04.2017
comment
это размеры дисплея x и y в пикселях - person Fathima km; 19.04.2017