安卓tablelayout row中一行tableRow中的一个控件改变了高度该行其他控件高度的也随着变了,如何避免这种情况

查看:19665|回复:4
1、TableLayout简介
2、TableLayout行列数的确定
3、TableLayout可设置的属性详解
4、一个包含4个TableLayout布局的实例及效果图
一、Tablelayout简介& && & Tablelayout类以行和列的形式对控件进行管理,每一行为一个TableRow对象,或一个View控件。& && && &当为TableRow对象时,可在TableRow下添加子控件,默认情况下,每个子控件占据一列。& && && &当为View时,该View将独占一行。二、TableLayout行列数的确定& && && &
TableLayout的行数由开发人员直接指定,即有多少个TableRow对象(或View控件),就有多少行。
& && &&&TableLayout的列数等于含有最多子控件的TableRow的列数。如第一TableRow含2个子控件,第二个TableRow含3个,第三个TableRow含4个,那么该TableLayout的列数为4.
三、TableLayout可设置的属性详解TableLayout可设置的属性包括全局属性及单元格属性。
1、全局属性也即列属性,有以下3个参数:
android:stretchColumns& & 设置可伸展的列。该列可以向行方向伸展,最多可占据一整行。
android:shrinkColumns& &&&设置可收缩的列。当该列子控件的内容太多,已经挤满所在行,那么该子控件的内容将往列方向显示。
android:collapseColumns 设置要隐藏的列。
android:stretchColumns=&0&& && && &&&第0列可伸展
android:shrinkColumns=&1,2&& && && &第1,2列皆可收缩
android:collapseColumns=&*&& && && &隐藏所有行
说明:列可以同时具备stretchColumns及shrinkColumns属性,若此,那么当该列的内容N多时,将“多行”显示其内容。(这里不是真正的多行,而是系统根据需要自动调节该行的layout_height)
2、单元格属性,有以下2个参数:
android:layout_column& & 指定该单元格在第几列显示
android:layout_span& && &&&指定该单元格占据的列数(未指定时,为1)
android:layout_column=&1&& & 该控件显示在第1列
android:layout_span=&2&& && &&&该控件占据2列
说明:一个控件也可以同时具备这两个特性。
四、一个包含4个TableLayout布局的实例及效果图
&?xml version=&1.0& encoding=&utf-8&?&
&LinearLayout xmlns:android=&&
& & android:orientation=&vertical&
& & android:layout_width=&fill_parent&
& & android:layout_height=&fill_parent&
& & android:padding=&3dip&
&!-- 第1个TableLayout,用于描述表中的列属性。第0列可伸展,第1列可收缩,第2列被隐藏--&
& & &TextView
&&android:text=&表1:全局设置:列属性设置&
&&android:layout_height=&wrap_content&
&&android:layout_width=&wrap_content&
&&android:textSize=&15sp&
&&android:background=&#7f00ffff&/&
&TableLayout& &
&&android:id=&@+id/table1&
&&android:layout_width=&fill_parent&
&&android:layout_height=&wrap_content&
&&android:stretchColumns=&0&
&&android:shrinkColumns=&1&
&&android:collapseColumns=&2&
&&android:padding=&3dip&&
&&&TableRow&
& &&Button android:text=&该列可伸展&/&
& &&Button android:text=&该列可收缩&/&
& &&Button android:text=&我被隐藏了&/&
&&&/TableRow&
&&&TableRow&
& &&TextView android:text=&我向行方向伸展,我可以很长& & &/&
& &&TextView android:text=&我向列方向收缩,我可以很深&/&
&&&/TableRow&&&
&/TableLayout&
&!-- 第2个TableLayout,用于描述表中单元格的属性,包括:android:layout_column 及android:layout_span--&
&&android:text=&表2:单元格设置:指定单元格属性设置&
&&android:layout_height=&wrap_content&
&&android:layout_width=&wrap_content&
&&android:textSize=&15sp&
&&android:background=&#7f00ffff&/&
&TableLayout
&&android:id=&@+id/table2&
&&android:layout_width=&fill_parent&
&&android:layout_height=&wrap_content&
&&android:padding=&3dip&&
&&&TableRow&
& &&Button android:text=&第0列&/&
& &&Button android:text=&第1列&/&
& &&Button android:text=&第2列&/&
&&&/TableRow&
&&&TableRow&
& &&TextView android:text=&我被指定在第1列& android:layout_column=&1&/&
&&&/TableRow&
&&&TableRow&
& &&TextView
& & android:text=&我跨1到2列,不信你看!&
& & android:layout_column=&1&
& & android:layout_span=&2&
&&&/TableRow&
&/TableLayout&
&!-- 第3个TableLayout,使用可伸展特性布局--&
&&android:text=&表3:应用一,非均匀布局&
&&android:layout_height=&wrap_content&
&&android:layout_width=&wrap_content&
&&android:textSize=&15sp&
&&android:background=&#7f00ffff&/&
&TableLayout
&&android:id=&@+id/table3&
&&android:layout_width=&fill_parent&
&&android:layout_height=&wrap_content&
&&android:stretchColumns=&*&
&&android:padding=&3dip&
&&&TableRow&
& &&Button android:text=&一& &&/Button&
& &&Button android:text=&两字&&&/Button&
& &&Button android:text=&三个字& &&/Button&
&&&/TableRow&
&/TableLayout&
&!-- 第4个TableLayout,使用可伸展特性,并指定每个控件宽度一致,如1dip--&
&&android:text=&表4:应用二,均匀布局&
&&android:layout_height=&wrap_content&
&&android:layout_width=&wrap_content&
&&android:textSize=&15sp&
&&android:background=&#7f00ffff&/&
&TableLayout
&&android:id=&@+id/table4&
&&android:layout_width=&fill_parent&
&&android:layout_height=&wrap_content&
&&android:stretchColumns=&*&
&&android:padding=&3dip&
&&&TableRow&
& &&Button android:text=&一& android:layout_width=&1dip&&&/Button&
& &&Button android:text=&两字& android:layout_width=&1dip&&&/Button&
& &&Button android:text=&三个字& android:layout_width=&1dip&&&/Button&
&&&/TableRow&
&/TableLayout&
&/LinearLayout&
说明:第4个TableLayout里的均匀布局的均匀效果是有限的。其有限性体现在,当该行有N列,则每列的控件内容不能多于1/N。
效果图如下:
(20.27 KB)
:lol 第四个方式真心不错。
此人很懒,暂时没有什么介绍。
good job:)
资深技术经理
总结的很好啊。辛苦辛苦,楼主
引用:原帖由 rongwei84n 于
16:42 发表
总结的很好啊。辛苦辛苦,楼主 :D 只是拿来分享的,不是我总结的。包括上次讨论的数据传递。
此人很懒,暂时没有什么介绍。Android入门之TableLayout应用解析(一)
投稿:shichen2014
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了Android入门之TableLayout应用,需要的朋友可以参考下
本文初步讲述了Android中TableLayout的应用,对Android初学者有一定的学习借鉴价值。具体如下:
TableLayout跟TableLayout 是一组搭配使用的布局,TableLayout置底,TableRow在TableLayout的上面,而Button、TextView等控件就在TableRow之上,另外,TableLayout之上也可以单独放控件。TableLayout是一个使用复杂的布局,最简单的用法就仅仅是拖拉控件做出个界面,但实际上,会经常在代码里使用TableLayout,例如做出表格的效果。本文主要介绍TableLayout的基本使用方法。
TableLayout经常用的属性是:
android:collapseColumns:以第0行为序,隐藏指定的列:
android:collapseColumns该属性为空时,如下图:
把android:collapseColumns=0,2--------------》意思是把第0和第2列去掉,如下图:
android:shrinkColumns:以第0行为序,自动延伸指定的列填充可用部分:
当LayoutRow里面的控件还没有布满布局时,shrinkColumns不起作用,如下图:
设置了shrinkColumns=0,1,2,布局完全没有改变,因为LayoutRow里面还剩足够的空间。
当LayoutRow布满控件时,如下图:
设置设置了shrinkColumns=2,则结果如下图,控件自动向垂直方向填充空间:
android:stretchColumns:以第0行为序,尽量把指定的列填充空白部分:
设置stretchColumns=1,则结果如下图,第1列被尽量填充(Button02与TextView02同时向右填充,直到TextView03被压挤到最后边)。
Android的TableLayout + TableRow虽然使用有点复杂,但是功能很强大。Android提供了很多布局属性,但是手机程序的界面没有PC那么花俏,所以常用的就那几项而已。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具(android实战)解决 对话框中TableLayout布局,控件宽度失效问题-手机软件-电脑编程网(android实战)解决 对话框中TableLayout布局,控件宽度失效问题作者:%e5%be%90%e6%96%87%e5%85%b5 和相关&&先来一张问题效果图
界面配置源代码
&TableRow android:gravity="center"& &Button android:text="关
闭"android:id="@+id/but_gotogame" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center"&&/Button&&/TableRow&
(在对话框中,TableLayout布局下,控件button的宽度设置是无效的,但高度可以设置的)
解决的思路是:
&首先根据上面的表现,我们可以大胆的猜想:&这样的布局下,控件的长度在显示时,会自动的填充成Row一样的宽度&& 这样的结论,
&其次针对于这样的现象,可以通过填充控件的边距,来实现自己想要的控制控件宽度的效果。
下面是解决后的效果 和部分代码
界面配置代码:
&TableRow android:gravity="center"& &Button android:text="关
闭"android:id="@+id/but_gotogame" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="50px"android:layout_marginRight="50px"android:gravity="center"&&/Button&&/TableRow&&/TableLayout&
相关资料:|||||||(android实战)解决 对话框中TableLayout布局,控件宽度失效问题来源网络,如有侵权请告知,即处理!编程Tags:                &                    【第一行代码】Android中UI总结_Android开发-织梦者
当前位置:&>&&>& > 【第一行代码】Android中UI总结
【第一行代码】Android中UI总结
Android控件的可见属性:所有的Android控件都具有这个属性,可以通过android:visibility进行指定,可选值有三种,visible、invisible和gone。visible表示控件是可见的,这个值是默认值,不指定android:visibility时,控件都是可见的。invisible表示控件不可见,但是它仍然占据着原来的位置和大小,可以理解成控件变成透明状态了。gone则表示控件不仅不可见,而且不再占用任何屏幕空间。我们还可以通过代码来设置控件的可见性,使用的是setVisibility()方法,可以传入View.VISIBLE、View.INVISIBLE和View.GONE三种值。
1.TextView:显示文本
android:id=&@+id/text_view& //控件ID
android:layout_width=&match_parent&
//文字宽度。fill_parent意义相同,但推荐match_parent
android:layout_height=&wrap_content& //文字高度
android:text=&This is TextView& //文字内容
android:gravity=&center&//文字对齐方式,可选值有top、bottom、left、right、center等,可以用“|”来同时指定多个值,这里我们指定的&center&,效果等同于&center_vertical|center_horizontal&,表示文字在垂直和水平方向都居中对齐。
android:textSize=&24sp& //文字大小
android:textColor=&#00ff00& //文字颜色
2.Button:按钮,可响应点击事件
android:id=&@+id/button&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:text=&Button& /&
在java代码中:
根据ID获取控件
button = (Button) findViewById(R.id.button);
添加点击事件
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 在此处添加逻辑
或者类implements OnClickListener
button.setOnClickListener(this);
public void onClick(View v) {
switch (v.getId()) {
case R.id.button:
// 在此处添加逻辑
3.EditText:允许用户输入和编辑内容,程序处理内容
android:id=&@+id/edit_text&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:inputType=&textPassword&//输入类型为密码
android:hint=&Type something here& //提示性文本,用户输入后消失
android:maxLines=&2& //指定最大行数,超过时文本会滚动显示
java代码中:
private EditText editT
editText = (EditText) findViewById(R.id.edit_text);
String inputText = editText.getText().toString(); //获得输入的内容
4.ImageView:展示图片,图片放在res/drawable里面
&ImageView
android:id=&@+id/image_view&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:src=&@drawable/ic_launcher& //指定图片资源,也可以通过代码指定
java代码:
private ImageView imageV
imageView = (ImageView) findViewById(R.id.image_view);
imageView.setImageResource(R.drawable.jelly_bean); //指定图片资源
5.ProgressBar:显示进度条
&ProgressBar
android:id=&@+id/progress_bar&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
style=&?android:attr/progressBarStyleHorizontal& //水平进度条,不加style是默认圆形的
android:max=&100& /&
java代码中动态改变进度条进度:
int progress = progressBar.getProgress();
progress = progress + 10;
progressBar.setProgress(progress);
【Tips:Clean项目---
如果遇到错误,提示如Causedby:java.lang.ClassCastException:android.widget.ProgressBarcannotbecasttoandroid.widget.Button,代码无误的情况下选择eclipse的项目--清理,重构一下项目(重新编译)后程序正常运行。】
进度条样式:
该类型进度条也就是一个表示运转的过程,例如发送短信,连接网络等等,表示一个过程正在执行中。没有设置它的风格,那么它就是圆形的,一直会旋转的进度条。
(2)超大号圆形
style=&?android:attr/progressBarStyleLarge&
(3)小号圆形
style=&?android:attr/progressBarStyleSmall&
(4)标题型圆形
style=&?android:attr/progressBarStyleSmallTitle&
代码实现:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
//请求窗口特色风格,这里设置成不明确的进度风格
setContentView(R.layout.second);
setProgressBarIndeterminateVisibility(true);
//设置标题栏中的不明确的进度条是否可以显示
(5)长方形进度条
&progressBar android:id=&@+id/progressbar_updown&
android:layout_width=&200dp&
android:layout_height=&wrap_content&
style=&?android:attr/progressBarStyleHorizontal&
android:layout_gravity=&center_vertical&
android:max=&100&//最大进度值为100
android:progress=&50&//初始化的进度值
android:secondaryProgress=&70&//初始化底层的第二个进度值
代码应用:
private ProgressBar myProgressB
myProgressBar = (ProgressBar) findViewById(R.id.progressbar_updown);
myProgressBar.incrementProgressBy(5);
//ProgressBar进度值增加5
myProgressBar.incrementProgressBy(-5);
//ProgressBar进度值减少5
myProgressBar.incrementSecondaryProgressBy(5);
//ProgressBar背后的第二个进度条 进度值增加5
myProgressBar.incrementSecondaryProgressBy(-5);
//ProgressBar背后的第二个进度条 进度值减少5
(6)标题中的长进度条
requestWindowFeature(Window.FEATURE_PROGRESS);
//请求一个窗口进度条特性风格
setContentView(R.layout.main);
setProgressBarVisibility(true);
//设置进度条可视
setProgress(myProgressBar.getProgress() * 100);
//设置标题栏中前景的一个进度条进度值
setSecondaryProgress(myProgressBar.getSecondaryProgress() * 100);
//设置标题栏中后面的一个进度条进度值
//ProgressBar.getSecondaryProgress() 是用来获取其他进度条的进度值
6.AlertDialog:在当前的界面弹出一个对话框,能够屏蔽掉其他控件的交互能力
AlertDialog.Builder dialog = new AlertDialog.Builder (MainActivity.this);
dialog.setTitle(&This is Dialog&);
dialog.setMessage(&Something important.&);
dialog.setCancelable(false);
//确定按钮的点击事件
dialog.setPositiveButton(&OK&, new DialogInterface. OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
//取消按钮的点击事件
dialog.setNegativeButton(&Cancel&, new DialogInterface. OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.show();
7.ProgressDialog:和alertdialog类似,会在对话框中显示一个进度条,一般是用于表示当前操作比较耗时,让用户耐心地等待。
ProgressDialog mypDialog=new ProgressDialog(this);
mypDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
//设置进度条风格,风格为圆形,旋转的
mypDialog.setTitle(&Google&);
//设置ProgressDialog 标题
mypDialog.setMessage(getResources().getString(R.string.second));
//设置ProgressDialog 提示信息
mypDialog.setIcon(R.drawable.android);
//设置ProgressDialog 标题图标
mypDialog.setButton(&Google&,this);
//设置ProgressDialog 的一个Button
mypDialog.setIndeterminate(false);
//设置ProgressDialog 的进度条是否不明确
mypDialog.setCancelable(true);
//设置ProgressDialog 是否可以按退回按键取消
mypDialog.show();
//让ProgressDialog显示
ProgressDialog mypDialog=new ProgressDialog(this);//实例化
mypDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
//设置进度条风格,风格为长形,有刻度的
mypDialog.setTitle(&地狱怒兽&);
//设置ProgressDialog 标题
mypDialog.setMessage(getResources().getString(R.string.second));
//设置ProgressDialog 提示信息
mypDialog.setIcon(R.drawable.android);
//设置ProgressDialog 标题图标
mypDialog.setProgress(59);
//设置ProgressDialog 进度条进度
mypDialog.setButton(&地狱曙光&,this);
//设置ProgressDialog 的一个Button
mypDialog.setIndeterminate(false);
//设置ProgressDialog 的进度条是否不明确
mypDialog.setCancelable(true);
//设置ProgressDialog 是否可以按退回按键取消
mypDialog.show();
//让ProgressDialog显示
8.ListView
ListView允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内,同时屏幕上原有的数据则会滚动出屏幕。
例子1显示文本列表:
布局文件:
android:id=&@+id/list_view&
android:layout_width=&match_parent&
android:layout_height=&match_parent& &
&/ListView&
java代码:
private String[] data = { &Apple&, &Banana&, &Orange&, &Watermelon&,
&Pear&, &Grape&, &Pineapple&, &Strawberry&, &Cherry&, &Mango& };
onCreate()里
//定义适配器,ArrayAdapter通过泛型来指定要适配的数据类型,然后在构造函数中把要适配的数据传入即可。
ArrayAdapter&String& adapter = new ArrayAdapter&String&(
MainActivity.this, android.R.layout.simple_list_item_1, data);
//android.R.layout.simple_list_item_1作为ListView子项布局的id,这是一个Android内置的布局文件,里面只有一个TextView,可用于简单地显示一段文本。
ListView listView = (ListView) findViewById(R.id.list_view);
//设置适配器
listView.setAdapter(adapter);
例子2显示文本+图片的列表
数据实体类:
public class Fruit {
private int imageId;
public Fruit(String name, int imageId) {
this.name =
this.imageId = imageId;
public String getName() {
public int getImageId() {
return imageId;
为列表项创建一个自定义的布局文件:
&LinearLayout xmlns:android=&/apk/res/android&
android:layout_width=&match_parent&
android:layout_height=&match_parent& &
&ImageView
android:id=&@+id/fruit_image&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content& /&
android:id=&@+id/fruit_name&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:layout_gravity=&center&
android:layout_marginLeft=&10dip& /&
&/LinearLayout&
自定义适配器:
public class FruitAdapter extends ArrayAdapter&Fruit& {
private int resourceId;
public FruitAdapter(Context context, int textViewResourceId,
List&Fruit& objects) {
super(context, textViewResourceId, objects);
resourceId = textViewResourceId;
//getView在每个子项被滚动到屏幕内的时候会被调用
public View getView(int position, View convertView, ViewGroup parent) {
Fruit fruit = getItem(position); // 获取当前项的Fruit实例
ViewHolder viewH
//优化,如果convertView为空,则使用LayoutInflater去加载布局,如果不为空则直接对convertView进行重用。
if (convertView == null) {
view = LayoutInflater.from(getContext()).inflate(resourceId, null);
//利用ViewHolder来获取控件
viewHolder = new ViewHolder();
viewHolder.fruitImage = (ImageView) view.findViewById (R.id.fruit_image);
viewHolder.fruitName = (TextView) view.findViewById (R.id.fruit_name);
view.setTag(viewHolder); // 将ViewHolder存储在View中
view = convertV
viewHolder = (ViewHolder) view.getTag(); // 重新获取ViewHolder
viewHolder.fruitImage.setImageResource(fruit.getImageId());
viewHolder.fruitName.setText(fruit.getName());
class ViewHolder {
ImageView fruitI
TextView fruitN
最后java代码:
private List&Fruit& fruitList = new ArrayList&Fruit&();
onCreate():
initFruits(); // 初始化水果数据
FruitAdapter adapter = new FruitAdapter(MainActivity.this, R.layout.fruit_item, fruitList);
ListView listView = (ListView) findViewById(R.id.list_view);
listView.setAdapter(adapter);
//列表项的点击事件
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView&?& parent, View view,
int position, long id) {
Fruit fruit = fruitList.get(position);
Toast.makeText(MainActivity.this, fruit.getName(),
Toast.LENGTH_SHORT).show();
private void initFruits() {
Fruit apple = new Fruit(&Apple&, R.drawable.apple_pic);
fruitList.add(apple);
其他水果类推
1.LinearLayout线性布局
这个布局会将它所包含的控件在线性方向上依次排列。
android:orientation:
指定方向,vertical垂直,horizontal水平。如果LinearLayout的排列方向是horizontal,内部的控件就绝对不能将宽度指定为match_parent,因为这样的话单独一个控件就会将整个水平方向占满,其他的控件就没有可放置的位置了。同样的道理,如果LinearLayout的排列方向是vertical,内部的控件就不能将高度指定为match_parent。
android:layout_gravity:控件在布局中的对齐方式。当LinearLayout的排列方向是horizontal时,只有垂直方向上的对齐方式才会生效,因为此时水平方向上的长度是不固定的,每添加一个控件,水平方向上的长度都会改变,因而无法指定该方向上的对齐方式。同样的道理,当LinearLayout的排列方向是vertical时,只有水平方向上的对齐方式才会生效。
android:layout_weight:用权值分配空间,此时宽度/高度应为0。例如两个控件,weight都为1,表示1:1平分空间。
2.RelativeLayout相对布局
通过相对定位的方式让控件出现在布局的任何位置。
相对父布局:android:layout_alignParentLeft、android:layout_alignParentTop、android:layout_alignParentRight、android:layout_alignParentBottom、android:layout_centerInParent:对齐父布局的左上角、右上角、左下角、右下角,居中。
相对控件:android:layout_above、android:layout_below、android:layout_toLeftOf、android:layout_toRightOf:在某控件的上下左右,控件一定要定义在某控件的后面。android:layout_alignLeft、android:layout_alignRight、android:layout_alignTop、android:layout_alignBottom:跟某控件对齐左右上下边缘。
3.FrameLayout框架布局
所有的控件都会摆放在布局的左上角。可以用来展示图片。
4.TableLayout表格布局
使用表格的方式来排列控件。
每加入一个TableRow就表示在表格中添加了一行,然后在TableRow中每加入一个控件,就表示在该行中加入了一列,TableRow中的控件是不能指定宽度的。android:layout_span=&2&:可以让某控件占两列的宽度。
android:stretchColumns:允许将TableLayout中的某一列进行拉伸,以达到自动适应屏幕宽度的作用,android:stretchColumns=&0&指拉伸第一列。
5.AbsoluteLayout绝对布局
所有控件的位置都是指定的,适应性比较差,不推荐使用。
android:layout_x,android:layout_y指定坐标。
单位和尺寸
在布局文件中指定宽高的固定大小有以下常用单位可供选择:px、pt、dp和sp。
px是像素的意思,即屏幕中可以显示的最小元素单元。
pt是磅数的意思,1磅等于1/72英寸,一般pt都会作为字体的单位来使用。
Android中的密度就是屏幕每英寸所包含的像素数,通常以dpi为单位。
代码了解当前密度值:
floatxdpi=getResources().getDisplayMetrics().
floatydpi=getResources().getDisplayMetrics().
dp是密度无关像素的意思,也被称作dip,和px相比,它在不同密度的屏幕中的显示比例将保持一致。
sp是可伸缩像素的意思,它采用了和dp同样的设计理念,解决了文字大小的适配问题。
根据Android的规定,在160dpi的屏幕上,1dp等于1px,而在320dpi的屏幕上,1dp就等于2px。因此,使用dp来指定控件的宽和高,就可以保证控件在不同密度的屏幕中的显示比例保持一致。
自定义控件
继承结构图
&include layout=&@layout/title& /&
2.自定义控件
写一个专门的类
public class TitleLayout extends LinearLayout {
public TitleLayout(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater.from(context).inflate(R.layout.title, this);
Button titleBack = (Button) findViewById(R.id.title_back);
titleBack.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
((Activity) getContext()).finish();
重写了LinearLayout中的带有两个参数的构造函数,在布局中引入TitleLayout控件就会调用这个构造函数。然后在构造函数中需要对标题栏布局进行动态加载,这就要借助LayoutInflater来实现了。通过LayoutInflater的from()方法可以构建出一个LayoutInflater对象,然后调用inflate()方法就可以动态加载一个布局文件,inflate()方法接收两个参数,第一个参数是要加载的布局文件的id,传入R.layout.title,第二个参数是给加载好的布局再添加一个父布局,指定为TitleLayout直接传入this。在自定义的布局中加入按钮和按钮的点击事件。
在布局文件中指明控件的完整类名,包名不可省略:
&com.example.uicustomviews.TitleLayout
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
&&/com.example.uicustomviews.TitleLayout&
Nine-Patch
它是一种被特殊处理过的png图片,能够指定哪些区域可以被拉伸而哪些区域不可以。
在Androidsdk目录下有一个tools文件夹,在这个文件夹中找到draw9patch.bat文件。
android:divider=&#0000&
分割线,透明的
adapter.notifyDataSetChanged(); // 当有新消息时,刷新ListView中的显示
msgListView.setSelection(msgList.size()); // 将ListView定位到最后一行
实现效果:
以上就是【第一行代码】Android中UI总结的全文介绍,希望对您学习和使用android有所帮助.
这些内容可能对你也有帮助
更多可查看Android开发列表页。
猜您也会喜欢这些文章

我要回帖

更多关于 android tablelayout 的文章

 

随机推荐