android自定义布局的使用!

继承viewGroup;

自定义控件的左边距;右边距;上边距,下边距;

java 代码;

package com.example.customview1406_04myviwegroup;

import android.content.Context;

import android.util.AttributeSet;

import android.view.View;

import android.view.ViewGroup;

/**

* 自定义的一种布局,指定每个子控件如何显示

*

* @author gsd1403

*

*/

public class MyViewGroup extends ViewGroup {

public MyViewGroup(Context context, AttributeSet attrs) {

super(context, attrs);

// TODO Auto-generated constructor stub

}

/**

* 测量控件的大小

*/

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

// TODO Auto-generated method stub

super.onMeasure(widthMeasureSpec, heightMeasureSpec);

// 测量子控件的大小

// 子控件的个数

int childCount = this.getChildCount();

for (int i = 0; i < childCount; i++) {

// 得到子控件

View view = this.getChildAt(i);

view.measure(widthMeasureSpec, heightMeasureSpec);

}

}

public void setShowView(int index) {

if (index > this.getChildCount()) {

return;

}

if (index == 0) {

View view = this.getChildAt(0);

view.setVisibility(View.VISIBLE);

this.getChildAt(1).setVisibility(View.GONE);

} else if (index == 1) {

this.getChildAt(1).setVisibility(View.VISIBLE);

this.getChildAt(0).setVisibility(View.GONE);

}

}

/**

* 指定子控件如何显示 类似于onDraw

*/

@Override

protected void onLayout(boolean changed, int l, int t, int r, int b) {

// 得到第一个控件 text.xml

// View view1=this.getChildAt(0);

// view1.layout(0, 0, view1.getMeasuredWidth(),

// view1.getMeasuredHeight());

//

// View view2=this.getChildAt(1);

// view2.layout(60, 200, view2.getMeasuredWidth(),

// view2.getMeasuredHeight());

int childCount = this.getChildCount();

int left = 0;

for (int i = 0; i < childCount; i++) {

View view = this.getChildAt(i);

if (view.getVisibility() != View.GONE) {

view.layout(left, 0, left + view.getMeasuredWidth(),

view.getMeasuredHeight());

left = left + view.getMeasuredWidth();

}

}

}

}

MainActivity 代码;

package com.example.customview1406_04myviwegroup;

import android.os.Bundle;

import android.app.Activity;

import android.view.Menu;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

public class MainActivity extends Activity {

MyViewGroup myViewGroup;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

myViewGroup=(MyViewGroup) findViewById(R.id.myViewGroup);

Button btnAudio=(Button) findViewById(R.id.button_audio);

btnAudio.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

myViewGroup.setShowView(1);

}

});

Button btnText=(Button) findViewById(R.id.button_text);

btnText.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

myViewGroup.setShowView(0);

}

});

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

return true;

}

}

布局文件;代码;

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:paddingBottom="@dimen/activity_vertical_margin"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

tools:context=".MainActivity" >

<com.example.customview1406_04myviwegroup.MyViewGroup

android:id="@+id/myViewGroup"

android:layout_width="match_parent"

android:layout_height="match_parent"

>

<include  layout="@layout/text"/>

<include layout="@layout/audio"/>

</com.example.customview1406_04myviwegroup.MyViewGroup>

</RelativeLayout>

点击audio按钮之后的效果如下图;

时间: 2024-10-12 19:32:59

android自定义布局的使用!的相关文章

Android自定义布局

1.首先新建属性文件 <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="topbar"> <attr name="title" format="string"/> <attr name="titleTextSize" format=&

Android自定义布局的三种实现方式

在毕设项目中多处用到自定义布局,一直打算总结一下自定义布局的实现方式,今天就来总结一下吧.在此之前学习了郭霖大神博客上面关于自定义View的几篇博文,感觉受益良多,本文中就参考了其中的一些内容. 总结来说,自定义布局的实现有三种方式,分别是:组合控件.自绘控件和继承控件.下面将分别对这三种方式进行介绍. (一)组合控件 组合控件,顾名思义就是将一些小的控件组合起来形成一个新的控件,这些小的控件多是系统自带的控件.比如很多应用中普遍使用的标题栏控件,其实用的就是组合控件,那么下面将通过实现一个简单

Android 自定义布局 性能问题 初探

大家在写android 代码的时候,基本上都使用过如下几种布局 RelativeLayout,LinearLayout, FrameLayout 但是很多时候 这几种布局 也无法满足我们的使用.于是我们会考虑用自定义布局,使用自定义布局会有几个优点 比如可以减少view的使用啊,让ui显示的更加有效率啊,以及实现一些原生控件无法实现的效果. 我们首先去github上 下载一个开源项目 https://github.com/lucasr/android-layout-samples 注意这个项目是

android自定义布局中的平滑移动

在android应用程序的开发过程中,相信我们很多人都想把应用的交互做的比较绚丽,比如让界面切换平滑的滚动,还有热度灰常高的伪3D等界面效果,通常情况下,系统提供的应用在特效这方面只能为我们提供简单的动画接口,所以要想实现比较酷炫的效果还是要自己去开发布局控件(即所谓的自定义View.ViewGroup).小弟也经常做一些自定义的控件,最近工作比较清闲,所以便将自己对自定义布局控件的一些心得写出来,权当是自己的学习笔记了,各位高手看到了可以忽略 .下面就我最近工作中遇到的一个自定义控件开发做一些

深入解析Android的自定义布局

原文链接:http://greenrobot.me/devpost/android-custom-layout/ 写在前面的话: 这篇文章是前Firefox Android工程师(现在跳槽去Facebook了)Lucas Rocha所写,文中对Android中常用的四种自定义布局方案进行了很好地分析,并结合这四种Android自定义布局方案所写的示例项目讲解了它们各自的优劣以及四种方案之间的比较.看完这篇文章,也让我对Android 自定义布局有了进一步的了解,于是趁着兴头,我把它翻译成中文,原

深入解析_Android的自定义布局

前言: 这篇文章是前Firefox Android工程师(现在跳槽去Facebook了) Lucas Rocha所写,文中对Android中常用的四种自定义布局方案进行了很好地分析,并结合这四种Android自定义布局方案所写的示例项目讲解了它们各自的优劣以及四种方案之间的比较.看完这篇文章,也让我对Android 自定义布局有了进一步的了解,于是趁着兴头,我把它翻译成中文,原文链接在此. 只要你写过Android程序,你肯定使用过Android平台内建的几个布局——RelativeLayout

Android开发学习之路--UI之自定义布局和控件

新的一年已经开始了,今天已经是初二了,两天没有学习了,还是要来继续学习下.一般手机的title都是actionbar,就像iphone一样可以后退,可以编辑.这里自定义布局就来实现下这个功能,首先准备下三张图片,一张用来当作背景,两张分别表示后退和编辑.新建工程UICostomViewsTest,然后自动创建工程后,新建title.xml,编写代码如下: <?xml version="1.0" encoding="utf-8"?> <LinearL

Android:创建可穿戴应用 - 自定义布局

创建自定义布局(Creating Custom Layouts) 本文将介绍如何创建自定义通知以及使用可穿戴UI库来创建自定义布局你同时还需要了解可穿戴设计准则(Wear Design Principles)除了屏幕尺寸和瞬读能力(Glance ability)外,为可穿戴应用创建布局大体和普通手机一样. 创建自定义通知(Custom Notifications) 通常,你应该在手机应用上创建通知然后自动同步到可穿戴应用.这让你只需要构建通知一次,就可以呈现于多种设备(不只是可穿戴,最终还包括汽

Android自定义动态布局 — 多图片上传

Android自定义动态布局 - 多图片上传 本文介绍Android中动态布局添加图片,多图片上传. 项目中效果图:    技术点: 1.动态添加格局中的线条和添加图片的+号 2.多张图片异步上传 首先来看一下布局文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layo