这节我们研究的是在XML中向ViewGroup中添加组件。关于这个的研究可以破费周折,为什么呢??因为向其中添加的组件他都不显示啊。郁闷了好长一段时间,不多最终还是突破了,研究出来了,呵呵,路漫漫其修远兮,吾将上下而求索。继续我们的探索之旅。
一、简述
在XML中向ViewGroup中添加组件,这个问题貌似很简单,但是只有在简单中才会发现不简单,其实好多复杂的东西都是由简单的东西一步一步演化而来的,这是道家所谓的一生二、二生三、三生万物,以后我们还将通过剖析一个布局类来更深入的了解ViewGroup,不过那是后话了,呵呵。
那么我们可以通过怎样的方式来添加了。请看:
<com.iaiai.HelloViewGroup
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:text="iaiai继承ViewGroup研究"/>
</com.iaiai.HelloViewGroup>
貌似这个方法可以先ViewGroup中加入组件,但是,实际上我们运行后会发现,其实这个组件是不会显示的。
有兴趣的读者可以运行试试。效果是下面这样的。
二、为啥不显示
那么为啥这个ViewGroup里面的TextView没有显示呢,我也为这个问题困扰过很久,其实,有时候我们不是学不会,而是不会学,知识千万遍,方法有多少。那到底要怎样做呢?
其实很简单,我们只需要在ViewGroup中的onMeasure方法里添加一个对子元素的遍历,并且在onLayout中添加一个布局遍历就实现了简单的布局了。
下面给出代码:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// TODO Auto-generated method stub
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int childCount = getChildCount();
for(int i = 0; i < childCount; i ++){
View v = getChildAt(i);
v.measure(widthMeasureSpec, heightMeasureSpec);
}
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
int childCount = getChildCount();
for(int i = 0; i < childCount; i ++){
View v = getChildAt(i);
v.layout(l, t, r, b);
}
}
运行效果:
- 大小: 11.3 KB
- 大小: 13.6 KB
分享到:
相关推荐
在Android开发中,动态添加组件是一项常见的需求,特别是在创建自定义布局或实现可变内容的界面时。`addView()` 方法就是实现这一功能的关键。本文将深入探讨如何使用 `addView()` 添加组件,并以动态添加列表项和 `...
总结来说,自定义ViewGroup在Android开发中扮演着重要角色,它允许开发者超越标准布局组件的限制,实现更加灵活和复杂的界面设计。通过理解并掌握自定义ViewGroup的基本流程和注意事项,开发者可以创建出满足特定...
1. **XML文件中声明UI组件**:这种方式简单直观且易于维护,通过XML文件中的节点元素来对应代码中的UI组件。优点在于提高了代码的可读性和可维护性,同时实现了界面与逻辑的分离。 2. **代码中构造组件**:虽然这种...
首先,你需要在XML布局文件中添加TabLayout和ViewPager,然后在代码中设置适配器和关联两者。适配器通常是继承自FragmentPagerAdapter或FragmentStatePagerAdapter,用于创建和管理每个页面的Fragment。 2. 自定义...
总结来说,`LayoutAnimationController`是Android动画系统中的一个重要组件,它使得开发者能够轻松地为ViewGroup的子视图添加各种动态效果,提高应用的视觉体验。通过合理的动画设计和实现,我们可以创建出更具吸引...
在Android开发中,`ViewGroup`是Android UI框架的核心组件之一,它作为视图容器,可以包含多个子视图(Views或ViewGroups),并管理这些视图的布局和交互。`ViewGroup`提供了布局管理器,如LinearLayout、...
1. 检查XML布局文件,确保`TabHost`被正确地放置在`ViewGroup`中,并且`TabWidget`和`FrameLayout`的ID正确。 2. 确保在代码中初始化`TabHost`,并设置`TabContentFactory`,以填充每个选项卡的内容。 3. 如果`...
这个组件允许用户向左或向右滑动查看超出屏幕范围的内容,类似于网页中的水平滚动条。`ViewGroup` 是Android中所有视图容器的基类,它可以包含多个子视图,并负责管理这些子视图的布局和交互。在这个场景中,我们将...
然后在布局XML文件中声明并使用这个自定义ViewGroup,通过设置子View和选择模式,即可实现自动换行和选择功能。 总之,"AndroidAutoLayout"是一个强大且灵活的组件,它解决了Android开发中多元素自动布局的问题,...
7. **布局文件**:在XML布局文件中,将自定义的`ViewGroup`作为根元素,并添加相应的子视图。每个子视图代表一个会话列表项,可以包含会话的头像、名称、时间等信息。 通过以上步骤,我们能够创建一个具有左右滑动...
1. **动态获取组件**:在某些情况下,组件可能在运行时动态添加到布局中,这时需要使用`LayoutInflater`来实例化布局,并在`ViewGroup`中添加。 2. **多态和类型安全**:当需要处理多种类型的组件时,可以使用`View...
然后在XML布局文件中,用`FlowLayout`替换原来的`LinearLayout`或其他布局,将子视图作为其子元素添加。 例如,以下是一个简单的`FlowLayout`示例: ```xml android:layout_width="match_parent" android:...
在Android开发中,ListView是一种常用的组件,用于展示可滚动的多行数据列表。它具有高度的可定制性和灵活性,能够适应各种数据类型的显示。当我们需要在ListView中动态添加控件时,通常涉及到列表项的自定义、...
文件可能包含了实现特定布局逻辑的自定义ViewGroup类,以及对应的XML布局文件,用于在界面上展示这个自定义组件。通过阅读和分析这些代码,开发者能更好地理解自定义ViewGroup的工作原理,并学会如何在自己的项目中...
Android的属性动画系统允许我们在自定义组件中实现更丰富的视觉效果。通过`ValueAnimator`和`ObjectAnimator`,我们可以改变组件的属性,如大小、颜色、位置等,并在一定时间内平滑过渡。 5. **自定义属性** 为了...
6. **自定义属性**:为了提高可定制性,可以添加自定义属性,如标签间距、行间距、字体大小等,通过`attrs.xml`定义,然后在构造函数中解析并应用。 在提供的`LineayoutTabsDemo`中,我们可以看到一个具体的实现...
在Android中,组件通常指的是继承自View或ViewGroup的类。View是Android UI系统中最基本的元素,如按钮、文本框等,而ViewGroup则作为容器,用来管理多个View,如布局(LinearLayout、RelativeLayout等)。 创建...
在Android开发中,ViewGroup是Android视图体系结构中的核心组件之一,它是View的容器,用于组织和管理多个子视图。"Android-一个类似思维导图软件的ViewGroup"这个项目显然旨在创建一个自定义的ViewGroup,它能够...
在XML中使用,需要在res/layout文件夹下创建一个包含自定义组件的布局文件,并在AndroidManifest.xml中声明相应的Activity。 通过以上步骤,你已经具备了创建一个基本自定义组件的能力。在实际项目中,可以根据需求...
本教程将深入讲解如何在Java代码中直接编写布局以及如何引入XML布局。这两种方法各有优缺点,适用于不同的场景。 首先,让我们探讨在Java中直接编写布局。这种方式通常被称为动态布局,它允许开发者在运行时创建和...