android动态布局文件
1. android怎样动态生成布局文件,指定控件显示位置
控件位置发生改变时
用SharedPreferences记录控件位置
第二次进入时读取记录了的内容,动态生成布局
2. android 如何实现动态添加布局
如下代码:
LinearLayout layout = new LinearLayout(this);
TextView tx = new TextView(this);
tx.setText('我是动态添加的');
layout.addView(tx);
setContentView(layout);
这就动态添加了一个线性布局,并且在布局里面加了一个textview
3. android程序中的布局文件
不是都写在main.xml中。默认的主activity默认的布局文件时main.xml,如果布局不一样,另一个activity设置另一个布局文件,和main.xml是并列的,也在layout文件夹下,使用setContentView(R.layout.XXX)设置。图片通常都放在res/drawable文件夹中,drawable一共有三个文件夹,高,中,低三种分辨率,放在哪个文件夹下自己决定吧。
4. android 动态设置布局宽度
例如设置一个图片宽高 关键代码:
//取控件当前的布局参数
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) imageView.getLayoutParams();
//设置宽度值
params.width = dip2px(MainActivity.this, width);
//设置高度值
params.height = dip2px(MainActivity.this, height);
//使设置好的布局参数应用到控件
imageView.setLayoutParams(params);
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
高度除了可以设置成以上固定的值,也可以设置成wrap_content或match_content
ViewGroup.LayoutParams.WRAP_CONTENT
ViewGroup.LayoutParams.MATCH_PARENT
1
2
1
2
在这里插入图片描述
xml
5. android中怎么动态的加载一个布局
由于前段时间项目需要,需要在一个页面上加载根据不同的按钮加载不同的布局页面,当时想到用 tabhot 。不过美工提供的界面图完全用不上tabhot ,所以想到了动态加载的方法来解决这一需求。在这里我整理了一下,写了一个 DEMO 希望大家以后少走点弯路。
首先,我们先把界面的框架图画出来,示意图如下:
6. android在指定布局文件动态生成控件
package zcy.com;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
public class Show extends Activity {
private Button btNext;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.show1);
btNext=(Button)findViewById(R.id.next);
btNext.setOnClickListener(new Button.OnClickListener(){
public void onClick(View view){//创建一个布局管理器控件
LinearLayout linearLayout=new LinearLayout(Show.this);
setContentView(linearLayout);//设置orientation为horizontal,1表示为vertical
linearLayout.setOrientation(0);
TextView tvSecond=new TextView(Show.this);
tvSecond.setText("这是Android奉献给你的第二个页面");
Button btNext2=new Button(Show.this);
btNext2.setText("下一步");
btNext2.setId(2);
LinearLayout.LayoutParams lp1 = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
linearLayout.addView(tvSecond,lp1);
linearLayout.addView(btNext2,lp1);
btNext2.setOnClickListener(new OnClickListener(){
public void onClick(View view){ //这次只放置一个TextView不需要布局管理器
TextView tv3=new TextView(Show.this);
tv3.setText("恭喜你已来到最后一个页面!");//直接让页面显示一个TextView
setContentView(tv3);
}
});
}
});
}
}
这里涉及到几个类的构造函数和方法,我把Android SDK文档中的内容直接引用过来:
Public Constructors
LinearLayout(Context context)
LinearLayout(Context context, AttributeSet attrs)
public void setOrientation (int orientation)
Should the layout be a column or a row.
Related XML Attributes
android:orientation
Parameters orientation Pass HORIZONTAL or VERTICAL. Default value is HORIZONTAL.
ConstantValueDescription
horizontal0 Defines an horizontal widget.
vertical1 Defines a vertical widget.
This corresponds to the global attribute resource symbol orientation.
Public Constructors
LinearLayout.LayoutParams(Context c, AttributeSet attrs)
LinearLayout.LayoutParams(int width, int height)
addView方法的定义在ViewGroup类中
//Adds a child view with the specified layout parameters.
voidaddView(View child, ViewGroup.LayoutParams params)
//Adds a child view with the specified layout parameters.
void addView(View child, int index, ViewGroup.LayoutParams params)
看一下这里的继承关系:
另外注意,为什么在传递Context参数时必须用Show.this而不能直接用this呢?因为此时我们已经进入了一个匿名类new Button.OnClickListener()中,虽然这个匿名类还是在Show类,但是我们的代码已经不再“直属”于Show类了。
7. android 如何实现动态添加布局
通过使用LayoutInflater 每次点击按钮时候去读取布局文件,然后找到布局文件里面的各个VIEW 操作完VIEW
后加载进我们setContentView 方面里面的要放的布局文件里面,每次动态加载文件必需 调用
removeAllViews方法,清除之前的加载进来的 View 。是不是很简单?当然动态加载VIEW
还有许多种方法,多尝试不同写法。可能会领会不一样的心得,祝你早上掌握android 的开发技术。
主要原理:在一个分割出来的大的Layout中(如图中的白色区域),使用layout.removeAllViews();和layout.addView();实现动态加载,其中要使用的LayoutInflater等。
8. android动态更新布局文件,然后生成ui界面,能实现吗
可以。但是完全要用代码来实现,不能使用xml文件来。onCreate里面不用setContentView,直接new View,然后根据解析的xml文件,使用代码加载布局。比如xml中有一个<Button id=1>haha</name>,那么解析后就new Button,setId(1),setText("haha"),然后根据位置等信息,view.add(button)……就这样一直加进去。
9. 很简单的送分题又来了,高手还不进来android如何动态include布局文件,答得好的追加100分
inflate函数可以见xml布局文件刷成view,然后java中获得activity的view的父节点,然后通过addview就可以动态加入你要的view了
10. android怎样动态生成布局文件,指定控件显示位置
控件位置发生改变时
用sharedpreferences记录控件位置
第二次进入时读取记录了的内容,动态生成布局