我试图在我的线性布局中缩放图像以填充可用空间,但我不明白我得到的布局宽度的值。这是我的 main.xml 布局文件的相关部分:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LeftButtonsLayout"
android:layout_width="0dip"
android:layout_height="fill_parent"
android:layout_weight="10"
android:orientation="vertical" >
<TextView
android:id="@+id/Jump"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/jump"
android:textStyle="bold"
android:padding="5dip"
/>
<ImageView
android:id="@+id/JumpButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:src="@drawable/jump"
android:contentDescription="@string/jump"
android:padding="5dip"
/>
<LinearLayout
这是我的活动的 onCreate() 方法,它有一个调试打印:
public void onCreate (Bundle savedInstanceState) {
setContentView(R.layout.main);
LinearLayout leftButtonsLayout = (LinearLayout) findViewById(R.id.LeftButtonsLayout);
imageView = (ImageView) findViewById(R.id.ResetButton);
Log.d("DEBUG", CLASS_NAME + "scaleLeftButtonsLayoutContents: \n" +
"linear layout height: " + leftButtonsLayout.getHeight() + "\n" +
"text height: " + ((TextView)findViewById(R.id.Jump)).getHeight() + "\n" +
"image height: " + imageView.getLayoutParams().height);
}
1) 如果我在 Log.d() 调试打印之后放置 setContentVew() 调用,我会得到一个空指针异常。为什么?在视图上使用之前,是否没有为 LinearLayout 分配内存?
2)我看到的打印是:线性布局高度:0 文本高度:0 图像高度:-2 我在这里做错了什么?我希望在这里看到合理的值,因为我可以在设备屏幕上看到 imageView。
3) 我打算使用以下方法缩放图像:imageView.getLayoutParams().height = newHeight。这样做对吗?这样做会自动更新屏幕上的 imageView,还是我必须再次执行 setContentView()?
在此先感谢您的帮助。
更新
谢谢大家的回答。我已经覆盖了我的活动的 onWindowFocusChanged() 方法,但是当我检查下面嵌套的 ImageView 的大小时,它报告为 -2。调整它的大小是可行的,但我很好奇为什么它应该有一个理智的值时是-2。我的代码如下:
@Override
public void onWindowFocusChanged (boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus)
scaleLeftButtonsLayoutContents();
}
private void scaleLeftButtonsLayoutContents () {
LinearLayout leftButtonsLayout = (LinearLayout)findViewById(R.id.LeftButtonsLayout);
imageView = (ImageView) findViewById(R.id.JumpButton);
Log.d("TAG", CLASS_NAME + "JumpButton.height " + imageView.getLayoutParams().height);
imageView.getLayoutParams().height = verticalSpaceAvailable;
imageView.getLayoutParams().width = verticalSpaceAvailable;
leftButtonsLayout.requestLayout();
}
这会产生打印: JumpButton.height -2
调整大小会产生一个健全的图像,但为什么初始高度是-2?