Android 由多个视图组成的自定义视图

Android 由多个视图组成的自定义视图,android,android-layout,Android,Android Layout,我有一组视图,我希望总是一起使用。例如: <LinearLayout> <TextView /> <EditView /> </LinearLayout> 文本视图是提示,编辑视图是答案。我想给这个组合起一个名字,并能够使用这个名字将其弹出到xml中。我希望它是一个自定义视图,这样我就可以把它很好地放在一个类中,并为它创建各种实用程序函数。我有办法做到吗?我知道我可以将LinearLayout子类化,并在java代码中动态创建

我有一组视图,我希望总是一起使用。例如:

<LinearLayout>
    <TextView />
    <EditView />
</LinearLayout>

文本视图是提示,编辑视图是答案。我想给这个组合起一个名字,并能够使用这个名字将其弹出到xml中。我希望它是一个自定义视图,这样我就可以把它很好地放在一个类中,并为它创建各种实用程序函数。我有办法做到吗?我知道我可以将LinearLayout子类化,并在java代码中动态创建子类,但这使我失去了通过xml轻松进行更改的能力。有更好的路线吗


是的,我还想在一些地方做这件事,这些地方不仅仅是提示。

将XML放入布局XML文件,并在需要时使用充气器充气视图

LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.some_id, parent, false);

拥有视图后,可以编写一个实用程序类来接受该视图并对其执行操作。使用
findViewById()
检索文本并编辑视图,或使用存储对其他视图的引用。有很多关于它的示例和教程。祝你好运)

这个示例是针对水平数字选择器小部件的,但它的概念是相同的

首先为自定义组件创建XML布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

   <Button
       android:id="@+id/btn_minus"
       android:layout_width="50dp"
       android:layout_height="wrap_content"
       android:text="-" />

   <EditText
       android:id="@+id/edit_text"
       android:layout_width="75dp"
       android:layout_height="wrap_content"
       android:inputType="number"
       android:gravity="center"
       android:focusable="false"
       android:text="0" />

   <Button
       android:id="@+id/btn_plus"
       android:layout_width="50dp"
       android:layout_height="wrap_content"
       android:text="+" />
</LinearLayout>
向该java类添加您需要的任何逻辑,然后您可以在XML布局中包含自定义组件,如下所示:

<com.example.HorizontalNumberPicker
     android:id ="@+id/horizontal_number_picker"
     android:layout_width ="wrap_content"
     android:layout_height ="wrap_content" />



查看此链接了解更多信息:

无耻的自我推销,但可能与此相关-你读过Android关于设计的文章吗?是的,我有Sam,过去我自己写过3个自定义视图(显示摄像头的摄像头视图、将图像从web直接下载到imageview的UrlImageView以及AbsoluteLayout顶部的DragAndDrop图像布局).但该页面中的所有内容都没有向您展示如何用xml定义具有子视图的小部件-它们都是用Java实现的。我希望避免这种情况。嗯。如果我要在从布局派生的类的构造函数中实现这一点(例如LinearLayout),我可以在父xml中引用它,并将其作为父xml传递。如果子视图的顶级xml是一个合并标记,它将消除我们需要插入其中的额外布局。为了提高效率,我还可以使用ViewHolder模式,但由于holder本身是一个视图,因此我可以避免执行所有难看的标记。我不能我想这是有潜力的,我今天晚些时候回家后会测试它。我试过了,让Android Studio先将它转换成Kotlin。在构造函数中,我使用了“this”作为上下文,但我不知道属性集。只是学习安卓(来自iOS开发者背景)。如果我理解正确,
HorizontalNumberPicker
有两个
LinearLayout
?它本身就是一个,并且在构造函数中会膨胀一个。似乎太多了。@rozina我认为您可以在自定义组件的布局文件中使用标记来代替LinearLayout。这将消除额外的布局。
<com.example.HorizontalNumberPicker
     android:id ="@+id/horizontal_number_picker"
     android:layout_width ="wrap_content"
     android:layout_height ="wrap_content" />