以前做项目的时候用到过,也不是很明白,现在看了别人的总结,转来。。。
代码一
public class MainActivity extends Activity {
private LinearLayout mBackgroundLayout;
private TextViewTest mTextViewTest;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBackgroundLayout = new MyLayout(this);
mBackgroundLayout.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.FILL_PARENT));
mTextViewTest = new TextViewTest(this);
mBackgroundLayout.addView(mTextViewTest);
setContentView(mBackgroundLayout);
}
public class MyLayout extends LinearLayout {
public MyLayout(Context context) {
super(context);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
Log.i("Tag", "--------------");
View mView = getChildAt(0);
mView.measure(0, 0);
}
}
public class TextViewTest extends TextView {
public TextViewTest(Context context) {
super(context);
setText("test test ");
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
measure(0, 0);
Log.i("Tag", "width: " + getWidth() + ",height: " + getHeight());
Log.i("Tag", "MeasuredWidth: " + getMeasuredWidth()
+ ",MeasuredHeight: " + getMeasuredHeight());
}
}
}
出来的LOG
width: 78,height: 29
MeasuredWidth: 78,MeasuredHeight: 29
代码2
public class MainActivity extends Activity {
private TextViewTest mTextViewTest;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mTextViewTest = new TextViewTest(this);
setContentView(mTextViewTest);
}
public class TextViewTest extends TextView {
public TextViewTest(Context context) {
super(context);
setText("test test ");
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
measure(0, 0);
Log.i("Tag", "width: " + getWidth() + ",height: " + getHeight());
Log.i("Tag", "MeasuredWidth: " + getMeasuredWidth()
+ ",MeasuredHeight: " + getMeasuredHeight());
}
}
}
出来的log
width: 480,height: 724
MeasuredWidth: 78,MeasuredHeight: 29
getMeasuredWidth():API里面
The width of this view as measured in the most recent call to measure(). This should be used during measurement and layout calculations only.
得到的是在最近一次调用measure()方法测量后得到的view的宽度,它仅仅用在测量和layout的计算中。
所以此方法得到的是view的内容占据的实际宽度
总结:
getwidth(): view在设定好布局后整个view的宽度。
getMeasuredWidth(): 对view上的内容进行测量后得到的view内容占据的宽度,前提是你必须在父布局的onLayout()方法或者此view的onDraw()方法里调用measure(0,0);(measure 参数的值你可以自己定义),否则你得到的结果和getWidth()一样。
.請尊重原創,轉載請註明這是
http://hi.baidu.com/ljlkings/home
的空間。
分享到:
相关推荐
7. **Android 中 getWidth 和 getMeasuredWidth 的区别** - `getWidth()` 返回当前View的实际宽度,包括Padding,但在测量阶段可能返回0。 - `getMeasuredWidth()` 返回测量阶段确定的View宽度,包含了...
在Android开发中,SeekBar是一种常用的用户界面组件,它允许用户通过滑动条来选择一个介于最小值和最大值之间的数值。通常情况下,SeekBar是水平排列的,但有时根据设计需求,我们可能需要创建一个垂直方向的SeekBar...
Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888); ``` 2. **准备Canvas**:创建一个Canvas对象,它将用于绘制Bitmap。 ```java Canvas canvas = new Canvas...
在Android开发中,创建具有指定圆角的ViewGroup是一个常见的需求,这可以帮助开发者设计出更加美观和具有现代感的用户界面。"Android-可以指定圆角的ViewGroup"这个主题聚焦于如何在Android应用中实现自定义的布局,...
在Android开发中,SeekBar是一个非常常见的控件,它允许用户通过滑动来选择一个介于最小值和最大值之间的值。然而,默认的SeekBar是水平布局的,而在某些设计需求下,我们可能需要创建一个垂直方向的SeekBar。这篇...
Android截屏截图的几种方法总结 Android截屏截图是 Android 开发中常见的需求, Android 截屏... Android 截屏截图有多种方法,每种方法都有其特点和应用场景。在实际开发中,您可以根据实际需求选择合适的截屏方法。
view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight()); view.buildDrawingCache(); Bitmap bitmap = view.getDrawingCache(); return bitmap; } ``` 在上面的代码中,我们首先需要启用View的...
int x = (this.getMeasuredWidth() - bitmap.getWidth()) >> 1; int y = 0; canvas.drawBitmap(bitmap, x, y, null); // 让文字在底部显示 canvas.translate(0, (this.getMeasuredHeight() >> 1) - (int) this...
if (lineWidth + childWidth > getWidth()) { // 换行 top += lineHeight; lineWidth = childWidth; lineHeight = childHeight; } else { int left = l + lineWidth + lp.leftMargin; int childTop = top + ...
int x = getMeasuredWidth() - watermarkBitmap.getWidth(); // 水印图片的X坐标 int y = getMeasuredHeight() - watermarkBitmap.getHeight(); // 水印图片的Y坐标 canvas.drawBitmap(watermarkBitmap, x, y, null...
在布局完成后,可以通过`getMeasuredWidth()`和`getMeasuredHeight()`获取测量尺寸。但是,如果需要获取实际尺寸,通常需要在`onDraw()`方法或者`onSizeChanged()`方法中进行。例如: ```java @Override ...
在这种布局中,元素会从左到右排列,当一行填满后,元素会自动转到下一行继续排列。这种布局非常适合展示像搜索热词这样的列表,因为它可以自适应不同屏幕尺寸,提供良好的用户体验。 **一、FlowLayout的实现原理**...
总之,自定义Android滑动开关是一个涉及UI绘制、触摸事件处理和状态管理的过程。通过这种方式,开发者可以创造出符合项目需求的独特组件,提高应用程序的用户体验。提供的资源链接提供了更详细的实现步骤和演示,...
Android View 转 Bitmap 生成截图是一种常见的需求,特别是在分享图片和截屏功能中。下面将详细介绍三种不同的方法来实现 Android View 转 Bitmap 生成截图。 第一种方法:使用 DrawingCache 通过使用 View 的 ...
在Android开发中,自定义控件是提升应用用户体验和界面设计独特性的重要手段。本教程将探讨如何实现一个自定义控件,它具有自动换行的效果,使得在有限的屏幕空间内,元素能够整齐地排列成多行。参考链接为:。 ...
if (i == 0 || currentLineWidth + child.getMeasuredWidth() > getWidth()) { left = 0; top += previousChildHeight; } child.layout(left, top, left + child.getMeasuredWidth(), top + child....
总结,Android流式布局的实现主要涉及对ViewGroup的`onMeasure()`和`onLayout()`方法的重写。通过这种方式,我们可以创建出高度自适应且布局灵活的应用界面,尤其适用于展示大量未知数量的元素,如标签、卡片等。`...