当前位置:首页 » 安卓系统 » android加载动态布局

android加载动态布局

发布时间: 2025-03-31 18:19:13

① 在android开发中,怎样动态生成多界面

效果:

layout界面布局:

[html] view plainprint?
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:ad="http://schemas.android.com/apk/res/android"
ad:layout_width="match_parent"
ad:layout_height="match_parent"
ad:orientation="vertical" >

<LinearLayout
ad:layout_width="match_parent"
ad:layout_height="30dp"
ad:background="@drawable/titlebar_bg"
ad:orientation="horizontal" >

<ImageView
ad:layout_width="wrap_content"
ad:layout_height="wrap_content"
ad:src="@drawable/back_44_44" />

<LinearLayout
ad:layout_width="match_parent"
ad:layout_height="30dp"
ad:gravity="center" >

<TextView
ad:layout_width="wrap_content"
ad:layout_height="wrap_content"
ad:text="课程列表"
ad:textSize="20sp" />
</LinearLayout>
</LinearLayout>

<ScrollView
ad:id="@+id/ScrollView"
ad:layout_width="fill_parent"
ad:layout_height="wrap_content"
ad:scrollbars="vertical" >

<LinearLayout
ad:id="@+id/mainLayout"
ad:layout_width="match_parent"
ad:layout_height="wrap_content"
ad:orientation="vertical" >
</LinearLayout>
</ScrollView>

</LinearLayout>

httputil辅助类:

[java] view plainprint?
package com.tudou.activity.work4;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import android.util.Log;

public class HttpUtil {
/**
* 获取到流,自己处理数据
* @param path
* @return
*/
public static InputStream getInputStream(String path) {
HttpURLConnection conn = null;
try {
URL url = new URL(path);
conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
// 设置是否向httpUrlConnection输出,post请求,参数要放在http正文内
conn.setDoOutput(true);
conn.setReadTimeout(3000);
conn.setConnectTimeout(3000);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
if (conn.getResponseCode() == 200) {
Log.d("mylog", "getResponseCode:" + 200);
return conn.getInputStream();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (conn != null) {
conn.disconnect();
}
}
return null;
}

/**
* 直接返回响应体正文
* @param path
* @return
*/
public static String getResponseBody(String path,String params) {
HttpURLConnection conn = null;
StringBuffer result=new StringBuffer();
try {
URL url = new URL(path);
conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
// 设置是否向httpUrlConnection输出,post请求,参数要放在http正文内
conn.setDoOutput(true);
conn.setReadTimeout(3000);
conn.setConnectTimeout(3000);
conn.setUseCaches(false);
conn.setRequestMethod("POST");

//数据输出流,该语句隐含的执行connect动作
if(params!=null){
DataOutputStream out = new DataOutputStream( conn.getOutputStream());
//将参数写入流,刷新提交关闭流
out.writeBytes(params);
out.flush();
out.close();
}

//读取连接返回的数据
BufferedReader reader = new BufferedReader(new InputStreamReader( conn.getInputStream()));
String inputLine = null;
while (((inputLine = reader.readLine()) != null)) {
result.append(inputLine);//"\n";
}
//关闭
reader.close();


if (conn.getResponseCode() == 200) {
Log.d("mylog", "getResponseCode:" + 200);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (conn != null) {
conn.disconnect();
}
}
return result.toString();
}
}

主activity:

[java] view plainprint?
package com.tudou.activity.work4;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.tudou.activity.R;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.ProgressBar;
import android.widget.TextView;

public class HomeWork4 extends Activity {
String path = "此处省略,你要请求的地址";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.homework4);
LinearLayout mainLayout = (LinearLayout)findViewById(R.id.mainLayout);
String result=HttpUtil.getResponseBody(path,null);
// Log.d("mylog", "result:" + result);

try{
JSONObject obj = new JSONObject(result);
JSONArray array=obj.getJSONArray("onlineCourses");
for (int i = 0; i < array.length(); i++) {
JSONObject course= array.getJSONObject(i);
// Log.d("mylog", "course:" + course.toString());
//添加左边的layout
LinearLayout leftlayout=new LinearLayout(this);
//注意包android.widget.LinearLayout.LayoutParams,其它包下面的LayoutParams不起作用
LayoutParams params=new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params.topMargin=10;
leftlayout.setLayoutParams(params);
leftlayout.setOrientation(LinearLayout.HORIZONTAL);
leftlayout.setGravity(Gravity.CENTER_VERTICAL);
//添加左边layout的图片
ImageView imageView=new ImageView(this);
params=new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
imageView.setLayoutParams(params);
imageView.setImageResource(R.drawable.image_default_195_130);
leftlayout.addView(imageView);

//添加右边的layout,分为上下2部分,上面是标题,下面是进度条
LinearLayout rightlayout=new LinearLayout(this);
LayoutParams rightLayoutParams=new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
rightlayout.setLayoutParams(rightLayoutParams);
rightlayout.setOrientation(LinearLayout.VERTICAL);
//添加课程标题
TextView textView=new TextView(this);
params=new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
textView.setLayoutParams(params);
textView.setText(course.get("courseName").toString());
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 15);//18SP

//学分,水平布局,分为左右,左:学分,,右:分值
LinearLayout studyLayout=new LinearLayout(this);
params=new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
studyLayout.setLayoutParams(params);
studyLayout.setOrientation(LinearLayout.HORIZONTAL);
//添加学分
TextView studyView=new TextView(this);
params=new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
studyView.setLayoutParams(params);
studyView.setText("学分:");
studyView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12);
studyView.setTextColor(Color.parseColor("#b6b6b6"));//第2种方法:setTextColor(Color.rgb(255, 255, 255));
//添加学分值
TextView studyValueView=new TextView(this);
params=new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
studyValueView.setLayoutParams(params);
studyValueView.setText(course.get("courseCredit").toString());
studyValueView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);


//进度条,水平布局,分为左中右,左:学习进度,中:进度条,右:%值
LinearLayout processLayout=new LinearLayout(this);
params=new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
processLayout.setLayoutParams(params);
processLayout.setOrientation(LinearLayout.HORIZONTAL);
//添加学习进度
TextView processtextView=new TextView(this);
params=new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
processtextView.setLayoutParams(params);
processtextView.setText("学习进度:");
processtextView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12);
processtextView.setTextColor(Color.parseColor("#b6b6b6"));
//添加进度条
ProgressBar bar=new ProgressBar(this,null,android.R.attr.progressBarStyleHorizontal);//指定进度条样式
params=new LayoutParams(150, ViewGroup.LayoutParams.WRAP_CONTENT);
bar.setLayoutParams(params);
bar.setMax(100);
bar.setProgress(10);
//添加%值
TextView processvaluetextView=new TextView(this);
params=new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
processvaluetextView.setLayoutParams(params);
processvaluetextView.setText("10%");
processvaluetextView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12);
processvaluetextView.setTextColor(Color.parseColor("#b6b6b6"));

//添加标题
rightlayout.addView(textView);
//添加学分
studyLayout.addView(studyView);
studyLayout.addView(studyValueView);
rightlayout.addView(studyLayout);
//添加进度条
processLayout.addView(processtextView);
processLayout.addView(bar);
processLayout.addView(processvaluetextView);
rightlayout.addView(processLayout);
//添加左右边
leftlayout.addView(rightlayout);
mainLayout.addView(leftlayout);
}
}catch(JSONException e){
e.printStackTrace();

② android 如何动态布局自定义view,不用XML.

可以直接new View来得到View对象来实现代码布局。以下为示例代码:
1.绝对布局
AbsoluteLayout abslayout=new AbsoluteLayout (this);
setContentView(abslayout);
Button btn1 = new Button(this);
btn1.setText(”this is a button”);
btn1.setId(1);
AbsoluteLayout.LayoutParams lp1 =
new AbsoluteLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT,
0,100);
abslayout.addView(btn1, lp1);

2.相对布局
RelativeLayout relativeLayout = new RelativeLayout(this);
setContentView(relativeLayout);
AbsoluteLayout abslayout=new AbsoluteLayout (this);
RelativeLayout.LayoutParams lp1 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
lp1.addRule(RelativeLayout.ALIGN_PARENT_TOP);
lp1.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
relativeLayout.addView(abslayout ,lp1);

3.线性布局
LinearLayout ll = new LinearLayout(this);
EditText et = new EditText();
ll.addView(et);
//动态添加布局的方法1. LinearLayout ll = (LinearLayout)this.getLayoutInflater().inflate(R.layout.main1,null); setContentView(ll); LinearLayout ll2 = (LinearLayout)this.getLayoutInflater().inflate(R.layout.main2,ll); //这样 main2 作为 main1的子布局 加到了 main1的 根节点下
//动态添加布局的方法2 addView. LinearLayout ll = (LinearLayout)this.getLayoutInflater().inflate(R.layout.main1,null); setContentView(ll); LinearLayout ll2 = (LinearLayout)this.getLayoutInflater().inflate(R.layout.main2,null); ll.addView(ll2);

③ android 使用Activity类布局时怎样让图片居中

1、通过xml布局显示,在加载图片的View加入以下属性让整个View居中

a、线性布局(LinearLayout)

android:layout_gravity="center"

b、相对布局(RelativeLayout)

android:layout_centerInParent="true"

2、通过java代码动态实现

a、线性布局(LinearLayout)

LinearLayout.LayoutParamsparams=newLinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);
params.gravity=Gravity.CENTER;
view.setLayoutParams(params);

b、相对布局(RelativeLayout)

RelativeLayout.LayoutParamsparams=newRelativeLayout().LayoutParams(
LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.CENTER_IN_PARENT,RelativeLayout.TRUE);
view.setLayoutParams(params);

④ android中怎么动态的加载一个布局

由于前段时间项目需要,需要在一个页面上加载根据不同的按钮加载不同的布局页面,当时想到用 tabhot 。不过美工提供的界面图完全用不上tabhot ,所以想到了动态加载的方法来解决这一需求。在这里我整理了一下,写了一个 DEMO 希望大家以后少走点弯路。

首先,我们先把界面的框架图画出来,示意图如下:

热点内容
java汉诺塔递归算法 发布:2025-04-02 06:28:40 浏览:120
可执行文件是编译链接后生成的文 发布:2025-04-02 04:36:44 浏览:168
电脑文件加密软件免费 发布:2025-04-02 03:02:51 浏览:800
php图片管理 发布:2025-04-02 03:01:11 浏览:260
然后弄编程 发布:2025-04-02 02:54:06 浏览:107
解压室俱乐部 发布:2025-04-02 02:47:04 浏览:276
安卓哪里下载文豪野犬 发布:2025-04-02 02:45:04 浏览:786
优酷安卓怎么免广告 发布:2025-04-02 02:30:07 浏览:830
安卓系统怎么把繁体字改为简体字 发布:2025-04-02 02:14:39 浏览:321
androidpos机 发布:2025-04-02 01:40:54 浏览:370