2010-09-07 37 views
9

Tôi muốn xác định chiều cao và chiều rộng có sẵn của bố cục mẹ mà tôi phải thêm chế độ xem của mình.Android - nhận chiều cao bố cục gốc

Tôi đã sử dụng nhiều phương pháp trên bố trí như

  • layout.getHeight()
  • layout.getRootView(). GetHeight()

Tất cả các phương pháp này trở về 0 (zero) như kết quả.

Yêu cầu chính của tôi là có thể cung cấp chiều rộng cho chế độ xem có khoảng% chiều rộng của bố cục.

Ngoài ra tôi không muốn sử dụng thẻ cho việc này. Tôi muốn làm điều đó thông qua mã.

Xin cảm ơn trước.

Trả lời

5

Vấn đề ở đây là bạn đang cố gắng lấy chiều cao/cân nặng gốc trước khi bố cục hoàn thành bố cục mẹ. Bạn chỉ có thể nhận được thứ nguyên gốc, sau khi bố cục của nó hoàn tất.

Cách được khuyến nghị để thực hiện những gì bạn muốn đạt được là sử dụng trường layout_weight của LayoutParams. link text

Đặc biệt bạn nên sử dụng:

LayoutParams lp = new LinearLayout.LayoutParams(width, height, 
weight); 

giá trị layout_weight có thể bất cứ điều gì giữa 0.0 đến 1.0. Vì vậy, ví dụ nếu tôi có myButton trong parentLayout, và tôi muốn myButton để chiếm 30% bố trí cha mẹ ... Tôi sẽ sử dụng một cái gì đó như:

myButton.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, 
               LayoutParams.WRAP_CONTENT,0.3)); 

Tổng layout_weight của tất cả các yếu tố con nên 1. Ngoài ra, layout_weight không nên được sử dụng với chiều rộng hoặc chiều cao của khung hình được đặt thành LayoutParams.FILL_PARENT.

+0

Nhưng làm cách nào để có được chiều cao và chiều rộng của bố cục gốc. ........... LayoutParams lp = new LinearLayout.LayoutParams (chiều rộng, chiều cao, trọng lượng); ......... Để cung cấp chiều cao trong% phương pháp này chỉ hữu ích Nếu tôi có chiều cao bố cục và chiều rộng bố cục – Robin

+0

Không, bạn không cần phải biết chính xác chiều rộng/chiều cao của cha mẹ để sử dụng phương pháp này. Bạn có thể chỉ định bất kỳ thứ gì từ 0 đến 1 dưới dạng trọng lượng. Vì vậy, ví dụ nếu tôi có myButton trong parentLayout, và tôi muốn myButton để chiếm 30% bố trí cha mẹ ... Tôi sẽ sử dụng một cái gì đó như: –

+0

xin lỗi bình luận không gian didnt suffice ... Tôi edited câu trả lời của tôi ở trên. –

7

Ok. Tôi tìm thấy một giải pháp cho nó. Cách chúng tôi có thể nhận được hieght của màn hình trong hoạt động là

getApplicationContext(). GetResources(). GetDisplayMetrics(). HeightPixels

Nhưng tôi vẫn không biết làm thế nào để có được các kích thước điểm ảnh của bố trí cha mẹ?

+0

Điều này không phải lúc nào cũng giống nhau. Với getApplicationContext(). GetResources(). GetDisplayMetrics(). HeightPixels bạn nhận được chiều cao màn hình tính bằng pixel. Nếu bạn có (ví dụ) một thanh hành động, điều này bao gồm thanh tác vụ, điều mà bạn có thể muốn tránh nếu bạn muốn biết chiều cao bằng pixel của bố cục hoặc phần tử ui (nền hoặc bất kỳ) – Sotti

2

Một thay thế để thực hiện theo chương trình này là sử dụng phương pháp sau đây:

public void onWindowFocusChanged(boolean b) { ...} 

Vào thời điểm phương pháp này được gọi, các layouting quá trình đã được hoàn thành. Vì vậy, bạn có thể có được các thuộc tính cha mẹ một cách chính xác.

Như Ví dụ:

public class A extends Activity { 
    LinearLayout parent; 
    Button child; 
    public void onCreate(Bundle b) { 
     parent = (LinearLayout) findViewById(R.id.linear1); 
     child = (Button) findViewById(R.id.button1); 
     . 
     . 
    } 

@Override 
public void onWindowFocusChanged(boolean b) { 
     LayoutParams lpc = child.getLayoutParams(); 
     lpc.width = parent.getWidth(); 
     child.postInvalidate(); 
     . 
     . 
    } 
} 
0

Trong OnCreate() phương pháp, nếu bạn sử dụng layout.getHeight()layout.getWidth(), nó sẽ trả về 0, thay vào đó bạn có thể làm theo này:

public void onClick(View v) { 
    // TODO Auto-generated method stub 

      int layWidth = Layout.getLeft(); 
      int layHeight = Layout.getHeight(); 
     break;  
    } 
+0

Nó trả về '0 'bởi vì giao diện người dùng không có thời gian để hiển thị. Có thể tốt hơn nếu sử dụng 'Runnable' bên trong' onCreate' hoặc sử dụng phương thức ['onWindowFocusChanged'] (http://developer.android.com/reference/android/view/View.html#onWindowFocusChanged%28boolean%29) bên trong Hoạt động như [Robeth] (http://stackoverflow.com/a/10269753/2668136) được đề cập, thay vì sử dụng trình nghe nhấp chuột để thay đổi chế độ xem. – Fllo

3

Hãy thử một cái gì đó như thế này:

view.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    public void onGlobalLayout() { 
     view.getHeight(); 
    } 
    }); 
0

Bạn đang gọi probobly getHeight() đến sớm. Đảm bảo rằng getParent().getHeight() đang được gọi sau viewGroup.addView(view0) và/hoặc setContentView(activity_main.xml). Điều này đã xảy ra với tôi trong quá khứ và điều này đã sửa nó.

Các vấn đề liên quan