使用预定义和开发人员定义的子视图的自定义布局管理器

时间:2015-07-15 00:21:54

标签: android xml android-layout android-custom-view viewgroup

修订问题

当人们在教程中或通过Google IO演示文稿在线查看时,总有两种可以执行的UI自定义(但有several implementations of doing each type)。这些自定义是:

  1. 创建自定义视图,该视图是现有视图或您自己的视图的组合
  2. 创建您自己的自定义布局
  3. 但是,如果我想创建这两者的混合体怎么办?特别是一个自定义视图,允许我如何定义子视图?我没有在网上找到任何内容(没有教程,没有视频),甚至没有任何说法是否可行。

    enter image description here

    这里的Contacts App与我想要的东西非常相似。您会注意到每个列表项都具有非常相似的布局。这里没什么特别的。我可以使用composite custom view创建styleables来设置主要和次要文本,以及主要和操作图标。

    但是,我的秘诀就是将主要文本(黑暗区域)更改为XML中的其他视图!此视图可以是TextViewRatingBarProgressBarVideoViewSurfaceView等...

    实施例

    的TextView

    以下是使用我的自定义视图的示例,其中包含developer-defined TextView

    enter image description here

    <com.example.customview.BaseViewLayout 
        ...
        custom:imageMainIcon="..."
        custom:imageActionIcon="..."
        custom:secondaryText="Home">
    
        <TextView
            ...
            android:text="User-defined TextView"
            ... />
    
    </com.example.customview.BaseViewLayout>
    

    VideoView

    以下是使用我的同一自定义视图的示例,其中包含developer-defined VideoView

    enter image description here

    <com.example.customview.BaseViewLayout 
        ...
        custom:imageMainIcon="..."
        custom:imageActionIcon="..."
        custom:secondaryText="Home">
    
        <VideoView
            ... />
    
    </com.example.customview.BaseViewLayout>
    

    代码

    BaseCustomLayout

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/detail_list_item"
        android:layout_width="450dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:minHeight="72dp"
        android:background="@color/material_blue_grey_800" >
    
        <ImageView
            android:layout_width="24dp"
            android:layout_height="24dp"
            android:layout_marginLeft="24dp"
            android:layout_marginRight="24dp"
            android:layout_marginTop="24dp"
            android:layout_marginBottom="24dp"
            android:src="@drawable/ic_not_available_white"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:id="@+id/imageView" />
    
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="72dp"
            android:layout_marginStart="72dp"
    
            android:layout_marginRight="72dp"
            android:layout_marginEnd="72dp"
            android:paddingTop="16dp"
            android:paddingBottom="16dp"
    
            android:layout_toRightOf="@+id/imageView"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true">
    
    
            <ViewStub
                android:layout_height="20dp"
                android:layout_width="wrap_content"
                android:id="@+id/view_stub_main_view"
                android:inflatedId="@+id/inflated_main_view" />
    
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="20dp"
                android:paddingTop="4dp">
    
    
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="16dp"
                    android:text="Item Type"/>
    
    
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="16dp"
                    android:textStyle="bold"
                    android:text="  ·  "/>
    
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="16dp"
    
                    android:text="Extra"/>
    
            </LinearLayout>
    
        </LinearLayout>
    
        <ImageView
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:src="@drawable/ic_not_available_white"
            android:layout_marginRight="16dp"
            android:layout_marginEnd="16dp"
            android:layout_marginTop="16dp"
            android:layout_marginBottom="16dp"
            android:padding="8dp"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true"
            android:id="@+id/imageView2" />
    
    </RelativeLayout>
    

    那么,一个人如何开发这样的自定义视图?

0 个答案:

没有答案