参考《疯狂android讲义》第2版2.1节

设置android的图形界面有三种方法:

1、使用纯xml文件

2、使用纯java,代码臃肿复杂,不建议使用

3、使用xml与java混合,前者用于固定基本不变的view,后者用于经常变化的view。

示例:使用xml+java,前者指定layout,后者指定一个imageView

MainAcitivity.java

package com.ljh.mixviewdemo;

import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.LinearLayout; public class MainActivity extends Activity { //若这两个变量放到方法里面,则要求是final的。
int currentImage = 0;
int[] images = new int[]{R.drawable.ajax, R.drawable.classic, R.drawable.ee, R.drawable.java, R.drawable.xml}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //根据 id得到layout,注意要为layout添加一个id,而不是使用R.layout.activity_main作为 id来查找。
LinearLayout layout = (LinearLayout) this.findViewById(R.id.root); //定义一个ImageView,并将之添加至layout中。
final ImageView iv = new ImageView(this);
layout.addView(iv); //指定所要显示的图片
iv.setImageResource(images[0]); //setOnClickListener是View的方法,亦即所有的view都可点击的。
iv.setOnClickListener(new OnClickListener(){
public void onClick(View v){
iv.setImageResource(images[++currentImage%images.length]);
}
});
}
}

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity"
android:orientation="vertical" > </LinearLayout>

见归档代码MixViewDemo.zip

事实上,ImageView也不是经常变的,变的只是里面的内容,因此可以在xml中指定这个ImageView的属性,而在java中指定它所要显示的内容。代码修改如下:

MainActivity.java

package com.ljh.mixviewdemo;

import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.LinearLayout; public class MainActivity extends Activity { //若这两个变量放到方法里面,则要求是final的。
int currentImage = 0;
int[] images = new int[]{R.drawable.ajax, R.drawable.classic, R.drawable.ee, R.drawable.java, R.drawable.xml}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //根据 id得到layout,注意要为layout添加一个id,而不是使用R.layout.activity_main作为 id来查找。
LinearLayout layout = (LinearLayout) this.findViewById(R.id.root); /* 定义一个ImageView,并将之添加至layout中。
final ImageView iv = new ImageView(this);
layout.addView(iv);*/
//不再需要新建一个ImageView,而是获取xml中的IamgeView
final ImageView iv = (ImageView) this.findViewById(R.id.iv_books); //指定所要显示的图片
iv.setImageResource(images[0]); //setOnClickListener是View的方法,亦即所有的view都可点击的。
iv.setOnClickListener(new OnClickListener(){
public void onClick(View v){
iv.setImageResource(images[++currentImage%images.length]);
}
});
}
}

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity"
android:orientation="vertical" > <ImageView
android:id="@+id/iv_books"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/my_published_book"
/> </LinearLayout>

使用xml及java代码混合的方式来设置图形界面的更多相关文章

  1. AndroidStudio中使用XML和Java代码混合控制UI界面实现QQ相册照片列表页面

    场景 效果 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 新建Androi ...

  2. 使用xml和java代码混合控制UI界面

    main.xml.................... <?xml version="1.0" encoding="utf-8"?> <Li ...

  3. xml与java代码相互装换的工具类

    这是一个java操作xml文件的工具类,最大的亮点在于能够通过工具类直接生成xml同样层次结构的java代码,也就是说,只要你定义好了xml的模板,就能一键生成java代码.省下了自己再使用工具类写代 ...

  4. 使用XML布局文件和Java代码混合控制UI界面

    完全使用Java代码来控制UI界面不仅烦琐.而且不利于解耦:而完全利用XML布局文件来控制UI界面虽然方便.便捷,但难免有失灵活.因此有些时候,可能需要混合使用XML布局文件和代码来控制UI界面. 当 ...

  5. 不使用spring的情况下原生java代码两种方式操作mongodb数据库

    由于更改了mongodb3.0数据库的密码,导致这几天storm组对数据进行处理的时候,一直在报mongodb数据库连接不上的异常.   主要原因实际上是和mongodb本身无关的,因为他们改的是配置 ...

  6. JSP中嵌入java代码的标签方式(转)

    (1)声明变量或方法 :  <%! 声明; %> :慎重使用,因为此方法定义的是全局变量 (2)java片段(scriptlet):  <% java代码; %> (3)表达式 ...

  7. 服务端发送xml请求java代码示例

    /** * */ package com.autoyol.pay.cmb.core; import java.io.ByteArrayOutputStream; import java.io.IOEx ...

  8. Windows和Linux执行Java代码的不同方式

    一.Windows 下编译并执行 Java 字节码文件(类文件) 1.编译 Hello.java 源码文件: java -d . Hello.java 2.执行 Hello.class 字节码文件: ...

  9. JAVA代码(GET方式)请求URL(HTTP,HTTPS)

    /** * * @param url 这个只支持http地址,不支持https * @param request * @return */ public static String sendMessa ...

随机推荐

  1. jquery uploadify插件多文件上传

    1.jquery uploadify 下载:http://www.uploadify.com/ 2.安装:解压后拷贝的工程目录下面,如:WebRoot/uploaddify 3.配置项说明: uplo ...

  2. J2EE 基础知识积累

    1. 面向对象的思维: 1. 有哪些类 那些对象      2. 这些类中,每种类应该具有某种属性和方法      3. 考虑类与类之间应该具有什么样的关系 3. 1. 成员变量可以使用java语言中 ...

  3. sublime text 发现一个超好的编辑器

    垂直竖行多行编辑 鼠标中建拖动或 shift+右键拖动 切换文件 ctrl+p 输入文件名 可以拖动项目文件夹到sublime text左栏, 也可文件--打开文件夹--项目所在文件夹,但会在新窗口中 ...

  4. wordpress安装地址与博客地址

    可千万别乱改动你的wordpress安装地址和博客地址 一月 27th, 2009 Posted in web学习, 博客建设 | 12 Comments » 我最近一个月学习数据库的一些使用,把他爱 ...

  5. C语言预处理指令的初步了解

    所谓预处理是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作.预处理是C语言的一个重要功能,它由预处理程序负责完成.当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分 ...

  6. python学习视频整理

    python3英文视频教程(全87集) http://pan.baidu.com/s/1dDnGBvV python从入门到精通视频(全60集)链接:http://pan.baidu.com/s/1e ...

  7. 自定义 cell 自适应高度

    #import "CommodityCell.h" #import "UIImageView+WebCache.h" @implementation Commo ...

  8. 关于viewWithTag的一点说明

    通常我们使用viewWithTag如下情形: 如果我们用了一个父View,上面放了多个子view, 每个子view都通过从0开始的Tag值来进行标志,以便于后期在像View上直接使用viewWithT ...

  9. C#代码计时

    using System.Diagnostics; Stopwatch sw = new Stopwatch(); sw.Start(); //todo code ....... sw.Stop(); ...

  10. 开心菜鸟学习系列学习笔记------------nodejs util公共函数

    global  在最外层定义的变量:    全局对象的属性:    隐式定义的变量(未定义直接赋值的变量).  一.process   process 是一个全局变量,即 global 对象的属性 ...