Android中的View和widget之间有什么区别?

时间:2011-03-02 14:07:29

标签: android

Android中的View和小部件有什么区别?

9 个答案:

答案 0 :(得分:21)

View类文档中所述:

  

此类表示用户界面组件的基本构建块。 View占据屏幕上的矩形区域,负责绘图和事件处理。 View是窗口小部件的基类,用于创建交互式UI组件(按钮,文本字段等)。

     

ViewGroup子类是布局的基类,它是包含其他View s(或其他ViewGroup s)并定义其布局属性的不可见容器。

因此,View是UI元素的基类,Widget 松散定义为 任何可以使用 {{1} }。


让我们更多地强调这些概念。

View

View是所有UI元素的基类。因此,它涵盖了许多不同的类和概念,包括小部件,View和布局。有一个根ViewGroup附加到Window实例,它构成了View层次结构的基础。通常,单词View通常用于描述UI元素,或者用于引用抽象或基本UI类,例如View

部件

这个术语有各种各样的定义,但大多数都是指"随时可以使用" UI元素,可以是ViewGroupButtonImageView等。请注意,有些人认为小部件是完整的UI元素(非抽象)而不是容器(例如EditText s(布局/ ViewGroup))。同样值得注意的是" widget"是一个包名称(ListViews),其中文档提到以下内容:

  

小部件包包含(通常是可视的)UI元素,可在“应用程序”屏幕上使用。

因此,将非可视UI元素也视为小部件以及在小部件包下定义的任何类是合理的。请参阅此处以获取小部件包中的完整类列表:http://developer.android.com/reference/android/widget/package-summary.html


App Widget

不要与UI元素小部件混淆,App小部件是一个远程android.widget层次结构,最常显示在用户的主屏幕上。由文档定义:

  

App Widgets是微型应用程序视图,可以嵌入到其他应用程序(例如主屏幕)中并接收定期更新。这些视图在用户界面中称为窗口小部件,您可以使用应用程序窗口小部件提供程序发布一个窗口小部件。能够容纳其他App Widgets的应用程序组件称为App Widget主机。

View

ViewGroupViewGroup的子类,可以为子View提供父级和位置,例如在布局的情况下。

布局/视图容器

与Widgets一样,没有Layout基类,因此它可以松散地定义为扩展View的任何类,并提供定义子ViewGroup的定位的能力。通常,只有View个子类附加了单词" Layout" (在ViewGroup中,LinearLayout)被称为"布局",其他扩展RelativeLayout的类通常被称为"查看容器" ;

最后,我建议您每当提及“观看”,“窗口小部件”或任何其他重要术语时,都要明确说明您的预期定义,以便人们可以更好地了解您所指的内容。


进一步阅读

答案 1 :(得分:13)

Widget是一个视图。布局是ViewGroup。要创建窗口小部件,请扩展视图。

答案 2 :(得分:7)

Widget是Android中的包,包含所有用户界面,如按钮,textView和布局等。但是view是一个抽象类,包括属性,焦点和事件处理方法,渲染等

但是所有小部件都扩展了视图,以获取具有属性,焦点等行为的UI。因此,所有小部件都是视图的示例,但视图与小部件不同。 View-group充当包含不同视图的容器示例是frame-layout,relative-layout。它们扩展了视图组,其作用就像一个容器,它为它包含的所有视图添加了特定的行为。

答案 3 :(得分:4)

我不相信任何早期的答案都是正确的。不同的UI工具包对于通常基本相同的东西使用不同的术语,并且 是真的,因为Android View非常类似于.NET Control或Qt小部件

但“小部件”也意味着Android中非常具体的东西。如果长按主屏幕,则会出现一个“添加到主屏幕”对话框,其中包含添加小部件(以及其他内容)。如果触摸Widgets行,您将获得一个小部件菜单,如模拟时钟1到4。

根据developer.android.com/guide/topics/appwidgets,这些是特殊实体,可让您的流程在另一个流程的视图中显示内容。像主屏幕。您可以免费继承一种特殊的广播协议,但您也可以通过与developer.android.com/reference/android/widget/RemoteViews.html主机中的视图进行交互,这些协议似乎涉及编组。我刚刚开始考虑写一个(这就是我发现这个问题的方式),但文档确实说你只能使用FrameLayoutLinearLayoutRelativeLayout布局,它们只能包含AnalogClockButtonChronometerImageButtonImageViewProgressBar', TextView , and ViewFlipper`“小部件类“ - ”不支持这些类的后代。“

这只是有点限制!

答案 4 :(得分:3)

让我们看到明显的差异,没有巨大的描述..

  • 视图是一个对象,可以放在布局或页面中。它是 用户界面组件的基本构建块(您可以参考 这些组件作为小部件)。
  • 小工具是小规模视图(如按钮视图,复选框等),可嵌入其他视图(如主屏幕,登录屏幕) 等)。

现在你可以这样认为,view是一个容器或占位符,widget是可以放在任何视图中的独立控件。

但请记住,这些更像是设计概念,而不是核心定义。

最后,可以得出结论,

  • 一个独立的视图,可以在任何其他视图中用作UI元素,可以称为小部件。

有关详细说明,请查看以下基本代码:



<!doctype html>
   <head>
      <title>New jQuery UI Widget by souro</title>
      <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css">
      <script src="http://code.jquery.com/jquery-1.10.2.js"></script>
      <script src="http://code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
      <script>
         $(function() {
            $.widget("iP.myButton", {
               _create: function() { 
                  this._button = $("<button>"); 
                  this._button.text("My first Widget Button");
                  this._button.width(this.options.width) 
                  this._button.css("background-color", this.options.color);    
                  this._button.css("position", "absolute");   
                  this._button.css("left", "100px");            
                  $(this.element).append(this._button);
               },
            });
            $("#button1").myButton();
         });
      </script>
   </head>
   <body>
      <div id="button1"></div>
   </body>
</html>
&#13;
&#13;
&#13;

现在您可以看到 myButton 是一个小规模的独立视图,即小部件,它将被放置在容器中 button1 ,即< strong> view ,是的,您可以将此小部件放在任何其他视图中,即小部件的用途。我猜是有道理的。

答案 5 :(得分:1)

只是来自“The Busy Coder's Guide to Android Development”的引文,第6章:

  

所有小部件,包括显示的小部件   在上面,扩展View,并因此给出   所有小部件都是一个有用的数组   超出这些的属性和方法   已经描述过了。

答案 6 :(得分:0)

视图与布局,占位符有关。

小部件关注数据,UI行为(前滑块)。视图包含小部件。

答案 7 :(得分:0)

我对此有着同样的困惑,尤其是两个包android.viewandroid.widget。我最终认为小部件是“随时可用”的视图,而视图只是构建小部件的元素。如果我创建一个将直接用于布局的自定义视图,我会认为是一个小部件。

答案 8 :(得分:0)

view是widget的超类,因此widget是一种视图。在“pro android 4”中,作者将它们视为同一件事。

“视图,小部件,控件”每个都代表一个UI元素。示例包括按钮,网格,列表,窗口,对话框等。术语视图,小部件和控件可互换使用在本章中。“