第4章 UI设计基础

4.1界面布局及其加载

Android应用程序中,用户界面可以通过View和ViewGroup来指定,也可以采用Activity中书写Java代码的方式来设定布局,这里介绍的是采用XML布局文件的设计方法。常用的布局包括线性布局,表格布局,相对布局,框架布局和绝对布局。

4.1.1View类和ViewGroup类

在一个Android应用程序中,用户界面通过View和ViewGroup对象构建。View对象时Android平台上表示用户界面的基本单元,一个View占据屏幕上的一块方形区域,存储了该特定区域的布局参数和内容。创建用户界面所用的空间都继承自View类,包括TextView,Button,CheckBox

ViewGroup类是View的子类,它可以充当其他空间的容器。其功能是装在和管理一组View和其他的ViewGroup,可以嵌套ViewGroup和View对象,而它们共同组建的顶层View可以由应用程序中的Activity中使用setContentView()方法来显示。

4.1.2 布局管理

1.定义布局文件
ID属性

尺寸参数

xmlns:Android属性

2.在Activity中引用布局

import android.app.Activity;
import android.os.Bundle;
public class TextViewSimple_MainActivity extends Activity{public void onCreate(savedInstanceState);setContentView(R.layout.activity_main);((TextView)findViewById(R.id.tvHello)).setText("Hello,Activity!");//将字符串Hello,Activity!"显示在ID号位tvHello的TextView控件中
}

4.1.3 线性布局

线性布局定义在<LinearLayout</LinearLayout标签之间,它将其包含的Widget控件元素按水平,或者垂直的方向顺序排列。android:orientation=“vertical”
android:gravity="right"设置 控件的对齐方式

<?xml version="1.0" encoding="utf-8"?>
<!-- 声明一个LinearLayout 布局,并设置其属性:垂直排列 -->
<!--该线性布局在其所属的父容器中的布局方式为横向和纵向填充父容器-->
<!-- 该线性布局内部元素的布置方式为向右对齐-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"    android:layout_width="fill_parent" android:layout_height="fill_parent"   android:gravity="right"   >    <!-- 声明一个TextView控件,其ID:txtMessage,控件占据的空间为恰好包住文字,显示文本:线性布局示例-->
<TextView  android:id="@+id/txtMessage"    android:layout_width="wrap_content" android:layout_height="wrap_content"   android:text="线性布局示例 "    /><!-- 声明三个 Button 控件--><Button android:id="@+id/btnYes" android:text="是"  android:layout_width="wrap_content"  android:layout_height="wrap_content"/><Button android:id="@+id/btnNo" android:text="否"  android:layout_width="wrap_content"  android:layout_height="wrap_content"/><Button android:id="@+id/btnCancel" android:text="取消"  android:layout_width="wrap_content"  android:layout_height="wrap_content"/>
</LinearLayout> 
MainActivity.javapackage com.example.hello;import android.app.Activity;
import android.os.Bundle;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}
}

运行结果

4.1.4 表格布局

<?xml version="1.0" encoding="utf-8"?>
<!-- 声明一个 垂直排列的线性布局,里面有两个table  -->
<LinearLayout  android:id="@+id/LinearLayout01"  android:layout_width="fill_parent"  android:layout_height="fill_parent"  xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"  >
<!-- 声明第一个表格布局,ID:TableLayout01,里面有两个table  -->        <TableLayout  android:id="@+id/TableLayout01"  android:layout_width="fill_parent"  android:layout_height="wrap_content"    android:background="#dddddd" ><!--  声明第一行只有一个TextView--><TextView  android:id="@+id/TextView01"  android:layout_width="wrap_content"  android:layout_height="wrap_content" android:text="第一个Table的第一行,TextView控件独占"  android:textColor="#000000"    android:layout_marginTop="4dip" />     <!--  声明第二行,TableRow  包括两列--><TableRow  android:id="@+id/TableRow01"  android:layout_width="wrap_content"  android:layout_height="wrap_content"android:layout_marginTop="4dip" >   <TextView  android:text="短字符串"  android:layout_width="wrap_content"  android:layout_height="wrap_content" android:layout_centerInParent="true" android:textColor="#0000ff"    />    <TextView  android:text="第2行第2列"  android:layout_width="wrap_content"  android:layout_height="wrap_content" android:layout_centerInParent="true" android:textColor="#000000"  />           </TableRow>  <!--  声明了第三行, TableRow,ID为 TableRow02--> <TableRow  android:id="@+id/TableRow02"  android:layout_width="wrap_content"  android:layout_height="wrap_content" android:layout_marginTop="4dip"   >       <TextView  android:text="长。。。。。。字符串"  android:layout_width="wrap_content"  android:layout_height="wrap_content" android:textColor="#ff0000" />              <TextView  android:text="第3行第2列"  android:layout_width="wrap_content"  android:layout_height="wrap_content" android:textColor="#000000"     />       <TextView  android:text="第3行第3列"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:textColor="#000000"  />          </TableRow>    </TableLayout>
<!--  声明第二个表格布局,ID:TableLayout02,里面有6个按钮  --><TableLayout android:id="@+id/TableLayout01"  android:layout_width="fill_parent"android:layout_height="fill_parent"android:shrinkColumns="0,1,2"android:collapseColumns="2" ><!--android:shrinkColumns作用是设置表格的列是否收缩(列编号从0开始),多列用逗号隔开,此例android:shrinkColumns="0,1,2",即表格的第1、2、3列内容是收缩的以适合屏幕大小即不会挤出屏幕--><!--android:collapseColumns作用是设置表格的列是否隐藏(从0起算序数),所以第三列的按钮没有显示出来--><!-- 第一行定义为居中显示,第一行定义为居左显示 --><TableRow android:gravity="center"  ><Button android:layout_width="wrap_content"android:layout_height="wrap_content"           android:text="按钮1-1"/><Button android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="按钮1-2" /><Button android:layout_width="wrap_content"android:layout_height="wrap_content"           android:text="按钮1-3"/></TableRow><!-- 第一行设置三个按钮 --><TableRow android:gravity = "left"  ><Button android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="按钮2-1"  /><Button android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="按钮2-2"  /><Button android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="按钮2-3"  />            </TableRow></TableLayout>
</LinearLayout>

运行结果:

4.1.5 相对布局

相对布局定义在RelativeLayout /RelativeLayout之间
在相对布局中,子控件的位置是相对兄弟控件或父容器而决定的。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"    android:layout_width="fill_parent" android:layout_height="fill_parent"   >
<!-- 声明了一个TextView控件-->
<TextView  android:id="@+id/txtMessage"    android:layout_width="wrap_content" android:layout_height="wrap_content"android:text="相对布局示例"/>
<!-- 声明了三个 Button 控件-->
<!-- ID为btnYes的按钮,位于ID为txtMessage的组件下面 -->
<!--该控件位于父控件的中央位置。--><Button android:id="@+id/btnYes" android:text="是"  android:layout_width="wrap_content"  android:layout_height="wrap_content"android:layout_below="@id/txtMessage" android:layout_centerInParent="true"/>
<!-- ID为btnNo的按钮,位于ID为btnYes的组件下面,给定距左的边界 --><Button android:id="@+id/btnNo" android:text="否"  android:layout_width="wrap_content"  android:layout_height="wrap_content"android:layout_below="@id/btnYes"  android:layout_marginLeft="12dip"/>
<!-- ID为btnCancel的按钮,此按钮位于ID为btnYes的右边,和ID为btnYes的底边齐平-->   <Button android:id="@+id/btnCancel" android:text="取消"  android:layout_width="wrap_content"  android:layout_height="wrap_content"android:layout_toRightOf="@id/btnYes"android:layout_alignBottom = "@id/btnYes" />
</RelativeLayout>

运行结果:

4.1.6 绝对布局

绝对布局在“AbsoluteLayout /AbsoluteLayout”之间
绝对布局方式是指屏幕中所有的控件位置由开发人员通过设置控件的
坐标来指定。控件容器不在负责管理其子控件的位置。系统无法根据
不同屏幕大小对元素位置进行调整,降低了布局对不同类型和尺寸
屏幕的适应能力。

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"  >     <!--  声明一个绝对布局  --> <!-- 设置绝对布局中子控件坐标--><TextView  android:layout_x="20dip" android:layout_y="20dip"  android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/TextView01" android:text="绝对布局示例"  />     <TextView  android:layout_x="40dip" android:layout_y="40dip"  android:layout_height="wrap_content" android:layout_width="wrap_content"  android:id="@+id/TextView02" android:text="控件:TextView02"  />  <EditText  android:layout_x="60dip" android:layout_y="60dip" android:layout_height="90dip" android:layout_width="180dip"       android:id="@+id/EditText01"android:text="控件:EditText01"  /> <Button  android:layout_x="200dip" android:layout_y="160dip" android:layout_height="wrap_content" android:id="@+id/Button01"  android:layout_width="wrap_content" android:text="OK"  /> </AbsoluteLayout>

运行结果:

4.1.7 框架布局

框架布局定义在<FrameLayout</FrameLayout之间
FrameLayout布局在屏幕上开辟出一块区域,在这块
区域中可以添加多个子控件,但是所有的子空间都被
对齐到区域的左上角。框架布局的大小由子控件中尺寸
最大的那个子控件来决定。如果子空间一样大,同一时刻
只能看到最上面的子控件。

框架布局使多个组件以层叠的效果呈现给用户,应用程序的布局
采用框架布局时,控件元素的位置只能放置在显示空间的左上角而
无法指定到一个确切的位置。如果有多个元素,后放置的元素将遮挡先
放置的元素。

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent" ><TextViewandroid:text="较大的文字" android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="26pt"android:textColor = "#dddddd"/><TextViewandroid:text="中等的文字"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="18pt"android:textColor = "#aaaaaa"/><TextViewandroid:text="较小的文字"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="10pt"android:textColor = "#000000"/>
</FrameLayout>

运行结果:

4.2 Widget控件

4.2.1TextView和EditText

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><TextView  android:id="@+id/tv_hello"android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="TextView 示例,在XML中设置了属性"android:textColor="#ff00ff"  android:textStyle ="italic"  android:background="#cccccc"  android:textSize="20sp"android:gravity="center_horizontal"  /><TextViewandroid:id="@+id/tv_message"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="\n请在下面的文本框中输入文字:" /><EditTextandroid:id="@+id/txt_input"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="18sp"android:text="" android:hint = "单击输入文字"/><TextViewandroid:id="@+id/tv_txtout"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="\n您没有在文本框中输入文字:" />
</LinearLayout>

MainActivity.java


import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnKeyListener;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
import android.widget.Toast;public class MainActivity extends Activity {TextView TxtOut;EditText TxtIn;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TxtOut = (TextView) findViewById(R.id.tv_txtout);TxtIn = (EditText) findViewById(R.id.txt_input);TxtIn.setOnKeyListener(new OnKeyListener(){@Overridepublic boolean onKey(View arg0, int arg1, KeyEvent arg2) {String str=TxtIn.getText().toString();//在Java代码中设置TextView的属性,EditText与此类似TxtOut.setTextColor(Color.BLUE);TxtOut.setTextSize(25);              TxtOut.setText("\n您输入的是:"+str);return false;}});TxtIn.setOnEditorActionListener(new OnEditorActionListener() {  @Overridepublic boolean onEditorAction(TextView arg0, int arg1,KeyEvent arg2) {Toast.makeText(MainActivity.this, "输入文字", Toast.LENGTH_SHORT).show(); String str=TxtIn.getText().toString();TxtOut.setText(str);return false;}        });  }}

运行结果:

4.2.2 Button

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><TextView  android:id="@+id/tv_button"android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="显示两个按钮"/><Button android:id="@+id/btn_normal" android:text="普通按钮" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/btn_small" style="?android:attr/buttonStyleSmall" android:text="小小按钮" android:layout_width="wrap_content" android:layout_height="wrap_content" />
</LinearLayout>

MainActivity.java

import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button normal = (Button) findViewById(R.id.btn_normal);//找到ID号为btn_normal的按钮Button small = (Button) findViewById(R.id.btn_small);//找到ID号为btn_small的按钮}
}

运行结果:

4.2.3 CheckBox

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><TextView  android:id="@+id/favouriteLabel"  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:text="请勾选您的感兴趣的图书类别" />  <CheckBox  android:id="@+id/cbox_classical"  android:layout_width="fill_parent"  android:layout_height="wrap_content" android:checked ="true"      android:text="古典文学" />  <CheckBox  android:id="@+id/cbox_novel"  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:text="当代小说" />  <CheckBox  android:id="@+id/cbox_essays"  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:text="散文随笔" /><CheckBox  android:id="@+id/cbox_poetry "  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:text="诗歌" />
</LinearLayout>

MainActivity.java

import android.app.Activity;
import android.os.Bundle;
import android.widget.CheckBox;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);CheckBox  my_essays = (CheckBox) findViewById(R.id.cbox_essays);//使my1指向id号为cbox_essays的CheckBoxmy_essays.setChecked(true);        //设置为为选中状态}
}

运行结果:

4.2.4 RadioGroup和RadioButton

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><TextView  android:id="@+id/favourite_single"  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:text="请选择一个您感兴趣的图书类别" />  <RadioGroup  android:id="@+id/gender"  android:layout_width="fill_parent"  android:layout_height="wrap_content"android:orientation="vertical" >    <RadioButton  android:id="@+id/rbt_classical"  android:checked="true"android:text="古典文学" />  <RadioButton  android:id="@+id/rbt_novel"  android:text="当代小说" />  <RadioButton  android:id="@+id/rbt_essays"  android:text="散文随笔" /><RadioButton  android:id="@+id/rbt_poetry "  android:text="诗歌" /></RadioGroup>
</LinearLayout>

运行结果:

4.3 Android中的事件处理机制

(1)事件:表示用户咋图形界面的操作的描述,通常是封装成各种类,
例如键盘事件操作相关的类KeyEvent,触摸屏相关移动事件类为MotionEvent
(2)事件源:事件源是指发生事件的控件,例如Button、EditTxt
(3)事件处理者:接收事件并对事件进行处理的对象,事件处理者
一般是一个实现某些特定接口类的对象

4.3.1基于监听接口的事件处理

1.直接实现接口的处理方式

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;public class MainActivity extends Activity implements OnClickListener {//定义TestActivity类时实现OnClickListener接口@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button mybutton = (Button) findViewById(R.id.btn_normal);// 定义Button按钮mybutton.setOnClickListener(this);
// 为事件源对象添加Click事件的监听,将事件处理绑定到事件源}@Overridepublic void onClick(View v) {
//监听器定义的事件处理方法,只需将事件处理代码在此方法中复写即可
//参数v就是事件发生的事件源switch (v.getId()) {case R.id.btn_normal:TextView mytext = (TextView) findViewById(R.id.tv_button);mytext.setTextColor(Color.BLUE);mytext.setTextSize(20);mytext.setText("你好,【普通按钮】被单击!");break;}}
}

运行结果:

2.内部类处理方式

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;public class MainActivity extends Activity {//不需要在定义TestActivity类时实现OnClickListener接口@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button mybutton = (Button) findViewById(R.id.btn_normal);mybutton.setOnClickListener(new MyClickListener());
// 为事件源对象添加Click事件的监听,将事件处理绑定到事件源
// 参数是一个内部类MyClickListener的对象,这个类实现OnClickListener接口}
// 定义内部类MyClickListener,实现OnClickListener接口class MyClickListener implements OnClickListener {@Overridepublic void onClick(View v) {   //事件处理代码同样在此方法中复写switch (v.getId()) {case R.id.btn_normal:TextView mytext = (TextView)findViewById(R.id.tv_button);mytext.setText("你好,【普通按钮】被单击!");break;}}}
}

3.匿名内部类处理方式

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;public class MainActivity extends Activity {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button mybutton = (Button) findViewById(R.id.btn_normal);final TextView mytext = (TextView) findViewById(R.id.tv_button);mybutton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {  //参数v就是事件发生的事件源switch (v.getId()) {case R.id.btn_normal:mytext.setText("你好,【普通按钮】被单击!");break;}}});}
}

4.3.2基于回调机制的事件处理

1.onKeyDown()方法

import android.app.Activity;
import android.os.Bundle;
import android.text.format.Time;
import android.view.KeyEvent;
import android.widget.TextView;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}@Overridepublic boolean onKeyDown (int keyCode, KeyEvent event) {Time t=new Time();t.setToNow(); //得到当前时间TextView mytext = (TextView) findViewById(R.id.tv_message);mytext.setTextSize(15);   //设置文字大小mytext.setText("当前时间是: "+t.toString() + "\n键盘码: "+keyCode);return super.onKeyDown(keyCode, event);}
}

2.onTouchEvent()方法

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.widget.TextView;public class MainActivity extends Activity {TextView TxtAction,TxtPostion ;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TxtAction = (TextView) findViewById(R.id.tv_action);TxtPostion= (TextView) findViewById(R.id.tv_postion);}@Overridepublic boolean onTouchEvent(MotionEvent event){int Action=event.getAction();float x=event.getX();float y=event.getY();TxtAction.setText("触屏动作:"+Action);TxtPostion.setText("当前坐标:"+"("+x+" , "+y+")");return true;}}

4.3.3 直接绑定标签的事件处理方法

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void buttonClick(View v){//Toast.makeText(MainActivity.this,"按钮被单击!",Toast.LENGTH_SHORT).show();switch (v.getId()) {case R.id.btn_normal:TextView mytext = (TextView) findViewById(R.id.tv_button);mytext.setText("你好,【普通按钮】被单击!");break;}}}

4.3.4 EditText、CheckBox、和RadioButton的常见事件处理

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><TextView  android:id="@+id/tv_message"android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="请在下面的文本框中输入文字:"/><EditTextandroid:id="@+id/txt_input"android:layout_width="200dip"android:layout_height="wrap_content"android:textSize="18sp"android:text=""   /><TextView  android:id="@+id/favourite_single"android:layout_width="wrap_content"android:layout_height="wrap_content"  android:text="请选择您的学历:" />  <RadioGroup  android:id="@+id/ rg_education"  android:layout_width="fill_parent"  android:layout_height="wrap_content"android:orientation="horizontal" >    <RadioButton  android:id="@+id/rbt_bachelor"  android:layout_width="wrap_content"android:text="大学本科" android:checked="true"/>  <RadioButton  android:id="@+id/rbt_master" android:layout_width="wrap_content" android:text="硕士研究生" /><RadioButton  android:id="@+id/rbt_doctor"  android:layout_width="wrap_content"android:text="博士研究生" /></RadioGroup>  <TextView  android:id="@+id/favouriteLabel"  android:layout_width="fill_parent"  android:layout_height="wrap_content" android:text="请勾选您感兴趣的图书类别:" />  <CheckBox  android:id="@+id/cbox_classical"  android:layout_width="fill_parent"  android:layout_height="wrap_content" android:text="古典文学" />  <CheckBox  android:id="@+id/cbox_novel"  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:text="当代小说" />  <CheckBox  android:id="@+id/cbox_essays"  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:text="散文随笔" /><CheckBox  android:id="@+id/cbox_poetry "  android:layout_width="fill_parent"  android:layout_height="wrap_content" android:text="诗歌" /><TextView  android:id="@+id/tv_result"android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="#0000ff"android:text="\n您还没有输入任何文字,\n您的学历是:大学本科,\n您感兴趣的图书类别:无"/>
</LinearLayout>
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnKeyListener;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.TextView;
import android.view.KeyEvent;public class MainActivity extends Activity {private String myresults1="\n您还没有输入任何文字,",myresults2="\n您的学历是:大学本科,",myresults3="\n您感兴趣的图书类别:无";TextView tvResult;EditText txtInput;RadioButton rb1,rb2,rb3;RadioGroup rg;CheckBox cbox1,cbox2,cbox3,cbox4;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);  tvResult = (TextView) findViewById(R.id.tv_result);txtInput= (EditText) findViewById(R.id.txt_input);rb1 = (RadioButton) findViewById(R.id.rbt_bachelor);//通过ID找到RadioButton        rb2 = (RadioButton) findViewById(R.id.rbt_master);rb3 = (RadioButton) findViewById(R.id.rbt_doctor);rg = (RadioGroup) findViewById(R.id.rg_education);//对EditText进行监听txtInput.setOnKeyListener(new OnKeyListener(){@Overridepublic boolean onKey(View arg0, int arg1, KeyEvent arg2) {String str=txtInput.getText().toString();myresults1="\n您输入的是:"+str;tvResult.setText(myresults1+ myresults2+ myresults3);return false;}});//对RadioGroup进行监听   rg.setOnCheckedChangeListener(new OnCheckedChangeListener() {public void onCheckedChanged(RadioGroup group, int checkedId) {if(R.id. rbt_bachelor == checkedId){myresults2="\n您的学历是:" + rb1.getText().toString();} else if(R.id. rbt_master == checkedId){myresults2="\n您的学历是:" + rb2.getText().toString();}else if(R.id. rbt_doctor == checkedId){myresults2="\n您的学历是:" + rb3.getText().toString();}tvResult.setText(myresults1+ myresults2+ myresults3); }});cbox1 = (CheckBox) findViewById(R.id.cbox_classical);//通过ID找到CheckBoxcbox2 = (CheckBox) findViewById(R.id.cbox_novel);cbox3 = (CheckBox) findViewById(R.id.cbox_essays);cbox4 = (CheckBox) findViewById(R.id.cbox_poetry);cbox1.setOnCheckedChangeListener(cBoxListener); cbox2 .setOnCheckedChangeListener(cBoxListener);cbox3 .setOnCheckedChangeListener(cBoxListener);cbox4 .setOnCheckedChangeListener(cBoxListener);}private android.widget.CompoundButton.OnCheckedChangeListener cBoxListener = new android.widget.CompoundButton.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton arg0, boolean arg1) {myresults3="\n您感兴趣的图书类别:";if (cbox1.isChecked()) {myresults3 = myresults3+"  "+cbox1.getText().toString() ;}if (cbox2.isChecked()) {myresults3 = myresults3+"  "+cbox2.getText().toString() ;}if (cbox3.isChecked()) {myresults3 = myresults3+"  "+cbox3.getText().toString() ;}if (cbox4.isChecked()) {myresults3 = myresults3+"  "+cbox4.getText().toString() ;}tvResult.setText(myresults1+ myresults2+ myresults3);}};}

运行结果:

Android教程 第四章 用户界面设计基础相关推荐

  1. matlab图形绘制经典案例,MATLAB经典教程第四章_图形绘制.ppt

    <MATLAB经典教程第四章_图形绘制.ppt>由会员分享,可在线阅读,更多相关<MATLAB经典教程第四章_图形绘制.ppt(32页珍藏版)>请在人人文库网上搜索. 1.Ma ...

  2. python核心教程_python核心教程--第四章

    第四章讲的是python对象. 4.1 python对象 所有的python对象都拥有三个特性:身份,类型和值 身份: 每一个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函数id()来得 ...

  3. python编程案例教程第四章_Python编程入门-第四章 流程控制 -学习笔记

    第四章 流程控制 一.布尔逻辑 *在Python中,用True和False表示真值.一般使用4个主要的逻辑运算符来组合形成布尔值:not\and\or\==. 如: False==False #Tru ...

  4. 计算化学系列教程-第四章-一维谐振子

    第四章-一维谐振子 本次有3节课程,分别为: 4.1 一维谐振子 https://v.qq.com/x/page/a0902106f9h.html?ptag=qqbrowser 4.2 原子的振动 h ...

  5. Python程序设计与算法基础教程第四章上机题

    第四章来了 1.杨辉三角,很简单 print("1".center(20)) print("1 1".center(20)) print("1 2 1 ...

  6. Android Camera2 教程 · 第四章 · 拍照

    上一章<Camera2 预览>我们学习了如何配置预览,接下来我们来学习如何拍照. 阅读完本章,你将会学到以下几个知识点: 理解 Capture 工作流程 如何拍摄单张照片 如何连续拍摄多张 ...

  7. PHP-----PHP程序设计基础教程----第四章数组

    4.1 初识数组 4.1.1 什么是数组 数组是一个可以存储一组或者一系列数值的变量.在PHP中,数组中的元素分两部分,分别为键(Key)和值(Value).其中,"键"为元素的识 ...

  8. CE教程 第四章 《代码寻找》

    步骤 5: 代码寻找 (密码=888899) 有时一些东西的保存位置在你重新开始游戏时会改变,甚至是在你玩的时候也会变,在这种情况下,你 用2步仍然能做出可以用的内存列表. 在这一步会说明怎样用寻找代 ...

  9. C语言用func函数编写程序,C语言程序设计教程第四章练习题解析(1)

    printf("该数是奇数"); } int main() { int num; scanf("%d",&num); func(num); return ...

  10. Web前端开发精品课HTML CSS JavaScript基础教程第四章课后编程题答案

    编程题 利用这一章学到的各种文本标签,把图4-25所示的网页效果做出来. 用VS2013新建ASP.NET空网站,添加新项,建立HTML文件,向其加入以下代码: <!DOCTYPE html&g ...

最新文章

  1. Scrum vs Kanban,如何选择?
  2. 前途无量的MEMS传感器
  3. xadmin后台页面定制和添加服务器监控组件
  4. 皮一皮:这位家长,建议自己退群聊...
  5. PostgreSQL学习手册(数据表)
  6. Iptalbes自动封杀暴力破解(Qmail邮件系统)者的IP地址
  7. 人口增长(信息学奥赛一本通-T1070)
  8. 花呗下调部分年轻用户额度,倡导理性消费,网友:是嫌我穷了吗?
  9. 一个长方体玻璃容器从里面量长宽_在玻璃鱼缸里用微型观叶植物布置景观,比盆景还要迷人...
  10. 重装win 修复ubuntu引导
  11. ArcGIS 掩膜提取
  12. hdu3081 Marriage Match II
  13. Windows蓝屏代码查询(Bug Check Code)
  14. w ndows7旗舰版网卡驱动,Win7网卡驱动64位离线安装包 免费版
  15. 运用 Hightopo 融合基于 HTML5 WebGL 2D / 3D ,搭建的智慧工厂可视化管理系统
  16. scanf的用法大全
  17. 如何利用大数据做遗传病智能化诊断?| 硬创公开课
  18. 解析阿里“聚石塔”产品
  19. 男士黑色手表的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  20. java 判断日期格式_java判断字符是否是日期格式

热门文章

  1. 【CVPR2005】梯度方向直方图(Histogram of Oriented Gradients,简称HOG)
  2. Java多线程-while死循环
  3. classmethod自己定制
  4. django开发_七牛云图片管理
  5. POJ 1981 Circle and Points 单位圆覆盖
  6. UOJ 55 【WC2014】紫荆花之恋——点分治+平衡树
  7. Spring系统学习:180615--通过外部属性文件导入对数据库的连接
  8. MAC OS git客户端安装及操作
  9. C#将窗口最小化到系统托盘,并显示图标和快捷菜单
  10. 【笔记】《编写高质量代码:改善c#程序的157个建议》-第1章 基本语言要素(SamWang)...