Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 重量是如何工作的?_Java_Android_View_Graphics - Fatal编程技术网

Java 重量是如何工作的?

Java 重量是如何工作的?,java,android,view,graphics,Java,Android,View,Graphics,我研究了另一个stackoverflow问题//答案,发现布局权重的工作定义是“此属性为视图指定“重要性”值,并允许其展开以填充父视图中的任何剩余空间” (来源:) 我试图将这个概念应用到我的代码中。 当前我的代码(不含布局权重)为 目前的布局是 (家庭应占用match_parent的所有空间bc) 但是,如果我将android:layout_weight=“1”添加到两个文本视图中, 我知道这个布局 (两者都可见并共享相同的空间) 我的问题是,从布局重量的工作定义来看,这是如何发生的?本例

我研究了另一个stackoverflow问题//答案,发现布局权重的工作定义是“此属性为视图指定“重要性”值,并允许其展开以填充父视图中的任何剩余空间” (来源:)

我试图将这个概念应用到我的代码中。 当前我的代码(不含布局权重)为


目前的布局是 (家庭应占用match_parent的所有空间bc)

但是,如果我将android:layout_weight=“1”添加到两个文本视图中, 我知道这个布局

(两者都可见并共享相同的空间)


我的问题是,从布局重量的工作定义来看,这是如何发生的?本例中的布局权重将为两个文本视图平均分配额外空间。但是没有额外的空间,因为第一个具有宽度匹配父项,这将使它占据整个父项的宽度(没有额外的空间)

这是怎么发生的

为了修正这些想法,假设LinearLayout的宽度为100px

  • TextView Home是匹配的父对象,因此为100px
  • TextView关于MATCH_父对象是否为100px
所以,孩子们使用的总宽度是100px+100px=200px

现在,让我们计算剩余宽度:这是可用宽度和所有子级使用的宽度之间的差值:

RemainingWidth=AvailableWidth(100px)-儿童使用的总宽度(200px)=-100px

注意它是负数

有两个子视图,因此根据它们的权重将剩余宽度分配给每个子视图。在这种情况下,每个孩子将获得剩余的50%。。。这意味着每个孩子接收-50px

因此,最后:

  • TextView主视图宽度为100px+-50px=50px
  • 宽度为100px+-50px=50px的文本视图

完美的逻辑,但不是很直观。因此,使用布局权重时,建议始终将chid视图的宽度设置为0。

系统计算
权重总和,因为您没有给它一个。这等于2,因此它将
宽度相应地分成两半。你到底想做什么(你想做什么)?要正确使用
权重
,在水平方向的
线性布局中,您的宽度应为“0dp”
这会产生正确的结果,但我认为布局权重只是与分割额外空间有关,在这种情况下,没有额外空间不,这是不正确的。如果前面的视图不使用权重,则可以使用它为其他视图提供剩余空间。但对每一种观点赋予权重会使它们采取相应的行动。因此,它的一个重量为.3,另一个重量为.6,那么后者将占据大约2/3thx的空间,这就更加有意义了。如果有3个视图(没有额外的空间),其中两个视图的权重为1,另一个视图未指定权重。就你刚才所说的而言,这是怎么回事?
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >
    <TextView 
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:text="Home"
       android:gravity="center"
     />
    <TextView
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:text="About"
       android:gravity="center"
      />
</LinearLayout>