android自定义view如何获取父容器赐予的宽度和高度

android自定义view如何获取父容器赐予的宽度和高度,第1张

自定义View,想要自定义给定宽和高,你要写自定义属性,然后在xml文件中指定宽高才会有效,同时当给定的宽和高的值是wrap_content 或 fill_parent 这类的,这时需要在自定义View中重写onMeasure方法,进行控件的宽高测量。

点击事件你会把,这个就不说了,设置宽高

就是

buttonsetLayoutParams(new

LayoutParams(

LayoutParamsWRAP_CONTENT,

LayoutParamsWRAP_CONTENT));

LayoutParams具体导入什么包就得看你外面用的是什么。

还有你说的循环添加监听那个,你首先几个按钮的id设置为

这种。。button1,button2

for(int

i

=

0;

i

<

size;

i++){

Button

button

=

findViewById(Ridbutton1

+

i);

buttonsetOnClickListener();

}

你这个

for(int

i=1;i<8;i++){

Button

heaterB=(Button)findViewById(RidheaterB+i);

地方错了

应该是

for(int

i=0;i<8;i++){

Button

heaterB=(Button)findViewById(RidheaterB1+i);

屏幕高度都是包括了状态栏和导航栏的高度的 

2获取控件尺寸

如果我们在onCreate()方法里直接调用getWidth()、getMeasuredWidth()获得的尺寸为0,这是由于在onCreate()中,我们的控件还没有画好,等onCreate()执行完了,我们的控件才被测量出来,我们可以注册一个监听器,用来监听测量结果

ViewTreeObserver vto  = mButtongetViewTreeObserver();

vtoaddOnGlobalLayoutListener(new OnGlobalLayoutListener() {            @Override

public void onGlobalLayout() {            //移除上一次监听,避免重复监听

mButtongetViewTreeObserver()removeGlobalOnLayoutListener(this);                //在这里调用getHeight()获得控件的高度

buttonHeight = mButtongetHeight();

}

});1234567891011

3获得状态栏/通知栏的高度

public static int getStatusBarHeight(Context context){

Class<> c = null;

Object obj = null;

Field field = null;        int x = 0, statusBarHeight = 0;        try {

c = ClassforName("comandroidinternalR$dimen");

obj = cnewInstance();

field = cgetField("status_bar_height");

x = IntegerparseInt(fieldget(obj)toString());

statusBarHeight = contextgetResources()getDimensionPixelSize(x);

} catch (Exception e1) {

e1printStackTrace();

}        return statusBarHeight;

}12345678910111213141516

4获得导航栏高度

public int getNavigationBarHeight(Activity activity) {

Resources resources = activitygetResources();        int resourceId = resourcesgetIdentifier("navigation_bar_height","dimen", "android");        //获取NavigationBar的高度

int height = resourcesgetDimensionPixelSize(resourceId);        return height;

根据具体问题类型,进行步骤拆解/原因原理分析/内容拓展等。

具体步骤如下:/导致这种情况的原因主要是……

[Android]安卓在代码中实时获取控件尺寸的几种方法

本篇博客已收录到我的安卓开发小结中——点击安卓开发小结

1、已知控件大小,想知道他在不同设备上的px值。

使用TypedValueapplyDimension方法。

如果这个控件你知道了大小,但不知道在各个设备上的大小,可以使用TypedValueapplyDimension方法来获取实际大小。getResources()getDisplayMetrics()方法Activity类和View中都有提供,因此可以在Activity和自定义View中都可以使用这个方法。

int ballRadius = (int) TypedValueapplyDimension(TypedValueCOMPLEX_UNIT_DIP, BALL_RADIUS, getResources()getDisplayMetrics());

1

2

1

2

applyDimension是androidutilTypedValue类下的一个静态方法,可以看到这个方法的作用就是将value的值换算为dp、sp等对应的px值,因为在实时运行过程中很多方法接受的是px值,而不是xml中的dp值。

public static float applyDimension(int unit, float value,DisplayMetrics metrics)

{

switch (unit) {

case COMPLEX_UNIT_PX://获得value作为px值对应的px值

return value;

case COMPLEX_UNIT_DIP:

return value metricsdensity;//获得value作为dp值对应的px值

case COMPLEX_UNIT_SP:

return value metricsscaledDensity;//获得value作为sp值对应的px值

case COMPLEX_UNIT_PT:

return value metricsxdpi (10f/72);

以上就是关于android自定义view如何获取父容器赐予的宽度和高度全部的内容,包括:android自定义view如何获取父容器赐予的宽度和高度、android中,如何点击一个按钮,控制一个已经存在的控件的高度宽度、android导航栏高度是多少等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9321011.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存