我正在编写一个应用程序,需要分配剩余的屏幕空间才能查看。
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/txtView_1"
android:layout_width="match_parent"
android:layout_height="100dp" />
<TextView
android:id="@+id/txtView_2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Test Text" />
</LinearLayout>
并设置运行时我正在使用以下内容:
private void process() {
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int txtView1Height = txtView_1.getHeight();
LayoutParams layoutParams = (LayoutParams) txtView_2.getLayoutParams();
layoutParams = new LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
(metrics.heightPixels - txtView1Height));
txtView_2.setLayoutParams(layoutParams);
}
但是这里它的剩余高度并不完全相同..因为textview sting没有放在中心(这就是我简单检查的方式)......可能会错误地设置像素高度。
这里有什么建议吗?
答案 0 :(得分:3)
您可以使用weight
xml参数
<TextView
android:id="@+id/txtView_2"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1.0"
android:gravity="center"
android:text="Test Text" />
或在您的情况下简单设置高度为match_parent
android:layout_height=match_parent
将更简单的设定重力检查到bottom
。如果您仍希望以编程方式执行此操作,请不要使用DisplayMetrics
来获取高度(操作栏和软件按钮也是显示的一部分),请使用根LinearLayout
高度。同时检查txtView1Height
是否不是0
(在计算时可能没有绘制view
)