2010-06-17 32 views
24

Tôi làm cách nào để biết kích thước hiển thị của hoạt động của mình?Cách nhận kích thước hiển thị trên Hoạt động?

Tôi đang cố gắng để có được những Hoạt động kích thước thật,
không phải là chiều cao và chiều rộng từ getHeight()getWidth(),
mà mang lại cho tôi kích thước màn hình đầy đủ.

+1

Tại sao bạn muốn làm điều đó? Trong hầu hết các trường hợp, điều này là không cần thiết và hầu hết những thứ bạn có thể cần nó có thể được thực hiện với các kỹ thuật tốt hơn đi kèm với android để xử lý các kích thước màn hình khác nhau. – Janusz

+3

Tôi thực sự cần phải biết có bao nhiêu điểm ảnh mà hoạt động có chiều rộng và chiều cao của nó. Nó phải làm với độ chính xác bản đồ. – Tsimmi

+0

Bạn đang sử dụng chế độ xem bản đồ hoặc chế độ xem tùy chỉnh để hiển thị bản đồ? – Janusz

Trả lời

11

Tôi đã tìm được cách để biết chiều cao chính xác của hoạt động của mình: nếu bạn có chế độ xem làm đầy tất cả màn hình có sẵn phía sau thanh tiêu đề và thanh tác vụ, chỉ cần sử dụng getBottom() để có được chiều cao thực sự của hoạt động đó.

+0

getBottom() của cái gì? Lớp nào có phương thức này? –

+0

Bất kỳ Chế độ xem nào: http://developer.android.com/reference/android/view/View.html#getBottom() nó liên quan đến cha mẹ, đó là lý do tại sao bạn cần nó làm chế độ xem lấp đầy tất cả màn hình có sẵn trong trường hợp này. – Mike

+0

int height = this.getWindow(). GetDecorView(). GetBottom(); – kurt

31

I nghĩ bạn sẽ muốn xem Activity.getWindow()Window.getDecorView() và nhận chiều rộng/chiều cao của điều đó.

+9

int height = this.getWindow(). GetDecorView(). GetHeight(); – fireydude

+1

Tôi vẫn nhận được 0, lạ. – nomnom

+4

Bạn đang gọi nó quá sớm nó không có chiều cao trong khi onCreate(). – Tatarize

6

Tôi đã sử dụng bố cục gốc của mình, vấn đề là bạn không thể lấy thông tin này (chiều rộng và chiều cao) trong các phương thức onCreate/onStart/onResume khi chúng chạy lần đầu tiên.

Bất kỳ khoảnh khắc sau đó, kích thước có thể được lấy từ bố cục gốc của bạn (LinearLayout/FrameLayout/TableLayout/etc), trong trường hợp của tôi, tôi đã sử dụng FrameLayout:

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

hay:

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

Đã chỉnh sửa từ đây --------------------------------------------- -----------

Tôi đã tìm được cách để có được thông tin này trên phương thức onCreted, nhưng chỉ khi bạn có thêm một hoạt động . Trong trường hợp của tôi, tôi có một hoạt động chính gọi là hoạt động thứ hai.

Trên main_activity trước khi tôi gọi second_activity, bằng Itent mới, tôi có thể thêm thông tin bổ sung cho second_activity. Đây là mã bạn cần trên hoạt động đầu tiên:

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

Sau đó vào hoạt động thứ hai của bạn, bạn có thể lấy thông tin này vào phương pháp onCreate của hoạt động thứ hai của bạn làm điều đó:

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

Có đơn giản Cách lấy đúng Kích cỡ xem bằng chức năng getDefaultSize.Trong trường hợp Xem trải rộng trên toàn bộ hoạt động, bạn có thể sử dụng phương pháp tiếp theo để có được kích thước khu vực hoạt động của khách hàng:

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

Để Xem mở rộng trên toàn bộ hoạt động:

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

Lấy chiều cao của hoạt động:

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

Nhận chiều rộng của hoạt động

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

Nếu bạn đang sử dụng DataBinding (mà bạn nên có), bạn có thể gọi binding.getRoot().getHeight() nơi bindingViewDataBinding bạn tạo ra với DataBindingUtil.setContentView() hoặc khác DataBindingUtil phương pháp như vậy. Bạn sẽ cần phải chờ đợi cho đến khi bố trí có kích thước, mà bạn có thể làm như thế này:

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

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

Lưu ý rằng bạn cần phải loại bỏ các OnGlobalLayoutListener hoặc nếu không nó sẽ chạy này mỗi khi thay đổi bất cứ điều gì trong cách bố trí của bạn.

0

Tôi thích câu trả lời tiết kiệm thời gian hơn:

myActivity.getWindow().getDecorView().getHeight(); 
myActivity.getWindow().getDecorView().getWidth(); 
Các vấn đề liên quan