Как мы можем получить ширину и высоту в классе не активности и классе не фрагмента - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть диалоговое окно с предупреждением, и я хочу установить ширину и высоту, чтобы оно зависело от моего экранного устройства и не было постоянным, например, 1300,880.

Как я могу получить ширину и высоту в неактивности и не фрагментекласс?

static abstract class BaseHolder extends RecyclerView.ViewHolder {
.
.
.

   LayoutInflater inflater = (LayoutInflater) mViewAction.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mDialog = new Dialog(mViewAction.getContext());    
        mDialogView = inflater.inflate(R.layout.dialog_deletetoken, null);
        mDialog.setContentView(mDialogView);


mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    mDialog.getWindow().setLayout(1300,880);
}

Ответы [ 3 ]

0 голосов
/ 16 декабря 2018

Может быть, вы можете сохранить его как статическую переменную в своей активности запуска.

private fun init() {
    // Get Device Width and Height in Px
    val displayMetrics = DisplayMetrics()
    windowManager.defaultDisplay.getMetrics(displayMetrics)
    DEVICE_WIDTH = displayMetrics.widthPixels
    DEVICE_HEIGHT = displayMetrics.heightPixels
}

companion object {
    var DEVICE_WIDTH = 0
    var DEVICE_HEIGHT = 0
}
0 голосов
/ 18 декабря 2018

Мы можем использовать это для переноса содержимого по высоте или ширине для настраиваемого диалогового окна предупреждения:

  mDialog.getWindow().setLayout(getScreenWidthInDP(mDialogView.getContext()), ViewGroup.LayoutParams.WRAP_CONTENT);


public static int getScreenHeightInDP(Context context) {
    DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();

    float screenHeightInDP = displayMetrics.heightPixels / displayMetrics.density;

    return Math.round(screenHeightInDP);
}

Я надеюсь, что это будет полезно

0 голосов
/ 16 декабря 2018

Вы не можете напрямую получить значение высоты ширины компонента, которое полностью зависит от жизненного цикла активности.

Что вы можете сделать, вы можете передать ссылку на контекст, доступный в неактивном классеи получить результаты через этот контекст.

Скажем, например, вы хотите получить соотношение экрана устройства или высоту / ширину или плотность, вы можете сделать что-то вроде этого:

public static int getScreenHeightInDP(Context context) {
    DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();

    float screenHeightInDP = displayMetrics.heightPixels / displayMetrics.density;

    return Math.round(screenHeightInDP);
}

Отредактируйте

для вашего случая, создайте класс Utility следующим образом:

public class Utility {


public static void setLayout(DialogFragment dialogFragment) {
    DisplayMetrics displayMetrics = dialogFragment.getResources().getDisplayMetrics();

    int height = displayMetrics.heightPixels;
    int width = displayMetrics.widthPixels;

    if(dialogFragment.getDialog().getWindow()!=null)
        dialogFragment.getDialog().getWindow().setLayout(width,height);

}
}
...