LayoutParams布局

2024-04-20 14:08
文章标签 布局 layoutparams

本文主要是介绍LayoutParams布局,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

AbsoluteLayout.LayoutParams可以重新设置坐标,然后调用setLayoutParams
LinearLayout.LayoutParams可以调用setMargins();来移动控件位置
比如在调用rootLayout.addView(view2);后面再加上
        LinearLayout.LayoutParams param3 = new LinearLayout.LayoutParams(50, 50);
        param3.setMargins(-200, 300, 0, 0);
        view2.setLayoutParams(param3);

 

///

view = new FrameLayout(activity);
  view.setOnTouchListener(otListener);
  
  // keyboard
  LinearLayout keyboard = new LinearLayout(activity);
  keyboard.setBackgroundResource(R.drawable.skb_back);
  keyboard.setOrientation(LinearLayout.VERTICAL);
  keyboard.setPadding(0, 4, 0, 6);
  FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(
    LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
  lp.gravity = Gravity.BOTTOM;
  keyboard.setLayoutParams(lp);
  view.addView(keyboard);
  
  tvKeys = new TextView[4][];
  tvKeys[0] = new TextView[10];
  tvKeys[1] = new TextView[9];
  tvKeys[2] = new TextView[9];
  tvKeys[3] = new TextView[5];
  LinearLayout.LayoutParams lineLp = new LinearLayout.LayoutParams(
    LayoutParams.FILL_PARENT, keyHeight);
  lineLp.setMargins(0, 9, 0, 8);
  for (int i = 0; i < tvKeys.length; i++) {
   LinearLayout llLine = new LinearLayout(activity);
   llLine.setLayoutParams(lineLp);
   for (int j = 0; j < tvKeys[i].length; j++) {
    LinearLayout.LayoutParams keyLp = new LinearLayout.LayoutParams(
      keyWidth, LayoutParams.FILL_PARENT);
    keyLp.setMargins(4, 0, 4, 0);
    tvKeys[i][j] = new TextView(activity);
    tvKeys[i][j].setBackgroundResource(R.drawable.skey_normal_back);
    tvKeys[i][j].setGravity(Gravity.CENTER);
    tvKeys[i][j].setText(keys[state][i][j]);
    tvKeys[i][j].setTextColor(0xffffffff);
    tvKeys[i][j].setTextSize(20);
    tvKeys[i][j].setLayoutParams(keyLp);
    llLine.addView(tvKeys[i][j]);
   }
   keyboard.addView(llLine);
  }

 

 

 

Android笔记之一:adapter

    

先从ListAdapter说起吧。什么是ListAdapter?

ListAdapter继承于Adapter,它是ListView和其里边数据的适配器。也就是要让一个ListView现实出来。为此需要3个东西。

 

 

ListView(需要被显示的列表)

Data,和ListView绑定的数据,一般是一个Cursor或者一个字符串数组。

ListAdapter,是data和ListView的桥梁,其一个适配作用。

 

Adapter 的数据源有三种

 

ArrayAdapter

ListAdapter

SimpleCursorAdapter

自己实现的CustomAdapter

 

-------------------------------

 

 

android adapter的体系文章分类:Java编程

在android开发中列表的使用是十分常见的。google对列表的封装使列表既有显示传统文本列表的能力,也有加入了诸如选择项、复选项等处理事件的能力。这里写一些我这几天对这个问题的理解。在android的api中,LIST和adapter都被放在了android.widget包内。包内的具体结构我这里先不展示了,主要侧重列表和 adapter。adapter的作用就是将要在列表内显示的数据和列表本身结合起来。列表本身只完成显示的作用,其实他就是继承自VIEWGROUP 类。但是他又有一个独特的函数就是setAdapter()就是完成了view和adapter的结合。adapter如同其本身含义,其实就是一个适配器,他可以对要显示的数据进行统一的封装,主要是将数据变成view提供给list。我们先来看看adapter的体系:public interface Adapter----0层(表示继承体系中的层次)public interface ExpandableListAdapter---(无所谓层次因为没有其他接口继承实现它)这是adapter的始祖,其他个性化的adapter均实现它并加入自己的接口。public interface ListAdapter----1层public interface SpinnerAdapter----1层public interface WrapperListAdapter----2层(实现ListAdapter)以上接口层面上的体系已经完了。可以看出来作为widgetview的桥梁adapter其实只分为2种:ListAdapter和 SpinnerAdapter以及ExpandableListAdapter。也就是说所有widget也就是基于list和spinne与 ExpandableList三种view形式的。由于在实际使用时,我们需要将数据加入到Adapter,而以接口形式呈现的adapter无法保存数据,于是Adapter就转型为类的模式。public abstract class BaseAdapter----2层(实现了ListAdapter和SpinnerAdapter)以抽象类的形式出现构造了类型态下的顶层抽象,包容了List和Spinnerpublic class ArrayAdapter----3层public class SimpleAdapter---3层public class CursorAdapter----3层(CursorAdapter其后还有子类这里先不探讨)基本体系有了之后,让我们看看顶层Adapter里有哪些方法(只列举常用的):abstract Object getItem_r(int position)abstract int getCount_r()abstract long getItemId_r(int position)abstract int getItemViewType_r(int position)abstract View getView_r(int position,View convertVeiw,ViewGroup parent)以上是比较重要的方法,ArrayAdapter他们也是重新实现以上方法的。在实际的开发过程中,往往我们要自己做属于自己的Adapter,以上方法都是需要重新实现的。这个在android提供的APIdemo例子中可以看到。

 

 

-----------------------------

 

 

(转)android adapter的学习

 

 

 

 

 

我在刚玩android 时候,对这个adapter很不理解,到底是什么原理呢? 适配器,哎,只知道setAdapter()把参数传进去,系统就显示出来了。今天,针对这个东西,我们做个系统详细的分析.listview加载adapter过程是这样的.1 先判断adapter 有多少数据项,根据这个数据确定有多少item.2 确定每个item里加载哪个View. 3 把View里加载要显示的数据.问提一个一个来解决. 第一个问题: 因为adapter都要关联一个list .有来存储数据.list的项数就是Item的

数目. 我们在重载BaseAdapter 时候,都要实现这个函数

public int getCount() {return weatherList.size();}哎,这个函数就是确定关联条目的.第二个问题 哪来的view 呢, 当然我们自己创建的.重载BaseAdapter时候你要实现getView()这个函数,就

是这个view.第三个问题,你自己创建的view.加载哪些数据你该知道的.呵呵.张豪就喜欢看例子,这个小伙子技术,管理都很牛,得以他为榜样. 得努力.public class CustomAdapterActivity extends ListActivity{@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);ArrayListWeather weatherList = new ArrayListWeather();Weather w = new Weather( "London", 17, Weather.OVERCAST );weatherList.add( w );w = new Weather( "Paris", 22, Weather.OVERCAST );weatherList.add( w );w = new Weather( "Athens", 29, Weather.SUNNY );weatherList.add( w );w = new Weather( "Stockholm", 12, Weather.RAIN );weatherList.add( w );WeatherAdapter weatherAdapter = new WeatherAdapter(this,weatherList );setListAdapter( weatherAdapter );}}哎,这个大家都很清楚,关键问题是weatherAdapter 哪来的呢? 自己创建的啊,如果创建呢?public class WeatherAdapter extends BaseAdapter {private Context context;private ListWeather weatherList;  这就是adapter关联的List,用来存储数据.还记的ArrayList 要往

里传参数吗? 传的也是这个类型啊.呵呵public WeatherAdapter(Context context, ListWeather weatherList ) {this.context = context;this.weatherList = weatherList;}public int getCount() {return weatherList.size();}public Object getItem(int position) {return weatherList.get(position);}public long getItemId(int position) {return position;}public View getView(int position, View convertView, ViewGroup parent) {Weather weather = weatherList.get(position);return new WeatherAdapterView(this.context, weather );}}哎,这段告诉了我们,有多少个Item, 可以通过getCount()得到了。 可是View 哪来的呢?当然是getView ()这个函数提供.这个view 的获取就多中多样了,我们可以传个LayoutID. 通过Inflater出来,也可以自己创建个,只要出来就行.

在这里,我们自己创建个View. 这个View.是个VIewGroup.class WeatherAdapterView extends LinearLayout {public static final String LOG_TAG = "WeatherAdapterView";public WeatherAdapterView(Context context,Weather weather ) {super( context );this.setOrientation(HORIZONTAL);LinearLayout.LayoutParams cityParams =new LinearLayout.LayoutParams(100, LayoutParams.WRAP_CONTENT);cityParams.setMargins(1, 1, 1, 1);TextView cityControl = new TextView( context );cityControl.setText( weather.getCity() );addView( cityControl, cityParams);LinearLayout.LayoutParams temperatureParams =new LinearLayout.LayoutParams(20, LayoutParams.WRAP_CONTENT);temperatureParams.setMargins(1, 1, 1, 1);TextView temperatureControl = new TextView(context);temperatureControl.setText( Integer.toString( weather.temperature ) );addView( temperatureControl, temperatureParams);LinearLayout.LayoutParams skyParams =new LinearLayout.LayoutParams(25, LayoutParams.WRAP_CONTENT);ImageView skyControl = new ImageView( context );Log.d( LOG_TAG, weather.getCity()+" - "+weather.sky );skyControl.setImageResource( weather.getSkyResource() );addView( skyControl, skyParams );}}有了这个就很清楚了. 呵呵,很明白吧, 一定得深入,细致的理解.

这篇关于LayoutParams布局的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/920467

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

lvgl8.3.6 控件垂直布局 label控件在image控件的下方显示

在使用 LVGL 8.3.6 创建一个垂直布局,其中 label 控件位于 image 控件下方,你可以使用 lv_obj_set_flex_flow 来设置布局为垂直,并确保 label 控件在 image 控件后添加。这里是如何步骤性地实现它的一个基本示例: 创建父容器:首先创建一个容器对象,该对象将作为布局的基础。设置容器为垂直布局:使用 lv_obj_set_flex_flow 设置容器

Apache Tiles 布局管理器

陈科肇 =========== 1.简介 一个免费的开源模板框架现代Java应用程序。  基于该复合图案它是建立以简化的用户界面的开发。 对于复杂的网站,它仍然最简单,最优雅的方式来一起工作的任何MVC技术。 Tiles允许作者定义页面片段可被组装成在运行一个完整的网页。  这些片段,或Tiles,可以用于为了降低公共页面元素的重复,简单地包括或嵌入在其它瓦片,制定了一系列可重复使用

【CSS in Depth 2 精译_023】第四章概述 + 4.1 Flexbox 布局的基本原理

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对单位的威力2.2 em 与 rem2.3 告别像素思维2.4 视口的相对单位2.5 无单位的数值与行高2.6 自定义属性2.7 本章小结 第三章 文档流与盒模型(已

ConstraintLayout布局里的一个属性app:layout_constraintDimensionRatio

ConstraintLayout 这是一个约束布局,可以尽可能的减少布局的嵌套。有一个属性特别好用,可以用来动态限制宽或者高app:layout_constraintDimensionRatio 关于app:layout_constraintDimensionRatio参数 app:layout_constraintDimensionRatio=“h,1:1” 表示高度height是动态变化

html记账本改写:数据重新布局,更好用了,没有localStorage保存版本

<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8"><title>htm记账本</title><style>table {user-select: none;/* width: 100%; */border-collapse: collapse;}table,th,td {border: 1px solid bla

Qt-常用控件(3)-多元素控件、容器类控件和布局管理器

1. 多元素控件 Qt 中提供的多元素控件有: QListWidgetQListViewQTableWidgetQTableViewQTreeWidgetQTreeView xxWidget 和 xxView 之间的区别,以 QTableWidget 和 QTableView 为例. QTableView 是基于 MVC 设计的控件.QTableView 自身不持有数据,使用 QTab

【CSS】flex布局 - 左边超过打点, 右边完整展示

场景:宽度一定的情况下右边自适应,左边被挤压。 需要的效果如下: flex 的三个参数分别对应:flex-grow、flex-shrink、flex-basis。 flex-grow:定义项目的放大比例,默认为0。即如果存在剩余空间,也不放大。flex-shrink:定义项目的缩小比例,默认为1。即如果空间不足,该项目将缩小。flex-basis:定义在分配多余空间之前,项目占据的主轴空间。

”CSS 网格“二维布局系统(补充)——WEB开发系列32

CSS 网格布局是一种二维布局系统,用于网页设计。通过使用网格,你可以将内容以行和列的形式进行排列。此外,网格布局还能够简便地实现一些复杂的布局结构。 一、什么是网格布局? CSS网格布局是一种二维布局系统,它允许我们创建复杂的网页布局,既可以处理行也可以处理列。与传统的布局方法不同,网格布局将网页分成多个可控的区域,这些区域可以任意排列、对齐和调整大小。网格布局使得创建灵活且响应

css——网格布局

名词解释 div{$}*9+tab键,快捷生成   记首字母gtc  网格布局:display: grid;        grid-template-columns: 100px 100px 100px;        grid-template-rows: 100px 100px 100px; (父元素) <!DOCTYPE html><html lang="en"