Подтвердить что ты не робот

Как получить видимый размер в Activity?

Как узнать видимый размер моей активности?

Я пытаюсь получить реальный размер Activity,
а не высота и ширина от getHeight() и getWidth(),
который дает мне полный экран экрана.

4b9b3361

Ответ 1

Я нашел способ узнать точную высоту своей активности: если у вас есть представление, заполняющее весь доступный экран за заголовком и панель задач, просто используйте getBottom(), чтобы получить реальную высоту этой активности.

Ответ 2

Я думаю, вам нужно посмотреть Activity.getWindow() и Window.getDecorView() и получить ширину/высоту этого.

Ответ 3

Я сделал это с использованием корневого макета, проблема в том, что вы не можете получить эту информацию (ширину и высоту) в методах onCreate/onStart/onResume, когда они запущены в первый раз.

В любой момент после этого размер можно получить из корневого макета (LinearLayout/FrameLayout/TableLayout/etc), в моем случае я использовал FrameLayout:

FrameLayout f = (FrameLayout) findViewById(R.id.layout_root);
Log.d(TAG, "width " + f.getMeasuredWidth() );
Log.d(TAG, "height " + f.getMeasuredHeight() );

или

FrameLayout f = (FrameLayout) findViewById(R.id.layout_root);
Log.d(TAG, "width " + f.getRight() );
Log.d(TAG, "height " + f.getBottom() );

Отредактировано отсюда -------------------------------------------- ------------

Я нашел способ получить эту информацию по методу onCreted, но только если у вас есть более одного действия. В моем случае у меня есть основное действие, которое вызывает второе действие.

В main_activity, прежде чем я вызову second_activity, новым Itent, я могу добавить дополнительную информацию для second_activity. Вот код, который вам нужен в первом действии:

Intent i = new Intent(this, SecondActivity.class);
i.putExtra("width", f.getMeasuredWidth());
i.putExtra("height", f.getMeasuredHeight());
startActivity(i);

После этого во время второго действия вы можете получить эту информацию по методу onCreate вашего второго действия, выполнив это:

int width = getIntent().getExtras().getInt("width");
int height = getIntent().getExtras().getInt("height");

Ответ 4

Существует простой способ получить правильный вид с помощью функции getDefaultSize. В случае охвата View для всей активности вы можете использовать следующий подход для получения размеров области клиента деятельности:

public void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
    int viewWidth = getDefaultSize(getWidth(), widthMeasureSpec); 
    int viewHeight = getDefaultSize(getHeight(), heightMeasureSpec);
    ...
}

Чтобы сделать просмотр расширенным для всей активности:

MyView testView = new MyView(this);
LinearLayout testViewGroup = new LinearLayout(this);
testView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                                          LayoutParams.FILL_PARENT);
testViewGroup.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                                               LayoutParams.FILL_PARENT);
testViewGroup.addView(testView);
setContentView(testViewGroup);

Ответ 5

Если вы используете DataBinding (который должен быть), вы можете вызвать binding.getRoot().getHeight(), где binding - ваш ViewDataBinding, созданный с помощью DataBindingUtil.setContentView() или другого такого метода DataBindingUtil. Вам нужно подождать, пока макет будет иметь размер, который вы можете сделать следующим образом:

binding.getRoot().getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        binding.getRoot().getViewTreeObserver().removeOnGlobalLayoutListener(this);

        int height = binding.getRoot().getHeight();
    }
});

Обратите внимание, что вам нужно удалить OnGlobalLayoutListener, иначе он будет запускаться каждый раз, когда что-то изменится в вашем макете.

Ответ 6

Получить высоту активности:

public static int getActivityHeight(Activity activity)
{
   return activity.findViewById(android.R.id.content).getHeight();
}

Получить ширину активности

public static int getActivityWidth(Activity activity)
{
    return activity.findViewById(android.R.id.content).getWidth();
}

Ответ 7

Мне нравятся более длительные ответы:

myActivity.getWindow().getDecorView().getHeight();
myActivity.getWindow().getDecorView().getWidth();