Android动态添加设置布局与控件的方法

本文实例讲述了Android动态添加设置布局与控件的方法。分享给大家供大家参考,具体如下:

有时候我们会在代码端,动态的设置,添加布局和控件。下面我们就看来看一下如何处理,直接上代码,代码里面的注解很清楚了。

布局文件:fragment_hot.xml

说明:这个部局,我用的是scrollView做为基础布局,主要是为了实现一个滚动。这里不多说,这个你可以使用任何布局都可以,这里的id我是提前定义的。

这里面的现在有的布局是我为了看到我在代码端,动态添加的代码,是否可以追加到现有布局的后面而加上,这里大家可以自己设置

<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@id/id_stickynavlayout_innerscrollview" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:id="@+id/line_fragment_hot_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="fill_parent" android:layout_height="80dp" android:orientation="horizontal"> <LinearLayout android:layout_width="0dp" android:layout_height="70dp" android:layout_weight="1"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/desktop_device"/> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="70dp" android:layout_weight="1" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="燕郊孔雀城"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="燕郊 燕郊"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="3万抵6万"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="6000元/m"/> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="70dp" android:layout_weight="1" android:gravity="right"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="剩2天" android:textColor="#F97F49" android:textSize="12dp" android:textStyle="bold" android:layout_marginTop="2dp"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/rectangle_radius_fen" android:gravity="center" android:text="团" android:textSize="9dp" android:textColor="#ffffff" android:layout_marginRight="5dp" android:layout_marginLeft="2dp"/> </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="80dp" android:orientation="horizontal"> <LinearLayout android:layout_width="0dp" android:layout_height="70dp" android:layout_weight="1"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/desktop_device"/> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="70dp" android:layout_weight="1" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="燕郊孔雀城"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="燕郊 燕郊"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="3万抵6万"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="6000元/m"/> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="70dp" android:layout_weight="1" android:gravity="right"> <TextView android:layout_width="wrap_content" android:layout_height="20dp" android:text="剩2天"/> <TextView android:layout_width="10dp" android:layout_height="10dp" android:background="@drawable/rectangle_radius_fen" android:gravity="center" android:text="团" android:textSize="5dp" android:layout_marginRight="5dp"/> </LinearLayout> </LinearLayout> </LinearLayout> </ScrollView>

一个背景图文件在drawable文件夹中

rectangle_radius_fen.xml

说明:很简单,就是设置一个有圆角的方形

<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <!-- 定义填充渐变颜色 --> <solid android:color="#F97F49"/> <!-- 设置内填充 --> <padding android:left="1dp" android:top="1dp" android:right="1dp" android:bottom="1dp"/> <!-- 设置圆角矩形 --> <corners android:radius="2dp"/> </shape>

后台代码:

fragment_hot.java

说明:这里不多说了,里面的注解很明确了

package com.example.cg.fangduo; import android.content.Context; import android.graphics.Color; import android.os.Bundle; import android.support.v4.app.Fragment; import android.util.TypedValue; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ScrollView; import android.widget.TextView; /** * A simple {@link Fragment} subclass. */ public class fragment_hot extends Fragment { //定义当前页面 private View view; private LinearLayout line_fragment_hot_main; private ScrollView id_stickynavlayout_innerscrollview; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view = inflater.inflate(R.layout.fragment_hot, container, false); id_stickynavlayout_innerscrollview = (ScrollView)view.findViewById(R.id.id_stickynavlayout_innerscrollview); line_fragment_hot_main = (LinearLayout)view.findViewById(R.id.line_fragment_hot_main); for(int i=0;i<10;i++) { /** * 设置每个item最外层的LinearLayout */ LinearLayout itemMain = new LinearLayout(getActivity()); itemMain.setOrientation(LinearLayout.HORIZONTAL); //设置linearLayout是横向还是竖各 LinearLayout.LayoutParams itemMainparams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, dip2px(getActivity(), 80)); //设置宽与高 itemMainparams.setMargins(0,dip2px(getActivity(),1),0,0); //设置每个item与上一个控件的间隔是1dip itemMain.setLayoutParams(itemMainparams); itemMain.setBackgroundColor(Color.WHITE); //设置背景色 itemMain.setVerticalGravity(Gravity.CENTER); //设置对齐方式 /** * 设置左侧图片LinearLayout */ LinearLayout itempic = new LinearLayout(getActivity()); itempic.setOrientation(LinearLayout.HORIZONTAL); LinearLayout.LayoutParams itempicparams = new LinearLayout.LayoutParams(0, dip2px(getActivity(), 70), 1); itempic.setLayoutParams(itempicparams); itempic.setVerticalGravity(Gravity.CENTER_VERTICAL); /** * 设置图片 */ ImageView imgPic = new ImageView(getActivity()); imgPic.setImageResource(R.drawable.desktop_device); LinearLayout.LayoutParams imgPicparams = new LinearLayout.LayoutParams(dip2px(getActivity(), ViewGroup.LayoutParams.WRAP_CONTENT), dip2px(getActivity(), ViewGroup.LayoutParams.WRAP_CONTENT)); imgPicparams.leftMargin = dip2px(getActivity(), 5); imgPicparams.gravity = Gravity.LEFT; //必须要加上这句,setMargins才会起作用,而且此句还必须在setMargins下面 imgPic.setLayoutParams(imgPicparams); /** * 图片LinearLayout加载图片 */ itempic.addView(imgPic, imgPicparams); /** * 向主LinearLayout加载图片LinearLayout */ itemMain.addView(itempic); /** * 设置中间文字显示LinearLayout */ LinearLayout itemtext = new LinearLayout(getActivity()); itemtext.setOrientation(LinearLayout.VERTICAL); LinearLayout.LayoutParams itemtextparams = new LinearLayout.LayoutParams(0, dip2px(getActivity(), 70), 1); itemtext.setLayoutParams(itemtextparams); itemtext.setVerticalGravity(Gravity.CENTER_VERTICAL); TextView txtOne = new TextView(getActivity()); txtOne.setText("珠江俊景小区"); txtOne.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 12); //设置字号,并且设置它的单位为dip txtOne.getPaint().setFakeBoldText(true); //字体加租 LinearLayout.LayoutParams txtOneparams = new LinearLayout.LayoutParams(dip2px(getActivity(), ViewGroup.LayoutParams.WRAP_CONTENT), dip2px(getActivity(), ViewGroup.LayoutParams.WRAP_CONTENT)); txtOneparams.weight = 1; txtOneparams.setMargins(0, 0, 0, 0); txtOneparams.gravity = Gravity.LEFT; txtOne.setLayoutParams(txtOneparams); itemtext.addView(txtOne); TextView txtTwo = new TextView(getActivity()); txtTwo.setText("哈尔滨"); txtTwo.getPaint().setFakeBoldText(true); txtTwo.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 8); LinearLayout.LayoutParams txtTwoparams = new LinearLayout.LayoutParams(dip2px(getActivity(), ViewGroup.LayoutParams.WRAP_CONTENT), dip2px(getActivity(), ViewGroup.LayoutParams.WRAP_CONTENT)); txtTwoparams.weight = 1; txtTwo.setLayoutParams(txtTwoparams); itemtext.addView(txtTwo); TextView txtThree = new TextView(getActivity()); txtThree.setText("一万抵五万"); txtThree.getPaint().setFakeBoldText(true); txtThree.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 8); txtThree.setLayoutParams(txtOneparams); itemtext.addView(txtThree); TextView txtFour = new TextView(getActivity()); txtFour.setText("8000元/m"); txtFour.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 10); txtFour.setTextColor(Color.parseColor("#F97F49")); txtFour.getPaint().setFakeBoldText(true); txtFour.setLayoutParams(txtOneparams); itemtext.addView(txtFour); itemMain.addView(itemtext); /** * 定义右侧显示信息框架 */ LinearLayout line_right_text = new LinearLayout(getActivity()); line_right_text.setOrientation(LinearLayout.HORIZONTAL); LinearLayout.LayoutParams rightparams = new LinearLayout.LayoutParams(0, dip2px(getActivity(), 70), 1); line_right_text.setLayoutParams(rightparams); line_right_text.setGravity(Gravity.RIGHT); //右对齐 TextView daytxt = new TextView(getActivity()); LinearLayout.LayoutParams daytxtparams = new LinearLayout.LayoutParams(dip2px(getActivity(), ViewGroup.LayoutParams.WRAP_CONTENT), dip2px(getActivity(), ViewGroup.LayoutParams.WRAP_CONTENT)); daytxt.setLayoutParams(daytxtparams); daytxt.setText("剩2天"); daytxt.setTextColor(Color.parseColor("#F97F49")); //设置颜色 daytxt.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 10); //设置文字大小 daytxt.getPaint().setFakeBoldText(true); //设置文字样式,加粗 //daytxt.setPadding(0,2,2,0); line_right_text.addView(daytxt); TextView tuantxt = new TextView(getActivity()); LinearLayout.LayoutParams tuantxtparams = new LinearLayout.LayoutParams(dip2px(getActivity(), 12), dip2px(getActivity(), 12)); tuantxtparams.setMargins(dip2px(getActivity(), 2), dip2px(getActivity(), 0), dip2px(getActivity(), 5), 0); tuantxt.setLayoutParams(tuantxtparams); tuantxt.setBackgroundResource(R.drawable.rectangle_radius_fen); //设置textView背景图片 tuantxt.setGravity(Gravity.CENTER); tuantxt.setText("团"); txtFour.getPaint().setFakeBoldText(true); tuantxt.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 8); tuantxt.setTextColor(Color.parseColor("#ffffff")); line_right_text.addView(tuantxt); itemMain.addView(line_right_text); line_fragment_hot_main.addView(itemMain); } return view; } /** * 设备像素(dip,dp)转屏幕像素(px) * px就是像素,如果用px,就会用实际像素画,比个如吧,用画一条长度为240px的横线,在480宽的模拟器上看就是一半的屏宽,而在320宽的模拟器上看就是2/3的屏宽了。    * 而dip,就是把屏幕的高分成480分,宽分成320分。比如你做一条160dip的横线,无论你在320还480的模拟器上,都是一半屏的长度。 * @param context * @param dipValue * @return */ public static int dip2px(Context context, float dipValue){ final float scale = context.getResources().getDisplayMetrics().density; return (int)(dipValue * scale + 0.5f); } /** * 将px值转换为sp值,保证文字大小不变 * * @param pxValue * @param pxValue * (DisplayMetrics类中属性scaledDensity) * @return */ public static int px2sp(Context context, float pxValue) { final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return (int) (pxValue / fontScale + 0.5f); } /** * 将sp值转换为px值,保证文字大小不变 * * @param spValue * @param spValue * (DisplayMetrics类中属性scaledDensity) * @return */ public static int sp2px(Context context, float spValue) { final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; return (int) (spValue * fontScale + 0.5f); } }

效果图:

希望本文所述对大家Android程序设计有所帮助。

时间: 2024-08-03 09:41:25

Android动态添加设置布局与控件的方法的相关文章

Android动态添加设置布局与控件的方法_Android

本文实例讲述了Android动态添加设置布局与控件的方法.分享给大家供大家参考,具体如下: 有时候我们会在代码端,动态的设置,添加布局和控件.下面我们就看来看一下如何处理,直接上代码,代码里面的注解很清楚了. 布局文件:fragment_hot.xml 说明:这个部局,我用的是scrollView做为基础布局,主要是为了实现一个滚动.这里不多说,这个你可以使用任何布局都可以,这里的id我是提前定义的. 这里面的现在有的布局是我为了看到我在代码端,动态添加的代码,是否可以追加到现有布局的后面而加上

VC/MFC 工具栏上动态添加组合框等控件的方法

引言 工具条作为大多数标准的Windows应用程序的一个重要组成部分,使其成为促进人机界面友好的一个重要工具.通过工具条极大方便了用户对程序的操作,但是在由Microsoft Visual C++开发环境所创建的应用程序框架中的工具条只是一个简单的按钮的集合,在功能上也仅仅是起到了菜单快捷方式的作用,而没有做到象VC.Word等软件的工具条那样,提供多种不同类型的标准控件如组合框.编辑框等.尤其是组合框在添加到工具条上后,可将原本需要在弹出对话框中完成的交互操作在工具条上就可以进行,从而在很大程

Android绑定添加了注解的控件,及其事件方法

  Android绑定添加了注解的控件,及其事件方法.根据成员方法的注解进行绑定,根据成员变量的注解进行绑定,设置事件的监听器,对控件赋值,注意:它必须在activity调用了setContentView之后调用.

Android中CheckBox复选框控件使用方法详解

CheckBox复选框控件使用方法,具体内容如下 一.简介 1. 2.类结构图 二.CheckBox复选框控件使用方法 这里是使用java代码在LinearLayout里面添加控件 1.新建LinearLayout布局 2.建立CheckBox的XML的Layout文件 3.通过View.inflate()方法创建CheckBox CheckBox checkBox=(CheckBox) View.inflate(this, R.layout.checkbox, null); 4.通过Linea

Android中ToggleButton开关状态按钮控件使用方法详解

ToggleButton开关状态按钮控件使用方法,具体内容如下 一.简介 1. 2.ToggleButton类结构 父类是CompoundButton,引包的时候注意下 二.ToggleButton开关状态按钮控件使用方法 1.新建ToggleButton控件及对象 private ToggleButton toggleButton1; toggleButton1=(ToggleButton) findViewById(R.id.toggleButton1); 2.设置setOnCheckedC

动态添加删除asp.net控件

asp.net|动态|控件 从BASIC开始接触开发的占到了绝大多数,而使用VB起家开始接触win开发也是占了绝 大多数,从vb到vb.net变化确实不小,以前用的很多的控件数组在.net里却没有了,但是费点时间就OK了,这个是我的一个程序里用到的,今天把这 个类贴上来,这个是很早以前从MSDN上看到的,根据他讲的来做的. //********************************* //动态增加,删除数组控件 //做课题设计的同学可以引用这个类 //范维肖 //***********

asp.net 动态添加多个用户控件_实用技巧

用户控件代码: 代码WebControls 复制代码 代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace xuyuanwang.myControl { public partial class Lablexuyuan : System.Web

Android 相对布局 各控件指之间的间距怎么设置

问题描述 Android 相对布局 各控件指之间的间距怎么设置 就是图片上的四个控件之间都有一些间距,本人新手刚刚开始自学Android,不太熟悉布局,求大神指教 主要布局文件如下: android:id="@+id/all_music" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/all_m

Android实现动态定值范围效果的控件_Android

先来看看效果: 一.添加依赖库的步骤 1.项目的gradle文件内的做以下改动 allprojects { repositories { ... maven { url "https://jitpack.io" } } } 2.添加最新版本的依赖库,最新版本如右所示,修改末尾的版本即可(因为我有时候更新版本了会忘记修改readme) dependencies { compile 'com.github.Brioal:BrioalSetting:1.0' ////例如上面最新版本是1.1