首页 > 其他分享 >Android中 android:gravity 和 android:layout_gravity的区别

Android中 android:gravity 和 android:layout_gravity的区别

时间:2022-10-06 12:00:38浏览次数:60  
标签:layout LinearLayout gravity height width android Android


在配置xml布局时,经常用到 android:gravity  和 android:layout_gravity这两个属性,这里记录一下他们的区别。


1.android:gravity  


android:gravity 常用于控制view的内部控件或者内容的位置,类似于于padding,如下所示:

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="right" //控制EditText控件的位置居右
android:orientation="vertical">

<EditText
android:layout_width="200dp"
android:layout_height="wrap_content"
android:gravity="center" //控制EditText控件的文本的位置居中
android:text="input text" />

</LinearLayout>


Android中 android:gravity 和 android:layout_gravity的区别_android



再看下面的代码:

<?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:gravity="center"
android:orientation="vertical">

<LinearLayout
<span style="color:#ff0000;">android:layout_width="match_parent"
android:layout_height="wrap_content"</span>
android:gravity="right"
android:orientation="vertical">

<EditText
android:layout_width="200dp"
android:layout_height="wrap_content"
android:gravity="center"
android:text="input text" />

</LinearLayout>

</LinearLayout>

Android中 android:gravity 和 android:layout_gravity的区别_xml_02



在根节点布局中使用了android:gravity="center",影响了里面的view中的位置,不难发现,第二个LinearLayout设置了android:layout_width="match_parent",位置没有受到影响,设置了android:layout_height="wrap_content",第二个LinearLayout就垂直居中了。


2.android:layout_gravity

android:layout_gravity使用的时候一般都要有上级布局,也就是不能用于根节点,如下代码所示:


<?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:layout_gravity="center"
android:orientation="vertical">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">

<EditText
android:layout_width="200dp"
android:layout_height="wrap_content"
android:gravity="center"
android:text="input text" />

</LinearLayout>

</LinearLayout>


红色部分的代码

android:layout_gravity="center"

就是无效代码。

下面布局和效果图:


<?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="vertical">

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:orientation="vertical">

<EditText
android:layout_width="200dp"
android:layout_height="wrap_content"
android:gravity="center"
android:text="input text" />

</LinearLayout>

</LinearLayout>


Android中 android:gravity 和 android:layout_gravity的区别_android




Java代码来设置组件的位置

 


[java] 
​​view plain​​​
​​​copy​​
​​print​​
​​?​​

1. Button button = new Button(this);
2. button.setText("One");
3. LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
4. //此处相当于布局文件中的Android:layout_gravity属性
5. lp.gravity = Gravity.RIGHT;
6. button.setLayoutParams(lp);
7. //此处相当于布局文件中的Android:gravity属性
8. button.setGravity(Gravity.CENTER);
9.
10. LinearLayout linear = new LinearLayout(this);
11. //注意,对于LinearLayout布局来说,设置横向还是纵向是必须的!否则就看不到效果了。
12. linear.setOrientation(LinearLayout.VERTICAL);
13. linear.addView(button);
14. setContentView(linear);

 

 

或者这样也可以:

 


[java] 
​​view plain​​​
​​​copy​​
​​print​​
​​?​​
1. Button button = new Button(this);
2. button.setText("One");
3. //此处相当于布局文件中的Android:gravity属性
4. button.setGravity(Gravity.CENTER);
5.
6. LinearLayout linear = new LinearLayout(this);
7. //注意,对于LinearLayout布局来说,设置横向还是纵向是必须的!否则就看不到效果了。
8. linear.setOrientation(LinearLayout.VERTICAL);
9.
10. LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
11. //此处相当于布局文件中的Android:layout_gravity属性
12. lp.gravity = Gravity.RIGHT;
13.
14. linear.addView(button, lp);
15. setContentView(linear);

 

 

好了,效果图就不上了,跟上面的一样。 就讲这么多。

 

另外,要设置在RelativeLayout中的位置时使用addRule方法,如下:


[java] 
​​view plain​​​
​​​copy​​
​​print​​
​​?​​
1. params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
2. params.addRule(RelativeLayout.CENTER_IN_PARENT);
3. mContainer.addView(progress,params);




标签:layout,LinearLayout,gravity,height,width,android,Android
From: https://blog.51cto.com/jdsjlzx/5733539

相关文章

  • Action Bar使用方法 - Android活动栏(一)
     ActionBar主要功能包含: 1.显示选项菜单 2.提供标签页的切换方式的导航功能,可以切换多个fragment. 3. 提供下拉的导航条目. 4.提供交互式活动视图代替选......
  • Android如何判断应用程序是安装在手机内存中还是SD卡
    /***判断包名所对应的应用是否安装在SD卡上*@parampackageName*@return,trueifinstallonSDcard*/publicstaticbooleanisInstallOnSDCard(Stringpac......
  • Android 创建与解析XML(一)—— 概述
    Android是最常用的智能手机平台,XML是数据交换的标准媒介,Android中可以使用标准的XML生成器、解析器、转换器API,对XML进行解析和转换。XML,相关有DOM、SAX、JDOM、DOM......
  • Android 滑动效果基础篇(三)—— Gallery仿图像集浏览
    Android系统自带一个Gallery浏览图片的应用,通过手指拖动时能够非常流畅的显示图片,用户交互和体验都很好。本示例就是通过Gallery和自定义的View,模仿实现一个仿Gallery图......
  • Android 滑动效果入门篇(一)—— ViewFlipper
    ​​​ViewFilpper​​ 是Android官方提供的一个View容器类,继承于ViewAnimator类,用于实现页面切换,也可以设定时间间隔,让它自动播放。又ViewAnimator继承至于FrameLayout......
  • Android 滑动效果入门篇(二)—— Gallery
    ​​​Gallery​​ 是Android官方提供的一个View容器类,继承于AbsSpinner类,用于实现页面滑动效果。从上面的继承关系可以看出,AbsSpinner类继承自AdapterView,因此我们可以......
  • Android 使用Gallery实现Tab
    main.xml布局文件: Java代码​​​​1.<?xmlversion="1.0"encoding="utf-8"?>2.<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/androi......
  • Android Asynchronous HTTPClient的实现和优化
    大家知道Android对UI线程的反应时间要求很高,超过5秒钟直接ANR掉,根本不给你机会多等。而Android应用与后端系统的交互是最基本的需求之一,如何实现高效的AsynchronousHTTPCli......
  • Android GridView控件自定义
    虽然​​Android​​​已自带了GridView,但是,却不够灵活,同时也不能自由添加控件,因此,本人通过需要进一步封装,来实现​​Android自定义GridView控件​​,达到自己需要的效果。......
  • Android实现渐显按钮的左右滑动效果
    本示例演示在Android中实现带渐显按钮的左右滑动效果。关于滑动效果,在我的上一篇博文中提到过,有兴趣的朋友可以访问如果大家想实现带指引效果的左右滑动,请访问博先看下......