Android -- 动态添加布局
在做项目的时候,遇到了scrollView与listView结合的使用,导致了滑动的混乱,但是有一个办法可以解决掉这个问题,就是手写listView的高度,还有另外一种方法,传送门:《Android -- 在ScrollView中嵌套ListView》。
但是在项目中,我们的scrollview中嵌套这两个ListView,这就更麻烦了,为了不去用两个上述方法,我们将另外一个ListView改写为动态加载布局的方法来实现,在布局等操作上感觉还是跟listview差不多,但是没有Adapter。
子布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" > <ImageView
android:id="@+id/img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/action_settings"
android:src="@drawable/ic_launcher" /> <TextView
android:id="@+id/txt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name" /> </LinearLayout>
显示布局
<LinearLayout 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:orientation="vertical"
tools:context=".MainActivity" > <ScrollView
android:layout_width="fill_parent"
android:layout_height="wrap_content" > <LinearLayout
android:id="@+id/lay"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
</LinearLayout>
</ScrollView> <Button
android:id="@+id/btn_add"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:onClick="click_add"
android:text="@string/app_name" /> </LinearLayout>
代码实现
public class MainActivity extends Activity {
private LinearLayout lay;
private LinearLayout item;
private ImageView img;
private TextView txt;
private Button btn_add;
private int[] pic = { R.drawable.ic_launcher, R.drawable.maps,
R.drawable.appstore, R.drawable.calculator, R.drawable.camera };
private String[] str_pic = { "ic_launcher", "maps", "appstore",
"calculator", "camera" };
private String[] str = { "1", "2", "3", "4", "5" };
private int time = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lay = (LinearLayout) findViewById(R.id.lay);
btn_add = (Button) findViewById(R.id.btn_add);
btn_add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
inflateAndFind();
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
});
}
private void inflateAndFind() throws Exception {
item = (LinearLayout) View.inflate(getBaseContext(), R.layout.item,
null);
img = (ImageView) item.findViewById(R.id.img);
txt = (TextView) item.findViewById(R.id.txt);
if (time < 5) {
Class<com.yydcdut.layout.R.drawable> cls = R.drawable.class;
int value = cls.getDeclaredField(str_pic[time]).getInt(null);
// img.setImageResource(pic[time]);
img.setImageResource(value);
txt.setText(str[time]);
lay.addView(item);
} else
time = 0;
time++;
}
}
代码解析
其实运用的方法就是通过inflate方法将新添加的布局一个个添加上去,inflate在Android里面叫打气筒哈,就是将布局一个个打上去。
后面还有个Class<com.yydcdut.layout.R.drawable>,这个是通过名字去获取ID的int值,应该就是Java的反射机制吧~
我是天王盖地虎的分割线
源代码:http://pan.baidu.com/s/1dD1Qx01
layout.zip
转载请注明出处:http://www.cnblogs.com/yydcdut
Android -- 动态添加布局的更多相关文章
- Android动态添加布局
//1.利用LayoutInflater的inflate动态加载XML mLinearLayout = (LinearLayout)findViewById(R.id.LinearLayout_ID) ...
- Android动态添加和移除布局
package com.hyang.administrator.studentproject; import android.os.Bundle; import android.support.v7. ...
- Android动态添加Device Admin权限
/********************************************************************** * Android动态添加Device Admin权限 ...
- 动态添加布局、动态添加View、LinearLayout动态添加View;
LinearLayout提供了几个方法,用作动态添加View特别好用: 可以添加View.删除View.删除指定位置View.删除全部View: 看代码: public class MainActiv ...
- Android 动态添加Spinner(.java文件内实现) 实现 改变spinner 内文字属性
动态添加spinner 控件 Spinner s = new Spinner(this); String []items={"自己定义的要显示的数组"}; my_SpinnerAd ...
- Android 动态改变布局属性RelativeLayout.LayoutParams.addRule()
我们知道,在 RelativeLayout 布局中有很多特殊的属性,通常在载入布局之前,在相关的xml文件中进行静态设置即可. 但是,在有些情况下,我们需要动态设置布局的属性,在不同的条件下设置不同的 ...
- android动态添加TextView或者ImageView
动态添加 text1=new TextView(this); text1.setText("动态添加"); ((LinearLayout) this.findViewById(R. ...
- Android 动态添加线性布局(.java文件内) 实现控件按比例分割空间
这里实现 两个 编辑框同一水平上 按1:1分割空间 这里的1:1 比例可以通过 lp1.weight : 1p2.weight =m:n 实现 { LinearLayout l=new Linea ...
- Android 动态添加删除ExpandableListView的item的例子
这个例子可以学习到如下几点: 1.通过自定义Dialog(单独布局的xml文件进行弹出显示) 2.通过menu点击监听添加,删除view中的items 3.点击ExpandableListView中g ...
随机推荐
- HDU 1231.最大连续子序列-dp+位置标记
最大连续子序列 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- 通过JS实现HTML的转义与反转义
function HTMLEncode(html) { var temp = document.createElement("div"); (temp.textContent != ...
- Google的代码高亮-code-prettify
前不久发现,在wordpress中贴代码的时候,发现code标签并没有意料中的好使用,在贴代码的时候没有高亮真的是一件无法忍受的事情. 正巧,两周前听过同事Eason的一个关于Markdown的分享, ...
- Vue 2.0学习(七)方法与事件
基本用法 以监听一个按钮的点击事件为例,设计一个计数器,每次点击都加1: <div id = "app"> 点击次数:{{ counter }} <button ...
- 【BZOJ 4332】 4332: JSOI2012 分零食 (FFT+快速幂)
4332: JSOI2012 分零食 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 119 Solved: 66 Description 这里是欢乐 ...
- 【BZOJ 2144】 2144: 跳跳棋 (倍增LCA)
2144: 跳跳棋 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 642 Solved: 307 Description 跳跳棋是在一条数轴上进行的 ...
- 山东省第四届省赛 E-Mountain Subsequences
Description Coco is a beautiful ACMer girl living in a very beautiful mountain. There are many trees ...
- 【贪心】【高精度】zoj3987 Numbers
题意:给你一个数n,让你找m个非负整数,使得它们的和为n,并且按位或起来以后的值最小化.输出这个值. 从高位到低位枚举最终结果,假设当前是第i位,如果m*(2^i-1)<n的话,那么说明这一位如 ...
- 【点分治】【路径小于等于k的条数】【路径恰好等于k是否存在】
POJ1741:Tree Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 29574 Accepted: 9915 Des ...
- SCOJ 4427: Miss Zhao's Graph dp
4427: Miss Zhao's Graph 题目连接: http://acm.scu.edu.cn/soj/problem.action?id=4427 Description Mr Jiang ...