在進(jìn)行UI布局的時(shí)候冒签,可能經(jīng)常會(huì)用到 android:gravity 和 android:layout_Gravity 這兩個(gè)屬性。
關(guān)于這兩個(gè)屬性的區(qū)別,網(wǎng)上已經(jīng)有很多人進(jìn)行了說(shuō)明诞吱,這邊再簡(jiǎn)單說(shuō)一下。 (資料來(lái)自網(wǎng)絡(luò))
LinearLayout有兩個(gè)非常相似的屬性:
android:gravity與android:layout_gravity儒洛。
他們的區(qū)別在于:
android:gravity 屬性是對(duì)該view中內(nèi)容的限定.比如一個(gè)button 上面的text. 你可以設(shè)置該text 相對(duì)于view的靠左精耐,靠右等位置.a(chǎn)ndroid:layout_gravity是用來(lái)設(shè)置該view相對(duì)與父view 的位置.比如一個(gè)button 在linearlayout里狼速,你想把該button放在linearlayout里靠左、靠右等位置就可以通過(guò)該屬性設(shè)置.
即android:gravity用于設(shè)置View中內(nèi)容相對(duì)于View組件的對(duì)齊方式卦停,而android:layout_gravity用于設(shè)置View組件相對(duì)于Container的對(duì)齊方式向胡。
原理跟android:paddingLeft恼蓬、android:layout_marginLeft有點(diǎn)類似。如果在按鈕上同時(shí)設(shè)置這兩個(gè)屬性僵芹。
android:paddingLeft="30px" 按鈕上設(shè)置的內(nèi)容離按鈕左邊邊界30個(gè)像素android:layout_marginLeft="30px" 整個(gè)按鈕離左邊設(shè)置的內(nèi)容30個(gè)像素
下面回到正題处硬, 我們可以通過(guò)設(shè)置android:gravity="center"來(lái)讓EditText中的文字在EditText組件中居中顯示;同時(shí)我們?cè)O(shè)置EditText的android:layout_gravity="right"來(lái)讓EditText組件在LinearLayout中居右顯示拇派『稍看下效果:

正如我們所看到的,在EditText中件豌,其中的文字已經(jīng)居中顯示了疮方,而EditText組件自己也對(duì)齊到了LinearLayout的右側(cè)。
附上布局文件:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<EditText
android:layout_width="wrap_content"
android:gravity="center"
android:layout_height="wrap_content"
android:text="one"
android:layout_gravity="right"/>
</LinearLayout>
那么上面是通過(guò)布局文件的方式來(lái)設(shè)置的茧彤。骡显,相信大家都曾寫過(guò),那么如何通過(guò)Java代碼來(lái)設(shè)置組件的位置呢曾掂?
依然考慮實(shí)現(xiàn)上述效果惫谤。
通過(guò)查看SDK,發(fā)現(xiàn)有一個(gè)setGravity方法珠洗, 顧名思義溜歪, 這個(gè)應(yīng)該就是用來(lái)設(shè)置Button組件中文字的對(duì)齊方式的方法了。
仔細(xì)找了一圈险污,沒(méi)有發(fā)現(xiàn)setLayoutgravity方法痹愚, 有點(diǎn)失望。 不過(guò)想想也對(duì)蛔糯, 如果這邊有了這個(gè)方法拯腮, 將Button放在不支持Layout_Gravity屬性的Container中如何是好!
于是想到蚁飒, 這個(gè)屬性有可能在Layout中 动壤, 于是仔細(xì)看了看LinearLayout 的 LayoutParams, 果然有所發(fā)現(xiàn)淮逻, 里面有一個(gè) gravity 屬性琼懊,相信這個(gè)就是用來(lái)設(shè)置組件相對(duì)于容器本身的位置了,沒(méi)錯(cuò)爬早,應(yīng)該就是他了哼丈。
實(shí)踐后發(fā)現(xiàn),如果如此筛严, 附上代碼醉旦,各位自己看下。
代碼比較簡(jiǎn)單,但是發(fā)現(xiàn)它們還是花了我一點(diǎn)時(shí)間的车胡。
Button button = new Button(this);
button.setText("One");
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
//此處相當(dāng)于布局文件中的Android:layout_gravity屬性
lp.gravity = Gravity.RIGHT;
button.setLayoutParams(lp);
//此處相當(dāng)于布局文件中的Android:gravity屬性
button.setGravity(Gravity.CENTER);
LinearLayout linear = new LinearLayout(this);
//注意檬输,對(duì)于LinearLayout布局來(lái)說(shuō),設(shè)置橫向還是縱向是必須的匈棘!否則就看不到效果了丧慈。
linear.setOrientation(LinearLayout.VERTICAL);
linear.addView(button);
setContentView(linear);
或者這樣也可以:
Button button = new Button(this);
button.setText("One");
//此處相當(dāng)于布局文件中的Android:gravity屬性
button.setGravity(Gravity.CENTER);
LinearLayout linear = new LinearLayout(this);
//注意,對(duì)于LinearLayout布局來(lái)說(shuō)主卫,設(shè)置橫向還是縱向是必須的逃默!否則就看不到效果了。
linear.setOrientation(LinearLayout.VERTICAL);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
//此處相當(dāng)于布局文件中的Android:layout_gravity屬性
lp.gravity = Gravity.RIGHT;
linear.addView(button, lp);
setContentView(linear);
好了簇搅,效果圖就不上了笑旺,跟上面的一樣。 就講這么多馍资。
另外筒主,要設(shè)置在RelativeLayout中的位置時(shí)使用addRule方法,如下:
params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.CENTER_IN_PARENT);
mContainer.addView(progress,params);
如果覺(jué)得本文對(duì)您有幫助鸟蟹, 還請(qǐng)留言支持一下乌妙, 非常感謝!