gpt4 book ai didi

Android:在扩展Activity的类中需要对View.getWidth/Height()使用onSizeChanged

转载 作者:IT老高 更新时间:2023-10-28 23:26:48 26 4
gpt4 key购买 nike

我想使用 getWidth()/getHeight() 来获取我的 XML 布局的宽度/高度。我读到我必须在 onSizeChanged() 方法中这样做,否则我会得到 0(Android: Get the screen resolution / pixels as integer values)。

但我想在已经扩展 Activity 的类中进行。所以我认为不可能让同一个类扩展 View。

public class MyClass extends Activity {

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ViewGroup xml_layout = (ViewGroup) findViewById(R.id.layout_id);
TextView tv = new TextView(this);
tv = (TextView) findViewById(R.id.text_view);
int layout_height = xml_layout.getHeight();
int layout_width = xml_layout.getWidth();
}

protected void onSizeChanged(int w, int h, int oldw, int oldh) {
//Error, because I need to use extends View for class, but I can't do it because I also need extends Activity to use onCreate
}
}

如果我使用 MyClass extends Activity,我可以使用 onCreate 但不能使用 onSizeChanged。
如果我使用 MyClass extends View 我可以使用 onSizeChanged 但不能使用 onCreate。

我该如何解决这个问题?

最佳答案

您不必创建 customView 来获取它的高度和宽度。您可以将 OnLayoutChangedListener ( description here ) 添加到您想要的宽度/高度的 View 中,然后基本上获取 onLayoutChanged 方法中的值,就像这样

View myView = findViewById(R.id.my_view);
myView.addOnLayoutChangeListener(new OnLayoutChangeListener() {

@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight,
int oldBottom) {
// its possible that the layout is not complete in which case
// we will get all zero values for the positions, so ignore the event
if (left == 0 && top == 0 && right == 0 && bottom == 0) {
return;
}

// Do what you need to do with the height/width since they are now set
}
});

这是因为 View 是在布局完成后才绘制的。然后,系统会沿着 View 层次结构树向下走,以在绘制每个 View 之前测量它们的宽度/高度。

关于Android:在扩展Activity的类中需要对View.getWidth/Height()使用onSizeChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4888624/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com