感谢大佬:https://www.jianshu.com/p/7aedea560f16

在Android中用纯Java代码布局

本文的完成了参考了一篇国外的教程,在此表示感谢。
Android中的界面布局主要有两种方式,一种是xml文件和Java代码结合的布局方式,一种是完全依靠Java代码布局。

两种布局方式的比较

对于第一种方式,大多数人都比较熟悉,在这里就不细说了。这种方式的好处包括代码的解耦,图形化的布局界面,清晰明了,布局完后可以立马得到反馈,还有xml格式自身带来的优点。
对于第二种方式它最大的好处就是可以在运行的过程中动态地改变界面,用xml的布局是静态的。并且对于xml布局中的大部分属性都有相对应的Java方法来进行设置。
好,下面开始看怎么用Java代码布局

关于Layout Parameters

Layout Parameters决定了你的view相对于父view和兄弟view的位置,我们通常通过ViewGroup.LayoutParams来进行设置

关于ID

我们在用xml布局的时候有时候需要设置好ID,比如相对布局设置位置的时候要根据ID来设置,同样,在Java布局方式中有setId方法和getId方法来进行设置和获取。

关于dp和px

为了达到更好的显示效果,我们在xml布局的时候通常会采用dp作为单位,来设置控件的大小,但是在Java代码中,我们的方法接收传入参数是按照px来设置的,所以如果你想设置某控件的宽度为200dp,那么,你需要提前把它转化为px单位下的宽度,然后再进行设置。
更加详细的内容在代码中进行了展示,配合有详细的注解说明。

import android.app.Activity;
import android.content.res.Resources;
import android.graphics.Color;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RelativeLayout;public class OnlyJavaLayoutActivity extends Activity {private boolean clicked = false;private Button myButton;private EditText myEditText;@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//定义两个控件,button和edittextmyButton = new Button(this);myButton.setText("Press me");myEditText = new EditText(this);myEditText.setHint("See me");//为空间设置IDmyButton.setId(1);myEditText.setId(2);//定义好父容器并设置相关属性RelativeLayout myLayout = new RelativeLayout(this);myLayout.setBackgroundColor(Color.BLUE);//设置Button的布局参数RelativeLayout.LayoutParams buttonParams =new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);buttonParams.addRule(RelativeLayout.CENTER_HORIZONTAL);buttonParams.addRule(RelativeLayout.CENTER_VERTICAL);//设置EditText的布局参数RelativeLayout.LayoutParams textParams =new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);textParams.addRule(RelativeLayout.ABOVE, myButton.getId());textParams.addRule(RelativeLayout.CENTER_HORIZONTAL);textParams.setMargins(0, 0, 0, 80);//这里的80是px//设置EditText的宽度为指定大小宽度,要相应的dp转化为pxResources r = getResources();int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 200, r.getDisplayMetrics());myEditText.setWidth(px);//将布局添加到父容器中myLayout.addView(myButton, buttonParams);myLayout.addView(myEditText, textParams);//设置显示父容器setContentView(myLayout);//为Button设置点击事件,点击使其变宽final int wrapWidth = myButton.getLayoutParams().width;myButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//点击Button之后使其宽度变宽,再次点击恢复之前的wrap_content状态,可以配合属性动画使其变化更加自然if (!clicked) {myButton.getLayoutParams().width = 800;} else {myButton.getLayoutParams().width = wrapWidth;}clicked = !clicked;myButton.requestLayout();}});}
}

效果如下图:

在Android中用纯Java代码布局相关推荐

  1. java中android_在Android中用纯Java代码布局

    本文的完成了参考了一篇国外的教程,在此表示感谢. Android中的界面布局主要有两种方式,一种是xml文件和Java代码结合的布局方式,一种是完全依靠Java代码布局. 两种布局方式的比较 对于第一 ...

  2. Android --- 使用纯java代码实现相对布局(通俗易懂)

    java布局 java代码布局和xml布局的区别 1.Java纯布局更加的灵活,比如自定义控件或一些特殊要求时,使用java代码布局 2.常用的xml布局是所见即所得的编写方式,以及xml本身拥有一些 ...

  3. Android——使用纯java代码实现线性布局(通俗易懂)

    https://blog.csdn.net/sinat_31998357/article/details/49363707

  4. 基于纯Java代码的Spring容器和Web容器零配置的思考和实现(3) - 使用配置

    经过<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(1) - 数据源与事务管理>和<基于纯Java代码的Spring容器和Web容器零配置的思考和实现(2) - ...

  5. Android如何在java代码中设置margin

    Android如何在java代码中设置margin,也就是组件与组件之间的间距. 代码中设置: LinearLayout.LayoutParams params = new LinearLayout. ...

  6. springMVC纯java代码配置(一)- 数据源与事务管理(转载的哦)

    原文地址:http://my.oschina.net/devleon/blog/530803?fromerr=9Z8ZFdbf 摘要 自Spring3.0开 始,Spring正式将JavaConfig ...

  7. java编写流星_纯Java代码实现流星划过天空

    废话不多说了,直接给大家贴java代码了. import java.awt.Color; import java.awt.Graphics; import java.awt.image.Buffere ...

  8. android中在java代码中设置Button按钮的背景颜色

    android中在java代码中设置Button按钮的背景颜色 1.设置背景图片,图片来源于drawable: flightInfoPanel.setBackgroundDrawable(getRes ...

  9. 【iText5 生成PDF】纯Java代码实现生成PDF(自定义表格、文本水印、单元格样式)

    工作中遇到需要生成PDF.最终选择了iText.其他也有通过html再生成.感觉不太适合就用了代码实现. 使用iText 5.5.13.1版本.纯Java代码实现 1.自定义表格合并指定行列完成数据填 ...

最新文章

  1. Vue 脚手架CLI 初始化项目
  2. socket编程流程与函数(实用篇)
  3. Python 字符串操作基础
  4. swarm 容器_Oracle应用容器云上的WildFly Swarm
  5. 做折线图坐标轴数字_Excel折线图表的另类表达制作?牛闪君使用了双线表达法来完成...
  6. [下载]青岛交通旅游地图[download]
  7. 总结之《征服C指针》
  8. Mac下IntelliJ IDEA常用快捷键
  9. linux怎么进入自己添加的软盘,linux – 创建没有mount的虚拟软盘映像?
  10. 服务器硬件规格常用查看命令——CPU相关命令
  11. 父爱,是一首深沉的诗。
  12. dede tag标签作用
  13. 打印标签时如何解决打印偏移
  14. Android ART 即时 (JIT) 编译器详解
  15. 快速排序(quickSort)
  16. 织梦dedecms整站源码详细安装教程
  17. 关东升的《从零开始学Swift》
  18. 什么是TSO(tidb配置tso)
  19. VHDL学习笔记——顶层程序编写
  20. 云队友丨替刘强东花钱的人

热门文章

  1. Mathcad tips_符号计算
  2. 学生和教师信息管理系统
  3. Android项目:手机安全卫士(12)—— 通讯卫士之电话短信黑名单设置与拦截
  4. 2021年山东省安全员C证考试内容及山东省安全员C证试题及解析
  5. APICloud集成微信支付(wxPay第二种方案)
  6. PPC挑战上网本 多普达Touch HD使用评测
  7. Python标识EXCEL文件中的重复行
  8. JQuery特效之心形图片墙
  9. java调用驱动_Java中间件及其驱动调用、加载方法及转换装置的制造方法
  10. 年纪轻轻,身体也好,有必要买重大疾病保险吗?