absolutelayoutandroid绝对布局怎么设置组件间的距离
absolutelayout 时间:2021-06-29 阅读:(
)
如何对需要动态大小的空间上使用动态布局
你的问题应该是要动态生成空间吧。
下面的答案可以参考下。
首先要却这个界面的布局,是AbsoluteLayout,RelativeLayout还是其他,然后就可以再里面添加控件了:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//确定界面的布局
AbsoluteLayout abslayout=new AbsoluteLayout (this);
setContentView(abslayout);
//创建一个button按钮
Button btn1 = new Button(this);
btn1.setText(”this is a button”);
btn1.setId(1);
//确定这个控件的大小和位置
AbsoluteLayout.LayoutParams lp1 =
new AbsoluteLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT,
0,100);
abslayout.addView(btn1, lp1 );
}
一个界面可以布置一个布局,可以多个布局一起设计:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//设置界面的布局
RelativeLayout relativeLayout = new RelativeLayout(this);
setContentView(relativeLayout);
//添加一个AbsoluteLayout子布局,并给这个布局添加一个button
AbsoluteLayout abslayout=new AbsoluteLayout (this);
abslayout.setId(11);
Button btn1 = new Button(this);
btn1.setText(”this is a abslayout button”);
btn1.setId(1);
AbsoluteLayout.LayoutParams lp0 = new AbsoluteLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT,100,0);
abslayout.addView(btn1, lp0 );
//将这个子布局添加到主布局中
RelativeLayout.LayoutParams lp1 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
lp1.addRule(RelativeLayout.ALIGN_PARENT_TOP);
lp1.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
relativeLayout.addView(abslayout ,lp1);
//再添加一个子布局
RelativeLayout relativeLayout1 = new RelativeLayout(this);
Button btn2 = new Button(this);
btn2.setText(”this is a relativeLayout1 button”);
btn2.setId(2);
RelativeLayout.LayoutParams lp2 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
lp2.addRule(RelativeLayout.ALIGN_PARENT_TOP);
lp2.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
relativeLayout1.addView(btn2 ,lp2);
//将这个布局添加到主布局中
RelativeLayout.LayoutParams lp11 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
lp11.addRule(RelativeLayout.BELOW ,11);
relativeLayout.addView(relativeLayout1 ,lp11);
}如何利用Vaadin的Layout合理布局
Vaadin的Layout是一个布局功能很强大的类,拥有AbsoluteLayout,VerticalLayout,HorizontalLayout,GridLayout等很多的布局子类,今天我们以Vertical为例来讲解在布局中应该注意的问题:
例如,我们需要开发的界面如同最简单的“记事本”一样
那么,我们可以分析出,整个记事本应该有两个部分,一是具有固定高度的菜单栏,二是具有可以伸缩的内容空间,上下排布,因此我们利用VerticalLayout来设置这一布局,在Java中我们如此写到:
出现的效果如下,并非是我们想要的:
然后进行如下调整:
出现了我们想要的效果:
请特别注意以上的几条语句:
layout.setSizeFull();
……
menuPanel.setHeight("32px");
……
contentPanel.setSizeFull();
……
layout.setExpandRatio(contentPanel, 1.0f);android中有几种布局技术,各自优缺点
在4.0以前版本中一共有五种布局,都是ViewGroup的子类。
分别是AbsoluteLayout、RelativeLayout、LinearLayout、FrameLayout、TableLayout。
而TableLayout是LinearLayout的子类。
(中文分别是:绝对布局、相对布局、线性布局、帧布局、表格布局)。
在2.2操作系统中将AbsoluteLayout过期。
而目前FrameLayout、TableLayout也逐渐少用。
在4.0之后又新增GridLayout。
(GridLayout最经典的案例是计算器界面)
总之,Android中一共有六种布局。
目前推荐使用RelativeLayout、LinearLayout、GridLayout三种布局。
一般简单的布局就用LinearLayout,复杂点的用RelativeLayout(可以防止多层嵌套),像FrameLayout,里面的控件是重叠的,AbsoluteLayout里面控件位置是绝对的,在屏幕适配方面就不行了。
dPad是什么意思?
dPad常见于各大安卓模拟器,相当于手机中的“上下左右中”五个按键(也可用于游戏手柄的按键)。
安卓模拟器是一款模拟软件。
它能在电脑上模拟安卓手机系统,并能安装、使用、卸载安卓应用软件,让你在电脑上也能体验操作安卓系统的全过程。
dPad是安卓模拟器可以模拟的一个功能
编写代码:
[xhtml] view plaincopy
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
xmlns:android="/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FFFFFF"
>
<Button
android:id="@+id/myButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="move me"
android:layout_x="20px"
android:layout_y="40px" />
</AbsoluteLayout>
activity代码:
[java] view plaincopy
.chenzheng_java;
import android.app.Activity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.KeyEvent;
import android.widget.AbsoluteLayout;
import android.widget.Button;
import android.widget.Toast;
/**
* @description 控制手机的上下左右四个方向键
* @author chenzheng_java
*
*/
public class DpadActivity extends Activity {
Button button;
DisplayMetrics metrics = new DisplayMetrics();
int screenx = 0 ;//屏幕宽度
int screeny = 0 ;//屏幕高度
int buttonWidth = 80;//按钮宽度
int buttonHeight = 40 ;// 按钮高度
int currentX = 0;// 按钮的当前x坐标
int currentY = 0;// 按钮的当前Y坐标
int step = 0;//移动时候的步长
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dpad);
button = (Button) findViewById(R.id.myButton1);
getWindowManager().getDefaultDisplay().getMetrics(metrics);
screenx = metrics.widthPixels;
screeny = metrics.heightPixels;
/* buttonWidth = button.getWidth();
buttonHeight = button.getHeight();*/
currentX = (screenx-buttonWidth)/2;
currentY = (screeny-buttonHeight)/2;
step = 2;
button.setLayoutParams(new AbsoluteLayout.LayoutParams(buttonWidth, buttonHeight, currentX, currentY));
}
/**
* 当前后左右键被按下的时候,被触发(这里可是有前提的哦,那就是当前的activity中必须没有view正在监听按键
* ,例如:当前如果有一个EditText正在等待输入,当我们按下dpad时,不会触发事件哦)
* Activity.onKeyDown();
当某个键被按下时会触发,但不会被任何的该Activity内的任何view处理。
默认按下KEYCODE_BACK键后会回到上一个Activity。
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_DOWN://按向下键
moveDown();
break;
case KeyEvent.KEYCODE_DPAD_UP:// 按向上键
moveUp();
case KeyEvent.KEYCODE_DPAD_LEFT://按向左键
moveLeft();
case KeyEvent.KEYCODE_DPAD_RIGHT://按向右键
moveRight();
default:
break;
}
return super.onKeyDown(keyCode, event);
}
@SuppressWarnings("deprecation")
private void moveDown(){
int temp = currentY+step;
if(temp>(screeny-buttonHeight)){
showToast("到头了哦!");
button.setLayoutParams(new AbsoluteLayout.LayoutParams(buttonWidth, buttonHeight, screenx, screeny-buttonHeight));
}
else{
currentY = currentY+step;
AbsoluteLayout.LayoutParams params =
new AbsoluteLayout.LayoutParams(buttonWidth, buttonHeight, currentX, currentY);
button.setLayoutParams(params);
}
//button.setLayoutParams(new AbsoluteLayout.LayoutParams(buttonWidth, buttonHeight, currentX, currentY-2));
}
@SuppressWarnings("deprecation")
private void moveUp(){
int temp = currentY-step;
if(temp<=0){
showToast("往上到头了哦!");
button.setLayoutParams(new AbsoluteLayout.LayoutParams(buttonWidth, buttonHeight, screenx, 0));
}
else{
currentY = currentY-step;
AbsoluteLayout.LayoutParams params =
new AbsoluteLayout.LayoutParams(buttonWidth, buttonHeight, currentX, currentY);
button.setLayoutParams(params);
}
}
@SuppressWarnings("deprecation")
private void moveLeft(){
int temp = currentX-step;
if(temp<=0){
showToast("往左边到头了哦!");
button.setLayoutParams(new AbsoluteLayout.LayoutParams(buttonWidth, buttonHeight, 0, screeny));
}
else{
currentX = currentX-step;
AbsoluteLayout.LayoutParams params =
new AbsoluteLayout.LayoutParams(buttonWidth, buttonHeight, currentX, currentY);
button.setLayoutParams(params);
}
}
@SuppressWarnings("deprecation")
private void moveRight(){
int temp = currentX+step;
if(temp>=(screenx-buttonWidth)){
showToast("往右边到头了哦!");
button.setLayoutParams(new AbsoluteLayout.LayoutParams(buttonWidth, buttonHeight, screenx-buttonWidth, currentY));
}
else{
currentX = currentX+step;
AbsoluteLayout.LayoutParams params =
new AbsoluteLayout.LayoutParams(buttonWidth, buttonHeight, currentX, currentY);
button.setLayoutParams(params);
}
}
/**
* 弹出提示信息
* @param text 提示信息
*/
private void showToast(String text){
Toast.makeText(this, text, Toast.LENGTH_LONG).show();Android中常用的五种布局?
Android 布局是应用界面开发的重要一环,在Android中,共有五种布局方式分别是:
线性布局:LinerLayout
表格布局:TableLayout
相对布局:RelativeLayout
绝对布局:AbsoluteLayout
帧布局:FrameLayoutandroid绝对布局怎么设置组件间的距离
在绝对布局AbsoluteLayout中:
子控件的位置可以通过android:layout_x="**px"android:layout_y="**px"进行绝对控制。
这里的px表示绝对的像素,所以至于组件之间的距离可以进行非常精确的控制。
也可以使用dip做单位,这个单位是按照屏幕密度进行计算的。
在相对布局RelativeLayout中:
layout_marginBottom是指控件作为子控件和其他控件或者父控件边界的距离。
其中的Bottom可以换成Right,Left等方向。
综上,如果想用绝对布局实现组件距离,使用具体位置控制,但很多时候不见得能达到理想的效果,使用dip对不同设备显示效果不一样。
这个时候建议使用相对布局,能很方便的对位置进行控制。
如果一定要使用绝对布局,请使用布局嵌套,即一个布局包含多个布局的方式,或者使用帧布局进行布局覆盖显示,比如在一个帧布局中定义一个绝对布局和相对布局,后者覆盖前者。
目前云服务器市场竞争是相当的大的,比如我们在年中活动中看到各大服务商都找准这个噱头的活动发布各种活动,有的甚至就是平时的活动价格,只是换一个说法而已。可见这个行业确实竞争很大,当然我们也可以看到很多主机商几个月就消失,也有看到很多个人商家捣鼓几个品牌然后忽悠一圈跑路的。当然,个人建议在选择服务商的时候尽量选择老牌商家,这样性能更为稳定一些。近期可能会准备重新整理Vultr商家的一些信息和教程。以前...
3C云国内IDC/ISP资质齐全商家,与香港公司联合运营, 已超6年运营 。本次为大家带来的是双12特惠活动,香港美国日本韩国|高速精品|高防|站群|大带宽等产品齐全,欢迎咨询问价。3C云科技有限公司官方网站:http://www.3cccy.com/客服QQ:937695003网页客服:点击咨询客户QQ交流群:1042709810价目表总览升级内存 60元 8G内存升级硬盘 1T机械 90元 2...
由于行业需求和自媒体的倾向问题,对于我们个人站长建站的方向还是有一些需要改变的。传统的个人网站建站内容方向可能会因为自媒体的分流导致个人网站很多行业不再成为流量的主导。于是我们很多个人网站都在想办法进行重新更换行业,包括前几天也有和网友在考虑是不是换个其他行业做做。这不有重新注册域名重新更换。鉴于快速上手的考虑还是采用香港服务器,这不腾讯云和阿里云早已不是新账户,考虑到新注册UCLOUD账户还算比...
absolutelayout为你推荐
时间刻度Microsoft Project 时间刻度怎么更改mergefield合并邮件,最后怎么生成呢?动态图片格式常见的动态图像文件格式有哪些?代发邮件邮件代发会不会有短信代发那么好的市场效益呢?flash实例flash CS3 实例的属性面板里的实例名称是指什么手机软件开发工具如何自己开发一个app软件gas是什么意思gc是什么意思啊?ocr软件下载如何安装汉王ocr文字识别软件gbk内码怎么查GBK内码?微盟价格微盟现在怎么样?
山东虚拟主机 域名查询软件 krypt duniu plesk singlehop tier 512av ubuntu更新源 qq数据库下载 天互数据 空间出租 hkg 最好的qq空间 电信托管 空间租赁 东莞服务器托管 服务器防火墙 lamp兄弟连 ssl加速 更多