Ok, tôi đã nhận ngay bây giờ. Nếu tôi hiểu đúng bạn muốn có nó như thế này:
if A > B -> do nothing
if B > A & B > parent layout -> 50% to both of them
if B > A & B < parent layout -> A = parent layout - B
tôi phải làm tất cả trong onWindowFocusChanged
bởi vì nếu không trong onCreate chiều cao của Views sẽ trở về 0. Tôi đã làm điều đó với 2 LinearLayouts như bố trí trẻ em, nhưng bạn có thể làm những gì bạn muốn.
XML của tôi:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:id="@+id/parent_lay"
android:orientation="vertical"
android:layout_height="match_parent" >
//Layout A:
<LinearLayout
android:id="@+id/lay_1"
android:layout_width="match_parent"
android:background="@android:color/background_dark"
android:layout_height="10dp" >
</LinearLayout>
//Layout B:
<LinearLayout
android:id="@+id/lay_2"
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="#123456" >
</LinearLayout>
</LinearLayout>
MainActivity:
public class MainActivity extends Activity {
LinearLayout parent_lay;
LinearLayout lay_1;
LinearLayout lay_2;
int parent_height;
int lay_1_height;
int lay_2_heigth;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
// TODO Auto-generated method stub
super.onWindowFocusChanged(hasFocus);
parent_lay = (LinearLayout) findViewById(R.id.parent_lay);
lay_1 = (LinearLayout) findViewById(R.id.lay_1);
lay_2 = (LinearLayout) findViewById(R.id.lay_2);
lay_1_height = lay_1.getHeight();
lay_2_heigth = lay_2.getHeight();
parent_height = parent_lay.getHeight();
if (lay_2.getHeight() > lay_1.getHeight()
&& lay_2.getHeight() > (parent_lay.getHeight()/2)) {
lay_1.setLayoutParams(new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, 0, 1));
lay_2.setLayoutParams(new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, 0, 1));
} else if (lay_2.getHeight() < (parent_lay.getHeight()/2)) {
lay_1.setLayoutParams(new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, (parent_height - lay_2_heigth)));
}
}
}
Ví dụ: Nếu A là 60dp và B là 40dp:
.210
Nếu A là 60dp và B là 400dp:
Vậy đầu vào để xác định B lớn như thế nào? Bạn có thể tạo bố cục động trong mã của mình ([Android Reference LayoutParams] (http://developer.android.com/reference/android/widget/LinearLayout.LayoutParams.html)). – MarchingHome
Đầu vào để xác định B lớn như thế nào là nội dung của B. B là bố cục (hiện là một đoạn) có chứa một số nội dung kích thước cố định nhưng phần lớn nó là một TextView có nội dung động. Có thể là một vài dòng văn bản hoặc một trang văn bản dài. Nếu văn bản trong B dài và B bị giới hạn ở 50% thì văn bản sẽ có thể cuộn được. –
Bạn đã tìm cách xác định số lượng dòng văn bản trong B và tự động điều chỉnh độ cao của B theo điều đó chưa? – MarchingHome