2016-01-14 2 views
2

Я работаю над настраиваемым классом, чтобы изменить размер макетов из других классов.Android - Получение DisplayMetrics в классе

Вот класс

public class LayoutResize{ 

    Context context; 
    DisplayMetrics displayMetrics = new DisplayMetrics(); 

    public int width(int sizeX) 
    { 
     //((Activity)context).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); 
     //getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); 
     //getResources().getDisplayMetrics(); 

     int screenWidth = displayMetrics.widthPixels * sizeX/100; 
     Log.d("displayMetrics", "dismet" + displayMetrics); 
     return screenWidth; 
    } 

    public int height(int sizeY) 
    { 
     //((Activity)context).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); 
     //getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); 
     //getResources().getDisplayMetrics(); 

     int screenHeight = displayMetrics.heightPixels * sizeY/100; 
     return screenHeight; 
    } 

} 

Раньше я использую класс, как:

DisplayMetrics displayMetrics = new DisplayMetrics(); 

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

    getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); 
    LayoutResize layoutResize = new LayoutResize(); 
    RelativeLayout mLayout= (RelativeLayout) findViewById(R.id.mLayout); 
      int mLayoutWidth = layoutResize.width(90, displayMetrics); 

... 
} 

Чтобы изменить размер mLayout «s ширина до 90% от размера окна.

I прошло (а) displayMetrics ценность из всех классов использую LayoutResize класс из. Используемый, чтобы быть, как это:

public int width(int sizeX, displayMetrics) 
{ 
... 
} 

Теперь, как видно в LayoutResize классе, я пытаюсь просто передать значение в процентах.

Я пробовал использовать эти прокомментированные коды, но каждый код возвращает getWindowManager возвращает значение null .. Что мне здесь не хватает?

ответ

1

В вашем классе LayoutResize вы создаете новый displayMetrics вместо того, чтобы использовать тот, который вы создали на своем onCreate.

Вы можете создать конструктор в вашем LayoutResize и передать displayMetrics в качестве параметра, например:

public class LayoutResize{ 

DisplayMetrics displayMetrics; 

public LayoutResize (DisplayMetrics displayMetrics){ 
    this.displayMetrics = displayMetrics; 
} 

public int width(int sizeX) 
{ 
    int screenWidth = displayMetrics.widthPixels * sizeX/100; 
    Log.d("displayMetrics", "dismet" + displayMetrics); 
    return screenWidth; 
} 

public int height(int sizeY) 
{ 
    int screenHeight = displayMetrics.heightPixels * sizeY/100; 
    return screenHeight; 
} 

} 

А потом инстанцирование так:

LayoutResize layoutResize = new LayoutResize(displayMetrics); 

Надеется, что это помогает

+1

HoHoHo это очень помогло! Поэтому я должен создать привычку создавать конструктор для каждого класса как такового, я знал, что это касается основных вещей! Благодаря! –

Смежные вопросы