Acerca de los tres atributos de RelativeLayout en Android: layout_centerVertical, layout_centerInParent, layout_centerHorizontal

Hoy, al mirar el código de página del cliente de Sina Weibo escrito por un gran dios en Internet, lo vi en un diseño relativo


 android: layout_centerVertical = "true" este párrafo


Entonces, el papel que juega este código me ha interesado, y el foco de atención es: el resultado de este código.

Cuando estaba mirando la página de vista xml de la máquina de desarrollo de eclipse, encontré que después de esta oración, apareció una línea verde en el RelativeLayout correspondiente. Mi sensación intuitiva es que esta oración debería aplicarse a este RelativeLayout. Del control.

Pero con una actitud científica, volví a comprobar y encontré que había muy poca información en Internet. Al final, recurrí a un truco asesino: ¡practicarlo yo mismo!

El resultado superó mis expectativas:

De hecho, la función de esta oración es: Deje que este diseño relativo esté en el centro de la dirección vertical de su control padre. No especifica que sus controles internos estén en el centro de la dirección vertical

Leí un artículo que es más poderoso antes: http://blog.csdn.net/softkexin/article/details/5933589 

Este artículo trata sobre el papel de algunos atributos en RelativeLayout

Las últimas tres oraciones: "

android: layout_centerInParent = "true" --Coloca el control en el centro del control principal
android: layout_centerHorizontal = "true" --Coloca el control en el centro de la dirección horizontal
android: layout_centerVertical = "true" --Coloca el control en la vertical El centro de la dirección

"

La descripción de las dos últimas de estas tres oraciones debe cambiarse a:

android: layout_centerHorizontal = "true" - El control actual se coloca en el control principal la posición central horizontal
android: layout_centerVertical = "true" - El control actual se coloca en la posición central vertical del control principal

Aquí hay una captura de pantalla del efecto de Android: layout_centerVertical = "true" :


Código correspondiente:

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

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        <span style="color:#ff0000;">android:layout_centerVertical="true"</span> >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="helloworld" />
    </RelativeLayout>

</RelativeLayout>
A continuación se muestra una captura de pantalla del efecto android: layout_centerHorizontal = "true" :

Código correspondiente:

<span style="color:#333333;"><?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        </span><span style="color:#ff0000;">android:layout_centerHorizontal="true" </span><span style="color:#333333;">>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="helloworld" />
    </RelativeLayout>

</RelativeLayout></span>

En cuanto a android: layout_centerInParent = "true", este atributo es en realidad equivalente a combinar los dos atributos anteriores, lo que tiene el mismo efecto que especificar los dos primeros como verdaderos al mismo tiempo.

Es necesario agregar una cosa más: estas propiedades solo aparecerán cuando el control padre sea RelativeLayout, es decir, el control hijo tendrá estas tres propiedades cuando el control padre sea un diseño relativo.

Independientemente del diseño del control secundario, TextView o Button, tendrá estas propiedades.

En este momento, el RelativeLayout en sí, que es el control principal, no tiene estas propiedades. En otras palabras, una vez que un control puede especificar estas tres propiedades, debería ser un control secundario de RelativeLayout. Por supuesto, esta es solo la conclusión que he sacado hasta ahora. No está muy claro si es correcta o no, pero estas son las conclusiones que he sacado basándome en la práctica en la actualidad, al menos por el momento, puede ser utilizado como referencia.

    Finalmente, déjame hablar sobre mis pensamientos:

            学习这个东西,真的是要多思考,这样才能触类旁通,还要有钻研的精神,实事求是的态度,我之所以会对这个属性的显示结果感到好奇,也有很大一部分原因,在于我不久前研究了android:gravity与android:layout_gravity的区别,gravity是作用于这个控件的子控件的;而layout_gravity则是作用于使用这个属性的控件本身的,它是指定让自己处于父控件的什么位置上(靠左,靠右,居中);当我看见android:layout_centerVertical=true这个属性出现在的控件是一个RelativeLayout中时,我的第一反应就是这个属性是作用在子控件上的,然后我又去视图编辑器里面看,发现有了这个属性相对布局本身中间多了一条绿色的横线。就主观来推测的话,至少我是认为,这个横线说明这个布局里面的控件排列遵循这条横线。这样就得出了有了这个属性,布局内部控件要在竖直方向上居中的结论,但是我想到:layout_gravity不是作用于子控件的,而是作用于自身的,指定自身相对于父控件的位置,这样的话,让我直接联想到的就是:带有"layout_"这样的属性,应该都是作用于自身才对,有的朋友可能要问了:为什么要作用于自身?

其实我想到的原因很简单,google的设计人员,跟我们一样,也喜欢简单易用的原则,那么如果带有"layout_"这样名字的属性,既有作用于子控件的,又有作用于自身的,那样的话,使用起来感觉很混乱,而且也不方便编程人员的记忆,从这个角度讲android布局本身的易用性也会打折扣,作为全世界最优秀的软件设计人员,不可能犯这么二的错误吧~

      所以我就抱着试试看的态度,进行了这两个属性的试验,结果果然跟自己的第一印象不同。也验证了我的另一个推测:带有"layout_"字样的属性,一般情况下都是作用于自身的。

    总结一下我一开始的话,学习这个东西真的要多思考(比如知道了android:gravity与android:layout_gravity的作用范围区别之后,看到带有"layout_"字样的属性的时候就要注意,与不带"layout_"的同名属性之间的区别是不是跟gravity的情况类似),还要有钻研精神(比如在网上找了很多的资料,但是没有一个讲的特别清楚的情况下,要做好自己调查的思想准备,因为这样才能真正掌握),实事求是的态度(比如我在这个例子中的表现,一开始就先入为主的感觉作用范围是什么,这样的推测的方式不能说不好,因为很多时候我们的推测也都是有依据的,很多时候也会做出正确的推测,但是之后要有一个实事求是的态度去看待,不能自己推测之后就主观臆断,不能怕麻烦,怕动手浪费时间,其实自己去求真的结果很可能是你的做法不仅没有浪费时间,而且还为以后节省了很多的时间)。

   好了,废话一大堆,希望这篇文章可以帮到一些也遇到同样问题的朋友~谢谢~~^o^



Supongo que te gusta

Origin blog.csdn.net/awy1988/article/details/40341995
Recomendado
Clasificación