2010-08-09 34 views
19

Nếu bạn sử dụng AbsoluteLayout (Tôi biết rằng nó không được dùng nữa, nhưng đó là cách duy nhất để giải quyết problem) của bạn vị trí trong số AbsoluteLayout.Android: Thay đổi vị trí tuyệt đối của chế độ xem theo chương trình

Tuy nhiên tôi không muốn đặt những thông tin này trong xml, vì tôi chỉ biết chúng khi chạy. Vậy làm thế nào tôi có thể thiết lập các tham số này khi chạy theo chương trình? Tôi không thấy bất kỳ phương pháp nào trên Chế độ xem giống như view.setLayoutX(int x) hoặc thứ gì đó.

Đây là XML của tôi, trong đó hoạt động tốt, khi tôi đặt layout_xlayout_y giá trị:

<?xml version="1.0" encoding="utf-8"?> 
<AbsoluteLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/myLayout" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 

    <ImageView 
    android:src="@drawable/myImageView" 
    android:layout_width="1298px" 
    android:layout_height="945px" 
    android:layout_x="0px" 
    android:layout_y="0px" /> 
<Button 
    android:id="@+id/myButton1" 
    android:text="23" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_x="50px" 
    android:layout_y="300px" 
    android:tag="23"/> 


<Button 
    android:id="@+id/myButton2" 
    android:text="48" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_x="50px" 
    android:layout_y="300px" 
    android:tag="48"/> 

</AbsoluteLayout> 

Trong thực tế, tôi không muốn đặt bất kỳ nút trong xml nữa, nhưng thay vì lấy một số thông tin qua điều khiển từ xa và thêm các nút tùy thuộc vào thông tin đó.

Dưới đây là phần mã Tôi đang sử dụng như vậy trong onCreateMethod tôi để thêm các nút này:

for (MyRemoteObject remoteObject: list) { 
    Button button = new Button(this); 
    button.setOnClickListener (listener); 
    button.setTag(remoteObject.id); 
    button.setText(remoteObject.id); 
    // button.setLayoutX(remoteObject.x) ???? 
    // button.setLayoutY(remoteObject.y) ???? 
    myLayout.addView(button); 
    } 

Trả lời

12

Sử dụng phiên bản của addView rằng mất LayoutParams:

LayoutParams params = mLayout.generateLayoutParams(); 
params.x = remoteObject.x; 
params.y = remoteObject.y; 
mLayout.addView(button, params); 
+1

Cảm ơn bạn, nhưng làm thế nào làm thế nào tôi có thể tạo LayoutParams cho rằng mLayout là Loại AbsoluteLayout ? AbsoluteLayout chỉ có một phương thức absolutLayout.generatelayoutParams (AttributeSet). Tôi không biết làm thế nào để tạo ra một attributeSet ở nơi đầu tiên để tôi có thể vượt qua thiết lập để generateLayoutParams() - Phương pháp –

+0

Tôi có cùng một vấn đề với một RelativeLayout thay vì Absolute – Amplify91

9

Để đối phó với bạn bình luận về câu trả lời của Mayra, tôi có một vấn đề tương tự với RelativeLayout thay vì AbsoluteLayout. Giải pháp là sử dụng một phương pháp tương tự và đúc nó làm kiểu bố trí của bạn. Một cái gì đó như thế này:

LayoutParams params = (android.widget.RelativeLayout.LayoutParams) this.generateDefaultLayoutParams(); 
params.height = 360; 
params.width = 360; 
params.addRule(CENTER_IN_PARENT); 
this.addView(board, params); 

Tôi mất thời gian để tìm hiểu điều này vì vậy tôi muốn đăng nó ở đây cho người khác nếu họ cần.

4

Tôi chỉ có cùng một vấn đề nhưng tìm thấy một giải pháp hơi khác.

int width = 100, height = 50, x = 10, y = 20; 
Button button = new Button(this); 
AbsoluteLayout myLayout = (AbsoluteLayout)findViewById(R.id.myLayout); 
myLayout.add(button, new AbsoluteLayout.LayoutParams(width, height, x, y)); 

Và nếu bạn tìm hiểu những gì cần sử dụng cho "fill_parent" (gợi ý thử -1) thì bạn có thể sử dụng các hằng số đó cho chiều rộng và chiều cao.

0

Tôi không biết tại sao, nhưng khi di chuyển trên và cạnh trái, Android giữ cạnh phải và cạnh dưới cùng một vị trí. Như tôi đã không thể thay đổi chiều rộng và chiều cao đúng cách (hình ảnh đã biến mất), tôi đã sử dụng this:

LayoutParams layoutParams=new LayoutParams(width, height); 
layoutParams.leftMargin = newLeft; 
layoutParams.topMargin = newTop; 
imageView.setLayoutParams(layoutParams); 

Tôi không biết nếu đó là cách tốt nhất, nhưng làm việc cho tôi. Tôi đã thử nghiệm nó trong 2.2+ và hoạt động tốt!

Bạn phải nhập android.widget.LinearLayout.LayoutParams; vì mặc định là LayoutParams ViewGroup của (bằng Davit T)

0

các câu trả lời trên được right.but này sẽ được hoàn hảo hơn

AbsoluteLayout.LayoutParams layoutParams = new AbsoluteLayout.LayoutParams(AbsoluteLayout.LayoutParams.WRAP_CONTENT,AbsoluteLayout.LayoutParams.WRAP_CONTENT,DragLayer.int left_location,int top_location); 
layout.addView(view,layoutParams) 
Các vấn đề liên quan