当前位置:首页 » 安卓系统 » android获取控件的高度

android获取控件的高度

发布时间: 2023-06-09 13:19:08

① android 怎么在代码中获取控件的属性值

如果是自定义的控件可以用一下代码TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MyToggleBtn);// 由attrs 获得 TypeArray,
如果是系统自带的控件,通常控件点get会有对应的获取属性值的方法,如textView.getHeight,不过有些方法如margin,就要通过layoutparam去获取设置

② 求助:android:layout

布局的介绍:
1、在4.0以前版本中一共有五种布局,都是ViewGroup的子类。分别是AbsoluteLayout、RelativeLayout、LinearLayout、FrameLayout、TableLayout。而TableLayout是LinearLayout的子类。(中文分别是:绝对布局、相对布局、线性布局、帧布局、表格布局)。
2、在2.2操作系统中将AbsoluteLayout过期。而目前TableLayout也逐渐少用。
3、在4.0之后又新增GridLayout。(GridLayout最经典的案例是计算器界面)
总之,Android中一共有六种布局。目前推荐使用RelativeLayout、LinearLayout、GridLayout三种布局。

LinearLayout:
(一)、概念:线性布局控制其中的控件或组件横向或纵向排列。不线性布局布局中,每一行或每一列只能放一个控件。并且线性布局不会换行。当控件排列到窗体边缘,后面的控件就被隐藏,而不会显示出来。
线性布局的默认方向是水平方向(Horizontal)。vertical

(二)、LinearLayout的常用属性:
1.android:orientation 定义布局内控件或组件的排列方式
可选项:vertical 、 horizontal

2.android:layout_width 定义控件的宽度
可选项:fill_parent / match_parent/ wrap_content/绝对数值
备注:fill_parent / match_parent的效果完全一致,都是填充整个父控件。但是自2.2版本开始推荐使用match_parent 。wrap_content指的是该控件的宽度正好包裹内容物。

3.android:layout_height 定义控件的高度
可选项:fill_parent / match_parent/ wrap_content/绝对数值
备注:fill_parent / match_parent的效果完全一致,都是高度填充整个父控件。wrap_content指的是该控件的高度正好包裹内容物。

4.android:id 设置控件的id。这样就可以在R.java中自动生成相应的值,在程序中通过findViewById就可以调用。
设置id的格式为:android:id = "@+id/id的名字"

5.android:background 设置控件的背景颜色或背景图片
例如:android:background="#ffffff"
android:background="@drawable/图片名称"
【备注:】
颜色有RGB颜色格式和ARGB格式。RGB是红绿蓝三原色。而ARGB是带alpha的三原色,即有透明度的三原色。
#FFFFFF 代表白色
#000000 黑色
#FFFFFFFF 完全不透明
#00FFFFFF 完全透明
#88FFFFFF 半透明

6.android:layout_weight 设置控件的权重。即各控件在水平或者垂直方向上平均分配。
备注:如果是水平方向设置权重,要将android:layout_width设置为0dp,如果是垂直方向上使用权重,要将android:layout_height设置为0dp。否则权重容易受到高度或宽度的干扰而出现偏差。

7.android:gravity 该属性用来控制该View的内容物的位置。
如果该属性是定义在布局节点中,则该布局中所有控件的位置都受到这个属性的控制。
如果该属性出现在Button、TextView、EditText等控件中,则用来控制这些控件上的文字的位置。
可选项有:top、bottom、left、right、center_vertical、fill_vertical 、 center、fill等等。
【备注:】本属性与android:layout_gravity不同。

8.android:layout_gravity 该属性用于设置控件相对于容器的对齐方式。
可选项有:top、bottom、left、right、center_vertical、center_horizontal 、fill_vertical 、 center、fill等等。
这些可选项中不是适用于每一种布局。在垂直线性布局中,android:gravity为bottom不起作用;而水平线性布局中,android:gravity为right不起作用。
【备注:】而本属性是android:layout_gravity属性,与 android:gravity 属性不同。
(三)、LinearLayout的特有属性:【重新归纳:去除公共属性后的特有属性】
1、android:orientation 布局管理器内组件的排列方式
2、android:gravity 设置布局管理器内组件的对齐方式
(四)、 LinearLayout 子元素的特有属性:
1、android:layout_weight 子元素在 LinearLayout 中所占的权重
2、android:layout_gravity 子元素在 LinearLayout 中的对齐方式

RelativeLayout:
(一)、概念:指按着控件之间的相对位置来进行布局。
(二)、RelativeLayout特有属性:
1、android:gravity 设置布局容器内子控件的对齐方式
2、android:ignoreGravity 设置布局管理器内哪个控件不受gravity属性的影响
(三)、RelativeLayout子元素的特有属性:LayoutParams
A、第一组:指兄弟控件之间的相对位置。该组属性的值是另一个控件的id。
layout_toRightOf 该控件在哪个控件的右侧
layout_toLeftOf 该控件在哪个控件的左侧
layout_above 该控件在哪个控件的上侧
layout_below 该控件在哪个控件的下侧
B、第二组:指兄弟控件之间的对齐关系。该组属性的值是另一个控件的id。
layout_alignRight 该控件与哪个控件的右对齐
layout_alignLeft 该控件与哪个控件的左对齐
layout_alignTop 该控件与哪个控件的顶对齐
layout_alignBottom 该控件与哪个控件的底对齐
C、第三组:指控件与父布局之间的对齐关系。该组属性的值是true或者false。
layout_alignParentRight 该控件与父布局控件的右对齐吗?
layout_alignParentLeft 该控件与父布局控件的左对齐吗?
layout_alignParentTop 该控件与父布局控件的顶端对齐吗?
layout_alignParentBottom 该控件与父布局控件的底部对齐吗?
layout_centerInParent 该控件位于父布局控件的中心位置吗?
layout_centerVertical 该控件位于父布局控件的垂直中心位置吗?
layout_centerHorizontal 该控件位于父布局控件的水平中心位置吗?

GridLayout:网格布局
(一)、GridLayout布局属性:
1、android:alignmentMode
属性说明:设置布局的对齐模式。可以取以下值:
alignBounds -- 对齐子视图边界。
alignMargins -- 对齐子视图边距。
2、android:columnCount
属性说明:GridLayout的最大列数
3、android:rowCount
属性说明:GridLayout的最大行数
4、android:orientation
属性说明:GridLayout中子元素的布局方向。有以下取值:
horizontal -- 水平布局。
vertical -- 竖直布局。
5、android:columnOrderPreserved
属性说明: 设置该网格布局是否保留列序号。默认是true。
6、android:rowOrderPreserved
属性说明: 设置该网格布局是否保留行序号。默认是true。
7、android:useDefaultMargins
属性说明: 设置GridLayout使用默认的边距。默认值是false。
(二)、GridLayout子元素的属性:
1、android:layout_column
属性说明: 显示该控件的列。例如,android:layout_column="0",表示在第1列显示该控件;android:layout_column="1",表示在第2列显示该控件。
2、android:layout_row
属性说明: 该控件所在行。例如,android:layout_row="0",表示在第1行显示该控件;android:layout_row="1",表示在第2行显示该控件。它和 android:layout_column类似。
3、android:layout_columnSpan
属性说明: 列合并。即该控件所占的列数。例如,android:layout_columnSpan="2",表示该控件占2列。

4、android:layout_rowSpan
属性说明: 行合并。即该控件所占的行数。例如,android:layout_rowSpan="2",表示该控件占2行。
5、android:layout_gravity
属性说明:该控件的布局方式。选项值:
top -- 控件置于容器顶部,不改变控件的大小。
bottom -- 控件置于容器底部,不改变控件的大小。
left -- 控件置于容器左边,不改变控件的大小。
right -- 控件置于容器右边,不改变控件的大小。
center_vertical -- 控件置于容器竖直方向中间,不改变控件的大小。
fill_vertical -- 如果需要,则往竖直方向延伸该控件。
center_horizontal -- 控件置于容器水平方向中间,不改变控件的大小。
fill_horizontal -- 如果需要,则往水平方向延伸该控件。
center -- 控件置于容器中间,不改变控件的大小。
fill -- 如果需要,则往水平、竖直方向延伸该控件。
clip_vertical -- 垂直剪切,剪切的方向基于该控件的top/bottom布局属性。若该控件的gravity是竖直的:若它的gravity是top的话,则剪切该控件的底部;若该控件的gravity是bottom的,则剪切该控件的顶部。
clip_horizontal -- 水平剪切,剪切的方向基于该控件的left/right布局属性。若该控件的gravity是水平的:若它的gravity是left的话,则剪切该控件的右边;若该控件的gravity是 right的,则剪切该控件的左边。
start -- 控件置于容器的起始处,不改变控件的大小。
end -- 控件置于容器的结束处,不改变控件的大小。

③ android导航栏高度是多少

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

2.获取控件尺寸

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

ViewTreeObserver vto = mButton.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override
public void onGlobalLayout() { //移除上一次监听,避免重复监听
mButton.getViewTreeObserver().removeGlobalOnLayoutListener(this); //在这里调用getHeight()获得控件的高度
buttonHeight = mButton.getHeight();
}
});1234567891011

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

public static int getStatusBarHeight(Context context){
Class<?> c = null;
Object obj = null;
Field field = null; int x = 0, statusBarHeight = 0; try {
c = Class.forName("com.android.internal.R$dimen");
obj = c.newInstance();
field = c.getField("status_bar_height");
x = Integer.parseInt(field.get(obj).toString());
statusBarHeight = context.getResources().getDimensionPixelSize(x);
} catch (Exception e1) {
e1.printStackTrace();
} return statusBarHeight;
}12345678910111213141516

4.获得导航栏高度

public int getNavigationBarHeight(Activity activity) {
Resources resources = activity.getResources(); int resourceId = resources.getIdentifier("navigation_bar_height","dimen", "android"); //获取NavigationBar的高度
int height = resources.getDimensionPixelSize(resourceId); return height;

④ Android View何时能拿到宽高的值

一个View或ViewGroup中什么什么时候能拿到宽高的值?

width 表示 View 在屏幕上可显示的区域大小;
measuredWidth 表示 View 的实际大小,包括超出屏幕范围外的尺寸;

甚至有这样的公式总结到:
getMeasuredWidth() = visible width + invisible width

getMeasuredWidth() 在执行setMeasuredDimension(一般在onMeasure方法中执行)后才有值;
getWidth()在onLayout方法执行后才有值。



Constructor : 构造方法,View初始化的时候调用,在这里是无法获取其子控件的引用的.更加无法获取宽高了.

onFinishInflate : 当布局初始化完毕后回调,在这里可以获取所有直接子View的引用,但是无法获取宽高.

onMeasure : 当测量控件宽高时回调,当调用了requestLayout()也会回调onMeasure.在这里一定可以通过getMeasuredHeight()和getMeasuredWidth()来获取控件的高和宽,但不一定可以通过getHeight()和getWidth()来获取控件宽高,因为getHeight()和getWidth()必须要等onLayout方法回调之后才能确定.

onSizeChanged : 当控件的宽高发生变化时回调,和onMeasure一样,一定可以通过getMeasuredHeight()和getMeasuredWidth()来获取控件的高和宽,因为它是在onMeasure方法执行之后和onLayout方法之前回调的.

onLayout : 当确定控件的位置时回调,当调用了requestLayout()也会回调onLayout.在这里一定可以通过getHeight()和getWidth()获取控件的宽高,同时由于onMeasure方法比onLayout方法先执行,所以在这里也可以通过getMeasuredHeight()和getMeasuredWidth()来获取控件的高和宽.

addOnGlobalLayoutListener : 当View的位置确定完后会回调改监听方法,它是紧接着onLayout方法执行而执行的,只要onLayout方法调用了,那么addOnGlobalLayoutListener的监听器就会监听到.在这里getMeasuredHeight()和getMeasuredWidth()和getHeight()和getWidth()都可以获取到宽高.

onWindowFocusChanged : 当View的焦点发送改变时回调,在这里getMeasuredHeight()和getMeasuredWidth()和getHeight()和getWidth()都可以获取到宽高.Activity也可以通过重写该方法来判断当前的焦点是否发送改变了;需要注意的是这里View获取焦点和失去焦点都会回调.



(部分内容参考于网络,如有不妥,请联系删除~)

⑤ android如何获取控件宽度

用getWidth()方法,可以获取像素单位的宽度。

android的控件一般是继承的android.View这个类,所以可以直接用View#getWidth()方法获取控件宽度。另外这个方法是final方法,无法被子类覆盖,所以可以安心调用

热点内容
mysql配置访问ip 发布:2025-02-08 16:22:49 浏览:115
体表面积简易算法 发布:2025-02-08 16:18:04 浏览:687
存储器的分级储存是如何实现的 发布:2025-02-08 16:11:27 浏览:193
电脑怎么看路由器密码 发布:2025-02-08 16:10:13 浏览:401
汇编宏编译 发布:2025-02-08 16:08:30 浏览:194
androidlayoutview 发布:2025-02-08 15:45:01 浏览:622
大货车有哪些安全应急配置 发布:2025-02-08 15:44:55 浏览:538
安卓手机下黎明杀机为什么会闪退 发布:2025-02-08 15:38:27 浏览:489
定位算法源码 发布:2025-02-08 15:36:43 浏览:543
上游服务器异常什么意思 发布:2025-02-08 15:15:46 浏览:176