`
hotpro
  • 浏览: 21531 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
文章分类
社区版块
存档分类
最新评论

两种 Custom View和xml 结合使用的方法

阅读更多
有时候我们需要把几个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了。
分享到:
评论

相关推荐

    android 自定义View 两种方式

    下面将详细介绍这两种创建自定义View的方式:在Activity中直接使用View以及在XML文件中布局。 1. 在Activity中直接使用View 这种方式通常适用于较为简单的自定义View或者需要在运行时动态创建的视图。首先,你需要...

    Android在布局中动态添加view的两种方法共5页.pdf.zip

    本文将深入探讨两种主要的在布局中动态添加View的方法:使用LayoutInflater和直接通过代码创建。 首先,我们来看第一种方法,使用LayoutInflater。LayoutInflater是Android中的一个关键类,它负责将XML布局文件转换...

    自定义View使用自定义属性

    在自定义View的构造函数或者`on.AttributeSet()`方法中,可以使用`obtainStyledAttributes()`方法来解析XML布局文件中的属性值: ```java public class CustomView extends View { private int customColor; ...

    android自定义view(一)——attire 使用

    在这里,`@Attr`注解指定了两个属性:`customColor`和`customText`,它们分别对应XML布局文件中的`custom_color`和`custom_text`属性。`R.styleable`下的常量是Android编译器生成的,用于表示属性集合。 接下来,在...

    android关于ListView加载时使用多种不同xml的Item的实现

    // 两种类型 } @Override public int getItemViewType(int position) { Object item = dataList.get(position); if (item instanceof TextData) { return TEXT_VIEW_TYPE; } else if (item instanceof ...

    android-custom-animation0.2.rar

    在Android中,动画主要分为两种类型:属性动画(Property Animation)和视图动画(View Animation)。视图动画系统是早期版本引入的,主要通过改变View的位置、大小、透明度等属性来创建动画效果,但并不真正改变...

    属性使用例子

    本文将深入探讨两种主要的自定义属性添加方法:XML属性和Java代码动态设置,以及它们之间的区别。 ### XML属性 1. **res/values/attrs.xml定义** 首先,在`res/values`目录下创建一个名为`attrs.xml`的文件。在此...

    Android:View&Adapter

    在Android开发中,View和Adapter是两个至关重要的概念,它们共同构建了用户界面与数据之间的桥梁。本篇文章将深入探讨这两个组件以及它们在ListView、GridView和Spinner中的应用。 首先,让我们了解一下View。在...

    Android高级应用源码-animation的结合蝴蝶飞的动画,使用动画里面的几种类型.zip

    Android提供了两种主要类型的动画:Property Animation(属性动画)和View Animation(视图动画)。视图动画在API Level 11之前是主要的动画机制,它只改变视图的视觉表示,而不改变其实际状态。属性动画在API ...

    自定义View控件的总结(自定义滑动开关)

    在这个例子中,我们的自定义控件将继承自`CompoundButton`,因为滑动开关本质上是一种具有两种状态的按钮。 ```java public class CustomToggleSwitch extends CompoundButton { // ... } ``` 2. **构造函数**:...

    Android-两种方式自定义Tablayout指示器长度

    在Android开发中,TabLayout是谷歌Material Design设计规范中的一个重要组件,用于展示多个标签页,...这两种方法都需要对Android的自定义视图和事件监听有深入的理解,但能提供更大的灵活性,以实现独特的界面效果。

    Dialog上绑定View

    有两种常见的方法: 1. **通过LayoutInflater加载布局**:你可以将自定义视图放入XML布局文件中,然后使用`LayoutInflater`将其加载到`Dialog`中。在`Dialog`的构造函数或`onCreate()`方法中,调用`setContentView...

    android中LayoutInflater的使用.pdf

    实际上,`LayoutInflater.from()`方法内部调用了`getSystemService()`,因此这两种方式效果相同。 `getSystemService()`方法详解: 这是一个Android `Context`中的方法,用于获取系统服务。通过传递特定的字符串...

    Android自定义组合控件

    在Android开发中,自定义组合控件是一种常见的需求,它允许开发者将多个基本组件结合成一个复杂的用户界面元素,以实现独特的设计和交互效果。这篇博客"Android自定义组合控件"可能详细介绍了如何创建自定义视图以及...

    Android自定义属性

    在Android开发中,自定义属性是一种非常常见的技术,它允许开发者扩展系统提供的组件特性,创建具有独特功能和外观的自定义视图或者组件。通过自定义属性,开发者可以更好地控制UI设计,提升应用的用户体验。以下是...

    点击ListView的item时显示隐藏view

    在XML布局文件中,可以使用`View.GONE`或`View.INVISIBLE`属性来设定隐藏的视图不显示。 ```xml &lt;!-- 默认可见的内容区域 --&gt; &lt;!-- 默认隐藏的操作项 --&gt; &lt;LinearLayout android:id="@+id/hidden_view" ...

    Android自定义加载动画

    Android支持两种主要类型的动画:帧动画(Frame Animation)和补间动画(Tween Animation)。帧动画是通过连续播放一系列图片来实现动画效果,而补间动画则涉及到对象属性的变化,如平移、旋转、缩放和透明度等。 ...

    DiscrollveDemo.zip

    `DiscrollveDemo.zip`中的示例展示了如何通过两种方法为系统控件添加自定义属性,无需直接继承系统控件。这种方法对于保持代码的简洁性和可维护性具有重要意义。 首先,我们来看第一种方法:使用`attr`标签和`...

    安卓进度条loadingprogress相关-分享一款Android中的CustomLoading进度条大集合各种加载效果和圆形进度展示.rar

    Android提供了两种类型的进度条:水平进度条(Horizontal ProgressBar)和圆形进度条(Circular ProgressBar)。水平进度条通常显示任务的百分比完成情况,而圆形进度条则常用于加载动画,比如常见的转圈加载图标。 ...

    RadioButton和CheckBox自定义样式

    在Android开发中,RadioButton和CheckBox是两种常用的复选和单选控件,它们通常用于用户在多个选项中做出单选或多选的选择。然而,系统默认的样式可能无法满足所有设计需求,因此,开发者有时需要自定义这些控件的...

Global site tag (gtag.js) - Google Analytics