android如何获取控件宽度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android如何获取控件宽度相关的知识,希望对你有一定的参考价值。

如下列代码,经测试,Toast显示width2确实为控件TextView的宽度,但显示的width1仍然为初始值0,如何将width2的值赋给全局变量width1呢?求大神们指教!

public class MainActivity extends Activity
private TextView txt = null;
private int width1 = 0;

protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

txt = (TextView) findViewById(R.id.txt);
ViewTreeObserver vto = txt.getViewTreeObserver();

vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener()
public boolean onPreDraw()
int width2 = txt.getMeasuredWidth();
Toast.makeText(getApplication(), "width2:" + width2, Toast.LENGTH_SHORT).show();
width1 = width2;
return true;

);

Toast.makeText(getApplication(), "width1:" + width1, Toast.LENGTH_SHORT).show();

参考技术A 用getWidth()方法,可以获取像素单位的宽度。

android的控件一般是继承的android.View这个类,所以可以直接用View#getWidth()方法获取控件宽度。另外这个方法是final方法,无法被子类覆盖,所以可以安心调用
参考技术B 是不是第二个Toast比第一个先输出? 如果是,问题就在于监听器的回调方法执行时间比第二个Toast晚。追问

我是想在程序一开始运行的时候就能获取width2的值并用于其它计算,请问该如何获取width2的值?

追答

把你的逻辑代码写在onPreDraw回调方法里

本回答被提问者采纳

以上是关于android如何获取控件宽度的主要内容,如果未能解决你的问题,请参考以下文章

Android如何获取TextView的控件宽度以及字体宽度

Android怎样获取文字的宽度

android的ProgressBar问题:如何设置ProgressBar的宽度?

在android中listview中怎么获取条目中某个控件的宽度

android安卓onCreate方法中获取控件宽度高度

如何获取QSlider控件滑块的宽度和位置