有时候我们需要把几个View 放在一起作为一个重复使用的新的View来用。
这时候里面的view,用xml来组织比较方便。下面介绍两种方法。
方法1
1. 定义CustomView.java extends XxxLayout
2. 在CustomView里面inflate 需要的资源文件,然后把它加到当前的View里面
3. 这个CustomView.java可以写在自己的layout文件里面用了。
举个例子,MediaController.java,这个在Android源码里面。
framework/base/core/java/android/widget/
protected View makeControllerView() {
log("makeControllerView");
LayoutInflater inflate = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mRoot = inflate.inflate(com.android.internal.R.layout.media_controller, null);
initControllerView(mRoot);
return mRoot;
}
public void setAnchorView(View view) {
mAnchor = view;
FrameLayout.LayoutParams frameParams = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.FILL_PARENT
);
removeAllViews();
View v = makeControllerView();
addView(v, frameParams);
}
方法2
1. 定义CustomView.java extends XxxLayout
2. 在layout文件里面直接用这个View, 它就是原来的Layout,直接把TextView, ImageView什么的,放在里面。
3. 在CustomeView.java里面对放进去的view findViewById就可以灵活处理了。
举个例子, TabHost.java,
framework/base/core/java/android/widget/
public class TabHost extends FrameLayout
...
public void setup() {
mTabWidget = (TabWidget) findViewById(com.android.internal.R.id.tabs);
if (mTabWidget == null) {
throw new RuntimeException(
"Your TabHost must have a TabWidget whose id attribute is 'android.R.id.tabs'");
}
...
}
tab_content.xml
<TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<LinearLayout android:orientation="vertical"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_weight="0" />
<FrameLayout android:id="@android:id/tabcontent"
android:layout_width="fill_parent" android:layout_height="0dip"
android:layout_weight="1"/>
</LinearLayout>
</TabHost>
第2种方法好像比较有意思,也不用addView了。
分享到:
相关推荐
下面将详细介绍这两种创建自定义View的方式:在Activity中直接使用View以及在XML文件中布局。 1. 在Activity中直接使用View 这种方式通常适用于较为简单的自定义View或者需要在运行时动态创建的视图。首先,你需要...
本文将深入探讨两种主要的在布局中动态添加View的方法:使用LayoutInflater和直接通过代码创建。 首先,我们来看第一种方法,使用LayoutInflater。LayoutInflater是Android中的一个关键类,它负责将XML布局文件转换...
在自定义View的构造函数或者`on.AttributeSet()`方法中,可以使用`obtainStyledAttributes()`方法来解析XML布局文件中的属性值: ```java public class CustomView extends View { private int customColor; ...
在这里,`@Attr`注解指定了两个属性:`customColor`和`customText`,它们分别对应XML布局文件中的`custom_color`和`custom_text`属性。`R.styleable`下的常量是Android编译器生成的,用于表示属性集合。 接下来,在...
// 两种类型 } @Override public int getItemViewType(int position) { Object item = dataList.get(position); if (item instanceof TextData) { return TEXT_VIEW_TYPE; } else if (item instanceof ...
在Android中,动画主要分为两种类型:属性动画(Property Animation)和视图动画(View Animation)。视图动画系统是早期版本引入的,主要通过改变View的位置、大小、透明度等属性来创建动画效果,但并不真正改变...
本文将深入探讨两种主要的自定义属性添加方法:XML属性和Java代码动态设置,以及它们之间的区别。 ### XML属性 1. **res/values/attrs.xml定义** 首先,在`res/values`目录下创建一个名为`attrs.xml`的文件。在此...
在Android开发中,View和Adapter是两个至关重要的概念,它们共同构建了用户界面与数据之间的桥梁。本篇文章将深入探讨这两个组件以及它们在ListView、GridView和Spinner中的应用。 首先,让我们了解一下View。在...
Android提供了两种主要类型的动画:Property Animation(属性动画)和View Animation(视图动画)。视图动画在API Level 11之前是主要的动画机制,它只改变视图的视觉表示,而不改变其实际状态。属性动画在API ...
在这个例子中,我们的自定义控件将继承自`CompoundButton`,因为滑动开关本质上是一种具有两种状态的按钮。 ```java public class CustomToggleSwitch extends CompoundButton { // ... } ``` 2. **构造函数**:...
在Android开发中,TabLayout是谷歌Material Design设计规范中的一个重要组件,用于展示多个标签页,...这两种方法都需要对Android的自定义视图和事件监听有深入的理解,但能提供更大的灵活性,以实现独特的界面效果。
有两种常见的方法: 1. **通过LayoutInflater加载布局**:你可以将自定义视图放入XML布局文件中,然后使用`LayoutInflater`将其加载到`Dialog`中。在`Dialog`的构造函数或`onCreate()`方法中,调用`setContentView...
实际上,`LayoutInflater.from()`方法内部调用了`getSystemService()`,因此这两种方式效果相同。 `getSystemService()`方法详解: 这是一个Android `Context`中的方法,用于获取系统服务。通过传递特定的字符串...
在Android开发中,自定义组合控件是一种常见的需求,它允许开发者将多个基本组件结合成一个复杂的用户界面元素,以实现独特的设计和交互效果。这篇博客"Android自定义组合控件"可能详细介绍了如何创建自定义视图以及...
在Android开发中,自定义属性是一种非常常见的技术,它允许开发者扩展系统提供的组件特性,创建具有独特功能和外观的自定义视图或者组件。通过自定义属性,开发者可以更好地控制UI设计,提升应用的用户体验。以下是...
在XML布局文件中,可以使用`View.GONE`或`View.INVISIBLE`属性来设定隐藏的视图不显示。 ```xml <!-- 默认可见的内容区域 --> <!-- 默认隐藏的操作项 --> <LinearLayout android:id="@+id/hidden_view" ...
Android支持两种主要类型的动画:帧动画(Frame Animation)和补间动画(Tween Animation)。帧动画是通过连续播放一系列图片来实现动画效果,而补间动画则涉及到对象属性的变化,如平移、旋转、缩放和透明度等。 ...
`DiscrollveDemo.zip`中的示例展示了如何通过两种方法为系统控件添加自定义属性,无需直接继承系统控件。这种方法对于保持代码的简洁性和可维护性具有重要意义。 首先,我们来看第一种方法:使用`attr`标签和`...
Android提供了两种类型的进度条:水平进度条(Horizontal ProgressBar)和圆形进度条(Circular ProgressBar)。水平进度条通常显示任务的百分比完成情况,而圆形进度条则常用于加载动画,比如常见的转圈加载图标。 ...
在Android开发中,RadioButton和CheckBox是两种常用的复选和单选控件,它们通常用于用户在多个选项中做出单选或多选的选择。然而,系统默认的样式可能无法满足所有设计需求,因此,开发者有时需要自定义这些控件的...