java中android_在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和edittext

myButton = new Button(this);

myButton.setText("Press me");

myEditText = new EditText(this);

myEditText.setHint("See me");

//为空间设置ID

myButton.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转化为px

Resources 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() {

@Override

public void onClick(View v) {

//点击Button之后使其宽度变宽,再次点击恢复之前的wrap_content状态,可以配合属性动画使其变化更加自然

if (!clicked) {

myButton.getLayoutParams().width = 800;

} else {

myButton.getLayoutParams().width = wrapWidth;

}

clicked = !clicked;

myButton.requestLayout();

}

});

}

}

效果如下图:

7aedea560f16

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/554948.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DataWorks概述

文章目录一、DataWorks概况1.1 定义1.2 功能1.3 与MaxCompute的关系二、基于DataWorks与MaxCompute构建云数仓一站式大数据开发治理DataWorks学习DataWorks 是什么?产品定位产品受众核心能力数据治理的概念、需求层次和目标对于数据治理概念的一些基本理解数据治理的…

php默认语法,php基本语法

基础 PHP 语法PHP 脚本可放置于文档中的任何位置。PHP 脚本以 <?php 开头&#xff0c;以 ?> 结尾&#xff1a;<?php // 此处是 PHP 代码?>PHP 文件的默认文件扩展名是 ".php"。PHP 文件通常包含 HTML 标签以及一些 PHP 脚本代码。PHP 大小写敏感在 P…

Dataworks的使用——详细说明

一、开通Dataworks &#xff08;1&#xff09;百度搜Dataworks&#xff0c;进入如下页面&#xff0c;点击立即开通 &#xff08;2&#xff09; 这里要选好自己想要的配置&#xff0c;这里展示我之前的配置 解决方案&#xff1a;选DataWorksMaxCompute组合产品 DataWorks&…

java读excel乱码,【java 项目中,上传的excel打开时无法正常打开,显示乱码 ,怎样可以正常打开,】java读取excel乱码...

java 项目中&#xff0c;上传的excel打开时无法正常打开&#xff0c;显示乱码 &#xff0c;怎样可以正常打开&#xff0c;1、转换格就是将受损的Excel XP簿另存格式选为SYLK。如果可以打开受件&#xff0c;只是不能进行各种编辑和打印操作&#xff0c;那么建议首先尝试这种方法…

DataWorks快速入门

快速入门 入门概述 说明 如果您是第一次使用DataWorks&#xff0c;请确认已经根据准备工作模块的操作&#xff0c;准备好账号和工作空间角色等内容后&#xff0c;登录DataWorks控制台&#xff0c;单击相应工作空间后的进入数据开发&#xff0c;即可进行数据开发操作。本模块的…

java反射jdk1.8,Java基础----jdk1.8 反射实验

Java基础----jdk1.8 反射实验(写在最前&#xff1a;还没入门的搬砖工的一本正经的胡说八道)引言&#xff1a; 最近做到的项目中&#xff0c;需要给对接方提供一个公共接口&#xff0c;根据对方传入的 XML 文件的 rootelement 分发调用接口&#xff0c;最简单的使用 if-else if…

基于ODPS的SQL语句

&#xff08;一&#xff09;基本概念 1.ODPS&#xff1a;Open Data Processing Service&#xff0c; 简称ODPS&#xff1b;是由阿里云自主研发&#xff0c;提供针对TB/PB级数据、实时性要求不高的分布式处理能力&#xff0c;应用于数据分析、挖掘、商业智能等领域&#xff1b;…

php.amazeui,AmazeUI 导航条的实现示例

拥有易用的导航条对于任何网站都很重要。本文主要介绍了AmazeUI 导航条的实现示例&#xff0c;分享给大家&#xff0c;具体如下&#xff1a;导航条Amaze UI导航切换 首页项目下拉 标题1. 去月球2. 去火星3. 还是回地球4. 下地狱5. 桥头一回首其他 注册随便看看登录....am-topba…

JNDI用法详解

JNDI全称(Java Naming and Directory Interface)&#xff0c;是java命名和目录接口。它是一个应用程序设计的API&#xff0c;为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口&#xff0c;类似JDBC都是构建在抽象层上。 1、命名的概念与应用 JNDI中的命名(Nam…

django mongodb mysql,Django MongoDB Django NoSQL方案

1 安装MongoDB1&#xff0c;下载所需要的版本&#xff0c;地址&#xff1a;http://www.mongodb.org/display/DOCS/Downloads2&#xff0c;将MongoDB加入环境变量3&#xff0c;设定好放置数据库文件的路径&#xff0c;比如d:db4&#xff0c;打开CMD&#xff0c;不要关闭这个mong…

BigDecimal保留两位小数

文章目录前言1.代码实现2.方法详解注释前言 在项目中经常会用到小数的一些计算&#xff0c;而float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算&#xff0c;这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而&#xff…

matlab人民币识别,MATLAB-OCR 用MATLAB实现人民币纸币金额的识别与统计 - 下载 - 搜珍网...

用MATLAB实现人民币纸币金额的识别与统计/说明.txt用MATLAB实现人民币纸币金额的识别与统计/钞票面额识别与统计/matlab程序及图片/1-1.jpg用MATLAB实现人民币纸币金额的识别与统计/钞票面额识别与统计/matlab程序及图片/1-2.JPG用MATLAB实现人民币纸币金额的识别与统计/钞票面…

DataIntegrityViolationException: Error attempting to get column ‘xx‘——DataIntegrityViolationExceptio

一、解决办法 项目中在更新数据库时出现异常&#xff0c;org.springframework.dao.DataIntegrityViolationException&#xff0c;当然如果控制台直接报这个异常问题的解决估计也不至于让我写篇博客。 先说这个异常代表的含义吧&#xff1a; 这个异常的意思就是在更新&#xff…

php oracle817,Oracle 817 For Linux/Unix安装文档-数据库专栏,ORACLE

oracle 817安装文档1&#xff0e; 创建dba组和oracle用户roothz_cmode # groupadd dbaroothz_cmode # useradd -m -d /opt/oracle -s /bin/ksh -g dba oracleroothz_cmode # passwd oracle new password:re-enter new password:passwd (system): passwd successfully chan…

Java中new Date插入mysql数据库,数据库时间多一秒问题

这是由于new Date()时&#xff0c;实际上是调用的System.currentTimeMillis()方法&#xff0c;即获得以毫秒为级别的时间戳。 一般数据库表的字段类型datetime/timestamp长度都是设置为0。 MySQL数据库对于毫秒大于500的数据进行进位&#xff0c;所以就造成的MySQL中的时间多一…

学php还是golang,学swoole还是golang

Swoole是一个面向生产环境的 PHP 异步网络通信引擎&#xff0c;使 PHP 开发人员可以编写高性能的异步并发 TCP、UDP、Unix Socket、HTTP&#xff0c;WebSocket 服务。 (推荐学习&#xff1a;swoole视频教程)Swoole 可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏…

java8 函数编程Consumer使用详解

Consumer 源码 package java.util.function;import java.util.Objects;FunctionalInterface public interface Consumer<T> {void accept(T t);default Consumer<T> andThen(Consumer<? super T> after) {Objects.requireNonNull(after);return (T t) ->…

java解析vue对象数组,Java数组

Java提供了一个数据结构&#xff0c;所述数组&#xff0c;其存储相同类型的元件的固定大小的连续集合。数组用于存储数据集合&#xff0c;但将数组视为相同类型变量的集合通常更为有用。您可以声明一个数组变量&#xff0c;例如数字和数字[0]&#xff0c;数字[1]和...&#xff…

Java中List的subList()方法及使用注意事项

List<Object> list new Arraylist<>();List<Object> subList list.subList(0, 5);其中subList(0, 5)取得的是下标为0到4的元素,不包含下标为5的元素. java.util.List中的subList方法返回列表中指定的 fromIndex&#xff08;包括 &#xff09;和 toIndex&a…

php有关卡的消消乐源码,查看“宝可消消乐/活动关卡/得分挑战关卡/超梦”的源代码...

因为以下原因&#xff0c;您没有权限编辑本页&#xff1a;您所请求的操作仅限于该用户组的用户使用&#xff1a;用户您可以查看与复制此页面的源代码。关卡{| {{classcolortable|type|psychic|widthfull}}|{{Shuffle Stage| stage 得分挑战关卡| name 超梦| number 150| for…