`
weicaijin8
  • 浏览: 34149 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Android--添加子视图(addView和setView)

阅读更多
我们在添加视图文件的时候有两种方式,一种是通过在xml文件定义layout,另一种方式是在java代码中动态生成布局文件。
在xml中定义的layout要想转化为view,需要使用到LayoutInflater类。
1.构造xml文件
2.LayoutInflater
提到addview,首先要了解一下LayoutInflater类。这个类最主要的功能就是实现将xml表述的layout转化为View的功能。为了便于理解,我们可以将它与findViewById()作一比较,二者都是实例化某一对象,不同的是findViewById()是找xml布局文件下的具体widget控件实例化,而LayoutInflater找res/layout/下的xml布局文件来实例化的。
(1)创建
LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);或
LayoutInflater inflater = LayoutInflater.from(Activity.this);或
LayoutInflater inflater = getLayoutInflater();
这三种方法本质是相同的。
(2)inflate()
用LayoutInflater.inflate() 将LayOut文件转化成VIew。
View view = inflater.inflate(R.layout.login, null);
3.添加视图文件
举个例子,假如定义了一个toast,则可以设置视图文件
toast.setView(view);
====
现在给出一个常用的土司烤面包的例子--让带图片和文本的面包居中显示,看代码:
其中主文件只放置了一个button,xml文件就不赘述。
package com.cn.query;

import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.androidquery.AQuery;

public class AQueryTest2 extends Activity {
AQuery aq = new AQuery(this);
private Button button;

protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.test1);
aq.id(R.id.button1).visible().clicked(this, "click");
}

public void click() {
// 动态生成布局视图--适用于简单布局
Toast toast = new Toast(AQueryTest2.this);
toast.setDuration(3000);
// 设置重心--让toast居中显示
toast.setGravity(Gravity.CENTER, 0, 0);
LinearLayout ll = new LinearLayout(AQueryTest2.this);
ImageView iv = new ImageView(AQueryTest2.this);
iv.setImageResource(R.drawable.icon1);
// 设置图片内边距,使textview显示在右侧,避免重叠
iv.setPadding(0, 0, 15, 0);
// 布局属于ViewGroup,可以调用添加视图方法
ll.addView(iv);
TextView textview = new TextView(AQueryTest2.this);
textview.setText("我是创建消息的提示框");
//
ll.addView(textview);
toast.setView(ll);
toast.show();
}

public void click2() {
// 动态生成布局视图--适用于复杂UI布局
Toast toast = new Toast(AQueryTest2.this);
toast.setDuration(3000);
// 设置重心
toast.setGravity(Gravity.CENTER, 0, 0);
// 创建inflater
LayoutInflater inflater = getLayoutInflater();
// 通过inflate方法将layout转化为view
View view = inflater.inflate(R.layout.toast, null);
// 设置视图--Toast继承自Widget,不是容器,只能调用设置视图方法
toast.setView(view);
toast.show();
}
}
clcik()方法是动态生成的布局,就不多说了。注意ll.addView(iv)这里用的是addView,因为LinearLayout继承自ViewGroup,所以是个容器,容器添加视图则用addView().
click2()方法时将layout定义在xml文件,然后通过LayoutInflater类的实例化对象 inflater调用inflate方法将layout转化为view。注意toast.setView(),Toast是widget,不是容器,只能用setView()设置视图。
click2()方法中使用的布局文件:
toast.xml
<?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:gravity="center_vertical|center_horizontal"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/imageview3"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingBottom="0px"
        android:paddingLeft="0px"
        android:paddingRight="5px"
        android:paddingTop="0px"
        android:src="@drawable/icon1" />

    <TextView
        android:id="@+id/textview3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="消息提示" />

</LinearLayout>


除此之外上面还用到的Android Aquery轻量级插件。需要导入相应的包就可。
分享到:
评论

相关推荐

    Android使用addView动态添加组件

    通过以上讲解,你应能理解如何在Android中使用 `addView()` 动态添加组件,以及如何应用到自定义列表项和 `LinearLayout` 中。实际开发中,这些技巧将极大地增强你的布局灵活性和代码可维护性。

    Android-InfiniteCards可自定义动画的Android卡片切换视图

    综上所述,Android-InfiniteCards为Android开发者提供了一个强大且灵活的卡片切换视图解决方案,通过它,开发者可以轻松地创造出富有吸引力和个性化的用户界面。无论是新手还是经验丰富的开发者,都能从中受益,提升...

    Android-Android流式布局FlowLayout实现关键字标签

    FlowLayout还可以支持动态添加和移除子视图,这对于实现动态生成标签的功能非常有用。通过调用addView()和removeView()方法,可以在运行时改变FlowLayout的内容。 7. **适配不同屏幕尺寸**: 考虑到Android设备的...

    VS2015--对话框内添加视图类(CView)代码

    本教程将详细讲解如何在对话框中添加视图类,以实现绘图功能。 首先,我们需要创建一个基于MFC(Microsoft Foundation Classes)的应用程序项目。在VS2015中,选择“文件”-&gt;“新建”-&gt;“项目”,然后在模板中找到...

    Android-Form-Master这个库用于轻松地以编程方式添加包含大量元素的表单

    `Android-Form-Master`库的核心功能在于其简洁的API,通过这个库,开发者可以轻松地定义表单的布局、元素和验证规则,从而节省时间和提高代码可读性。下面我们将详细探讨该库的主要特点和使用方法。 ### 1. **表单...

    android--Gallery 的基本使用

    使用`addView()`方法向`Gallery`中添加子视图,每个子视图可以是任何可绘制的对象,如`ImageView`。 接下来,我们讨论`ImageSwitcher`组件。`ImageSwitcher`是`ViewSwitcher`的子类,专为展示图片切换设计,常与`...

    Android-在任何AndroidView上添加红点

    "Android-在任何AndroidView上添加红点"这个主题,旨在教你如何灵活地在Android应用的任意View上添加这种常见的提示元素。 首先,我们需要了解如何创建一个基础的红点视图。红点通常是一个小圆形的红色背景,里面...

    Android-流式布局,可配置是否将每一行的空白区域平均分配给子控件

    在代码中,你还可以通过Java代码来设置这些属性和添加子视图: ```java BGAFlowLayout flowLayout = findViewById(R.id.flow_layout); flowLayout.setIsAverageGap(true); for (View childView : childViews) { ...

    Android中Recyclerview使用5----添加头部:RecyclerViewHeader

    在Android应用开发中,RecyclerView是一个极其重要的组件,用于展示可滚动的数据列表。它取代了旧有的ListView,提供了更高效的...希望这篇文章能帮助你在Android开发中更好地理解和运用RecyclerView添加头部的功能。

    Android-Multi-ColorPicker这是最标准和最强大的多色选择器库

    要将Android-Multi-ColorPicker集成到你的项目中,首先需要在你的`build.gradle`文件中添加依赖。如果库位于本地,可以添加如下代码: ```groovy dependencies { implementation fileTree(dir: 'libs', include: ...

    Android-一个类似思维导图软件的ViewGroup

    4. **动态添加/删除子视图**:根据用户交互,可能需要在运行时动态添加或删除节点,这就需要对addView()和removeView()方法进行操作。 5. **保存与加载**:为了保存用户的思维导图,我们需要序列化布局信息,可能...

    Android代码-点按钮添加TableRow源码.zip

    7. **运行时权限检查**:如果应用的目标API级别较高,可能需要在运行时请求写入布局的权限,尽管在这种情况下,权限通常不是必须的,因为只是在内存中创建和添加视图。 这个压缩包提供的源码应该包括了一个简单的...

    Android-Android悬浮球-一个服务开启悬浮球任何界面都可以使用

    在Android开发中,"Android-Android悬浮球-一个服务开启悬浮球任何界面都可以使用"的标题揭示了我们将在讨论如何创建一个悬浮窗(Floating View)服务,使得悬浮按钮可以在应用程序的任何界面上显示并交互。...

    Android高级应用源码-android动态添加表格行.zip

    总的来说,这个源码示例可以帮助开发者深入理解Android中的表布局和动态添加视图的概念,对于开发复杂、数据驱动的用户界面非常有帮助。通过阅读和分析源码,我们可以学习到如何灵活地处理用户界面的变化,提升...

    安卓开发-android动态添加表格行.zip

    // 创建并添加视图组件,例如TextView TextView textView = new TextView(context); textView.setText("新行数据"); newRow.addView(textView); // 将TableRow添加到TableLayout tableLayout.addView(newRow); ``` ...

    Android-MarqueeView可垂直跑可水平跑的跑马灯

    // 或者添加视图 View view1 = getLayoutInflater().inflate(R.layout.view1, null); marqueeView.addView(view1); ``` MarqueeView可能还支持其他高级特性,如自定义滚动动画、暂停/恢复滚动、滚动监听事件等。...

    horizaotalScrollview动态添加子view,设置点击事件

    在Android开发中,水平滚动视图(HorizontalScrollView)是一种常见的布局组件,用于展示大量横向排列的内容。本示例主要展示了如何在HorizontalScrollView中动态添加子View,并为每个子View设置点击事件,以便用户...

    Android中选择器PickerView(第三方控件)可选省市区

    为了实现省市区的联动效果,`Android-PickerView`支持多列数据绑定,并且当用户在某一列进行选择时,其他列会自动更新以显示相关的子选项。这使得在处理省市区这类有层次的数据时非常方便。 5. **性能优化**: 库...

    Android-Android自定义TitleBar

    自定义TitleBar可以让开发者根据应用的需求和设计风格来创建独特且功能丰富的头部视图,提高用户体验。本文将深入探讨如何在Android中实现自定义TitleBar,并结合提供的文件"lushan123456-TitleBarView-3f3a8ec"进行...

Global site tag (gtag.js) - Google Analytics