10Android用户界面(4).
Android用户界面程序设计示例

Android用户界面程序设计示例[例1]按钮和Toast弹出对话框 (1)[例2] TextView文本框(1) (4)[例3]TextView文本框(2) (5)[例4]编辑框EditText (6)[例5]单选RadioButton (12)[例6]Toast的用法简介 (14)[例7]多选checkbox (18)[例8]菜单Menu (20)[例9]Dialog对话框 (22)[例10]图片视图ImageView (25)[例11]图片按钮ImageButton (27)界面布局 (31)[例12]垂直线性布局 (31)[例13]水平线性布局 (33)[例14]相对布局 (34)绝对布局 (35)[例15]表单布局 (35)[例16]切换卡(TabWidget)40[例1]按钮和Toast弹出对话框1、设计界面如图所示:2、布局文件:<TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/hello"/><Buttonandroid:id="@+id/ok"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="OK"/>3、Activity界面程序:public class Activity01 extends Activity {public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);// 获得Button对象Button button_ok = (Button) findViewById(R.id.ok);// 设置Button控件监听器button_ok.setOnClickListener(new Button.OnClickListener() {public void onClick(View v) {// 这里处理事件//DisplayToast("点击了OK按钮");Toast.makeText(this, ("点击了OK按钮", Toast.LENGTH_SHORT).show();}});}public void DisplayToast(String str) {Toast.makeText(this, str, Toast.LENGTH_SHORT).show();}/* 按键按下所触发的事件*/public boolean onKeyDown(int keyCode, KeyEvent event) {switch (keyCode) {case KeyEvent.KEYCODE_DPAD_CENTER:DisplayToast("按下:中键");break;case KeyEvent.KEYCODE_DPAD_UP:DisplayToast("按下:上方向键");break;case KeyEvent.KEYCODE_DPAD_DOWN:DisplayToast("按下:下方向键");break;case KeyEvent.KEYCODE_DPAD_LEFT:DisplayToast("按下:左方向键");break;case KeyEvent.KEYCODE_DPAD_RIGHT:DisplayToast("按下:右方向键");break;}return super.onKeyDown(keyCode, event);}/* 按键弹起所触发的事件*/public boolean onKeyUp(int keyCode, KeyEvent event) {switch (keyCode) {case KeyEvent.KEYCODE_DPAD_CENTER:DisplayToast("弹起:中键");break;case KeyEvent.KEYCODE_DPAD_UP:DisplayToast("弹起:上方向键");break;case KeyEvent.KEYCODE_DPAD_DOWN:DisplayToast("弹起:下方向键");break;case KeyEvent.KEYCODE_DPAD_LEFT:DisplayToast("弹起:左方向键");break;case KeyEvent.KEYCODE_DPAD_RIGHT:DisplayToast("弹起:右方向键");break;}return super.onKeyUp(keyCode, event);}[例2]TextView(1)1、设计界面如图所示:2、布局文件:<TextViewandroid:id="@+id/textview"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/hello"/>3、Activity界面程序的核心语句:textview = (TextView)this.findViewById(R.id.textview);String string = "TextView示例,wangzhiguo";/* 设置文本的颜色 */textview.setTextColor(Color.RED);/* 设置字体大小 */textview.setTextSize(20);/* 设置文字背景 */textview.setBackgroundColor(Color.BLUE);/* 设置TextView显示的文字 */textview.setText(string);[例3]TextView(2)1、设计界面(略)2、布局文件:<TextViewandroid:id="@+id/textview"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/hello"android:background="#FFFFFF"android:textColor="#000000"android:textSize="20px"/>其他一些属性android:textColor="#ff0000"android:textSize="24sp"android:textStyle="bold"3、Activity界面程序的核心语句:setContentView(yout.main);//设置内容显示的xml布局文件TextView textView=(TextView)findViewById(R.id.text_view);//取得TextView组件textView.setTextColor(Color.RED);//设置成红色textView.setTextSize(PLEX_UNIT_SP, 24f);//设置成24sp textView.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));//加粗android:autoLink="web"android:autoLink="phone"android:autoLink="all"实现跑马灯效果<TextViewandroid:id="@+id/text_view"1.android:autoLink="all"2.android:layout_width="fill_parent"3.android:layout_height="wrap_content"4.android:text="@string/hello"5.android:ellipsize="marquee"6.android:focusable="true"7.android:marqueeRepeatLimit="marquee_forever"8.android:focusableInTouchMode="true"9.android:singleLine="true"10. android:scrollHorizontally="true"/>11.</LinearLayout>[例4]编辑框EditText1、设计界面如图所示:2、布局文件:<string name="hello">文本框中内容是</string><string name="message">请输入账号</string><string name="app_name">EditText_wangzhiguo</string><TextViewandroid:id="@+id/TextView01"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/hello"/><EditTextandroid:id="@+id/EditText01"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textSize="18sp"android:layout_x="29px"android:hint="@string/message"android:layout_y="33px"/>3、Activity界面程序的核心语句:super.onCreate(savedInstanceState);setContentView(yout.main);m_TextView = (TextView) findViewById(R.id.TextView01);m_EditText = (EditText) findViewById(R.id.EditText01);m_TextView.setTextSize(20);/*** 设置当m_EditText中为空时提示的内容在XML中同样可以实现:android:hint="请输入账号"*/// m_EditText.setHint("请输入账号");/* 设置EditText事件监听 */m_EditText.setOnKeyListener(new EditText.OnKeyListener() { @Overridepublic boolean onKey(View arg0, int arg1, KeyEvent arg2) { // 得到文字,将其显示到TextView中m_TextView.setText(Activity01.this.getString(R.string.hello) +m_EditText.getText().toString());return false;}});补充:关于EditText的一些细节操作android:hint="请输入用户名..." 提示属性android:textColorHint="#238745" 更改提示颜色android:enabled="false" 不可编辑android:lines=”10”通过设定行高,实现文本域功能android:maxLength="40" 最大内容长度android:password="true" 要求输入密码android:phoneNumber="true" 只能输入电话号码droid:numeric="signed"android:inputType="date" 指定输入类型android:imeOptions="actionSearch" Enter键图标设置1.actionUnspecified 未指定,对应常量EditorInfo.IME_ACTION_UNSPECIFIED.效果:2.actionNone 没有动作,对应常量EditorInfo.IME_ACTION_NONE 效果:3.actionGo 去往,对应常量EditorInfo.IME_ACTION_GO 效果:4.actionSearch 搜索,对应常量EditorInfo.IME_ACTION_SEARCH 效果:5.actionSend 发送,对应常量EditorInfo.IME_ACTION_SEND 效果:6.actionNext 下一个,对应常量EditorInfo.IME_ACTION_NEXT 效果:7.actionDone 完成,对应常量EditorInfo.IME_ACTION_DONE 效果:课堂练习作业提示//监听EditText文本的回车键editText.setOnEditorActionListener(new OnEditorActionListener() {@Overridepublic boolean onEditorAction(TextView v, int actionId, KeyEvent event) {Toast.makeText(HelloEditText.this, String.valueOf(actionId), Toast.LENGTH_SHORT).show();return false;}});//获取EditText文本public void onClick(View v) {Toast.makeText(HelloEditText.this, editText.getText() .toString(), Toast.LENGTH_SHORT).show();Button all=(Button)findViewById(R.id.btn_all);all.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {editText.selectAll();}});//让EditText全选Button all=(Button)findViewById(R.id.btn_all);all.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {editText.selectAll();}});//从第2个字符开始选择EditText文本public void onClick(View v) {Editable editable=editText.getText();Selection.setSelection(editable, 1,editable.length());}public void onClick(View v) {int start=editText.getSelectionStart();int end=editText.getSelectionEnd();CharSequence selectText=editText.getText().subSequence(start, end);oast.makeText(HelloEditText.this, selectText, Toast.LENGTH_SHORT) .show();}/*** 交换两个变量的值* @param start 变量初值* @param end 变量终值*/protected void switchIndex(int start, int end) {int temp=start;start=end;end=temp;}[例5]单选RadioButton1、设计界面如图所示:2、布局文件:<resources><string name="hello">Android底层是基于什么操作系统?</string> <string name="app_name">单选RadioButton_wangzhiguo</string> <string name="RadioButton1">Windows</string><string name="RadioButton2">Linux</string><string name="RadioButton3">Moc os</string><string name="RadioButton4">Java</string></resources><TextViewandroid:id="@+id/TextView01"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/hello"/><RadioGroupandroid:id="@+id/RadioGroup01"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"android:layout_x="3px"android:layout_y="54px"><RadioButtonandroid:id="@+id/RadioButton1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/RadioButton1"/><RadioButtonandroid:id="@+id/RadioButton2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/RadioButton2"/><RadioButtonandroid:id="@+id/RadioButton3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/RadioButton3"/><RadioButtonandroid:id="@+id/RadioButton4"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/RadioButton4"/></RadioGroup>3、Activity界面程序的核心语句:/*** 获得TextView对象获得RadioGroup对象获得4个RadioButton对象*/m_TextView = (TextView) findViewById(R.id.TextView01);m_RadioGroup = (RadioGroup) findViewById(R.id.RadioGroup01);m_Radio1 = (RadioButton) findViewById(R.id.RadioButton1);m_Radio2 = (RadioButton) findViewById(R.id.RadioButton2);m_Radio3 = (RadioButton) findViewById(R.id.RadioButton3);m_Radio4 = (RadioButton) findViewById(R.id.RadioButton4);/* 设置事件监听 */m_RadioGroup.setOnCheckedChangeListener(newRadioGroup.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(RadioGroup group, int checkedId) { // TODO Auto-generated method stubif (checkedId == m_Radio2.getId()) {DisplayToast("正确答案:" + m_Radio2.getText()+ ",恭喜你,回答正确!");} else {DisplayToast("请注意,回答错误!");}}});}/* 显示Toast */public void DisplayToast(String str) {Toast toast = Toast.makeText(this, str, Toast.LENGTH_LONG);// 设置toast显示的位置toast.setGravity(Gravity.TOP, 0, 220);// 显示该Toasttoast.show();}[例6]Toast的用法简介[例6_1] 弹出式提示框的默认样式1、设计界面如图所示:2、核心语句:Toast.makeText(getApplicationContext(), "默认Toast样式", Toast.LENGTH_SHORT).show();[例6_2] 自定义提示框显示位置1、设计界面如图所示:2、核心语句:toast = Toast.makeText(getApplicationContext(),"自定义位置Toast", Toast.LENGTH_LONG);toast.setGravity(Gravity.CENTER, 0, 0);toast.show();[例6_3]带图片提示框效果1、设计界面如图所示:2、核心语句:toast = Toast.makeText(getApplicationContext(),"带图片的Toast", Toast.LENGTH_LONG);toast.setGravity(Gravity.CENTER, 0, 0);LinearLayout toastView = (LinearLayout) toast.getView();ImageView imageCodeProject = new ImageView(getApplicationContext()); imageCodeProject.setImageResource(R.drawable.icon);toastView.addView(imageCodeProject, 0);toast.show();[例6_4]带图片的自定义提示框效果1、设计界面如图所示:2、核心语句:LayoutInflater inflater = getLayoutInflater();View layout = inflater.inflate(yout.custom,(ViewGroup) findViewById(R.id.llToast));ImageView image = (ImageView) layout.findViewById(ImageToast);image.setImageResource(R.drawable.icon);TextView title = (TextView) layout.findViewById(TitleToast); title.setText("Attention");TextView text = (TextView) layout.findViewById(TextToast); text.setText("完全自定义Toast");toast = new Toast(getApplicationContext());toast.setGravity(Gravity.RIGHT | Gravity.TOP, 12, 40);toast.setDuration(Toast.LENGTH_LONG);toast.setView(layout);toast.show();[例6_5]其他线程1、设计界面如图所示:2、核心语句:new Thread(new Runnable() {public void run() {showToast();}}).start();[例7]多选checkbox1、设计界面如图所示:2、布局文件:<string name="hello">调查:你喜欢Android的原因?</string><string name="app_name">CheckBox_wangzhiguo</string><string name="CheckBox1">无界限的应用程序</string><string name="CheckBox2">应用程序是在平等的条件下创建的</string> <string name="CheckBox3">应用程序可以轻松地嵌入网络</string><string name="CheckBox4">应用程序可以并行运行</string><TextViewandroid:id="@+id/TextView1"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/hello"/><CheckBoxandroid:id="@+id/CheckBox1"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/CheckBox1"></CheckBox><CheckBoxandroid:id="@+id/CheckBox4"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="@string/CheckBox4"></CheckBox><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="提交"></Button>3、核心语句:m_CheckBox1.setOnCheckedChangeListener(newCheckBox.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {if (m_CheckBox1.isChecked()) {DisplayToast("你选择了:" + m_CheckBox1.getText());}}});m_Button1.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) {int num = 0;if (m_CheckBox1.isChecked()) {num++;}if (m_CheckBox2.isChecked()) {num++;}if (m_CheckBox3.isChecked()) {num++;}if (m_CheckBox4.isChecked()) {num++;}DisplayToast("谢谢参与!你一共选择了" + num + "项!");}});[例8] 菜单Menu1、设计界面如图所示:2、布局文件:<string name="hello">主界面,点击关于会跳到另一个界面!(Activity01)</string> <string name="hello2">关于\nAndroid Menu使用范例!(Activity02)</string> <string name="app_name">Menu_wangzhiguo</string><string name="ok">切换Activity</string><string name="back">返回</string>创建menu文件夹,其中放入menu.xml<menu xmlns:android="/apk/res/android"> <item android:id="@+id/about"android:title="关于"/><item android:id="@+id/exit"android:title="退出"/></menu>创建两个main.xml,两个activity,并且在AndroidManifest.xml中加入<activity android:name=".Activity02" ></activity>3、Activity界面程序的核心语句:启用菜单/* 创建menu */public boolean onCreateOptionsMenu(Menu menu) {MenuInflater inflater = getMenuInflater();// 设置menu界面为res/menu/menu.xmlinflater.inflate(R.menu.menu, menu);return true;}/* 处理菜单事件 */public boolean onOptionsItemSelected(MenuItem item) {// 得到当前选中的MenuItem的ID,int item_id = item.getItemId();switch (item_id) {case R.id.about:/* 新建一个Intent对象 */Intent intent = new Intent();/* 指定intent要启动的类 */intent.setClass(Activity01.this, Activity02.class);/* 启动一个新的Activity */startActivity(intent);/* 关闭当前的Activity */Activity01.this.finish();break;case R.id.exit:Activity01.this.finish();break;}return true;}启用菜单的另外一种方式public boolean onCreateOptionsMenu(Menu menu) { // 为menu添加内容menu.add(0, 0, 0, R.string.ok);menu.add(0, 1, 1, R.string.back);return true;}[例9] Dialog对话框1、设计界面如图所示:2、核心语句:Dialog dialog = new AlertDialog.Builder(this).setTitle("exit").setMessage("你确定退出程序吗").setNegativeButton("取消", new DialogInterface.OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which) // Acitivity01.this.finish();Acitivity01.this.loginDialog().show();}}).setPositiveButton("ok", newDialogInterface.OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which) {pDialog= ProgressDialog.show(Acitivity01.this, "请稍等", "您正在登陆", true);new Thread(){public void run() {try {Thread.sleep(3000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}pDialog.dismiss();};}.start();Acitivity01.this.finish();}}).create();dialog.show();public Dialog loginDialog(){L ayoutInflater factory = LayoutInflater.from(Acitivity01.this);V iew dialogView = factory.inflate(yout.dialog, null);D ialog dialog = null;A lertDialog.Builder builder = newAlertDialog.Builder(Acitivity01.this);b uilder.setTitle("this is a login view");b uilder.setView(dialogView);b uilder.setPositiveButton("ok", null);b uilder.setNegativeButton("cancel", null);d ialog = builder.create();r eturn dialog;}[例10] 图片视图ImageView1、设计界面如图所示:2、布局文件:<ImageViewandroid:id="@+id/ImageView01"android:layout_width="wrap_content"android:layout_height="wrap_content"></ImageView><TextViewandroid:id="@+id/TextView01"android:layout_below="@id/ImageView01"android:layout_width="wrap_content"android:layout_height="wrap_content">3、核心语句:// 获得ImageView的对象imageview = (ImageView) this.findViewById(R.id.ImageView01);textview = (TextView) this.findViewById(R.id.TextView01);// 设置imageview的图片资源。
Android系统用户界面(UI)的定制与优化的开题报告

Android系统用户界面(UI)的定制与优化的开题报告一、研究背景Android操作系统是目前世界上使用最广泛的智能手机操作系统。
在Android普及的背景下,用户对于手机用户界面的要求正在不断提高。
因此,如何定制和优化Android系统的用户界面(UI)成为了一个研究热点。
本研究旨在研究定制和优化Android系统用户界面的方法和技术。
二、研究目的本研究的目的是:1. 研究Android系统用户界面(UI)的特点和现状;2. 研究现有的Android系统用户界面(UI)的优化方法和技术;3. 探索Android系统用户界面(UI)的定制方法和技术,为实现个性化定制提供技术支持;4. 探索Android系统用户界面(UI)的未来发展方向。
三、研究内容本研究内容主要包括以下方面:1. Android系统用户界面(UI)的特点和现状:主要分析Android系统用户界面(UI)的特点和现状,包括UI组件、多媒体、通知等方面。
2. Android系统用户界面(UI)的优化方法和技术:主要介绍现有的Android系统用户界面(UI)的优化方法和技术,包括响应速度、动画效果和布局等方面。
3. Android系统用户界面(UI)的设计和定制:主要探讨如何利用Android系统用户界面(UI)的特点和优化方法,实现个性化的设计和定制。
4. Android系统用户界面(UI)的未来发展方向:主要探讨Android系统用户界面(UI)未来的发展趋势,包括增强用户体验和提高安全性等方面。
四、研究方法1. 文献研究法:通过查阅相关文献,全面了解Android系统用户界面(UI)的特点、现状和未来发展方向,获取Android系统用户界面(UI)的设计和定制方法和技术。
2. 实验研究法:通过实验研究,验证Android系统用户界面(UI)的设计和定制方法和技术的可行性和有效性。
五、研究意义本研究对于提高Android系统用户界面(UI)的设计和优化水平,满足用户体验需求,具有重要的意义。
Android 用户界面

5.2 界面控件
5.2.2 Button和ImageButton
按钮响应点击事件:添加点击事件的监听器
1. final TextView textView = (TextView)findViewById(R.id.TextView01);
2. button.setOnClickListener(new View.OnClickListener() {
➢ “@+id/TextView01”表示所设置的ID值 ➢ @表示后面的字符串是ID资源 ➢ 加号(+)表示需要建立新资源名称,并添加到R.java文件中 ➢ 斜杠后面的字符串(TextView01)表示新资源的名称 ➢ 如果资源不是新添加的,或属于Android框架的ID资源,则不
需要使用加号(+),但必须添加Android包的命名空间,例如 android:id="@android:id/empty"
➢ 上方“用户名”部分使用的是TextView,下方的文字输入框使 用的是EditText
5.2 界面控件
5.2.1 TextView和EditText
TextViewDemo在XML文件中的代码
1. <TextView android:id="@+id/TextView01"
2.
android:layout_width="wrap_content"
8.
android:layout_height="wrap_content"
9.
android:text="EditText01" >
10. </EditText>
Android登录界面(步骤详细)

Android简单登录界面设计一个登陆界面:允许用户输入用户名,密码;用户点击“Login”之后,如果用户名为admin, 密码为123则显示“登陆成功”;如果用户名密码其中之一不正确,红色字体显示“登陆失败!”首先我们来建立一个新的项目:图标那一步就随便选吧,下一步:这一步与上次有点不同,这次我们不要ADT 帮我们创建任何的Activity,我们只需要一个空的项目。
点击Finish后,我们会发现,项目文件视图下,与上次的不一样,src, res/layout 是空的,这次需要我们自己去添加了。
首先来明确一下我们现在的目标:建立一个包含登录框的界面,并将它显示在我们的手机(模拟器)上。
建立一个界面的主要步骤是什么呢?主要有以下几步:•在res/layout下创建布局文件;•在src下创建Activity子类,并将布局文件与这个Activity联系起来。
•在AndroidManifest.xml程序配置文件中,添加Activity的声明。
我们先来1. 创建布局文件:在Eclipse项目文件中选中layout 文件夹,在工具栏里点击下面图标在弹出的窗口,填上这个xml布局文件的文件名,Root Element 根节点就选择Linearlayout 即可点击下一步,这一步是选择更多配置属性的,暂且不用理会,直接点击Finish。
我们发现,在res/layout 下面多了一个login.xml文件,同时Android 的Layout 编辑器也把它打开了。
切换到“source”代码视图,今天我们不用“所见即所得”的傻瓜拖拽方式。
我们看到xml代码是这样的:<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"></LinearLayout>根节点是LinearLayout,即线性布局,所谓线性布局,有点像J2SE上的流式布局,就是其中的UI元素,会按水平或者垂直方向顺序地铺开。
Android之界面布局

用户界面基础
用户界面(User Interface,UI)是系统和用户之间 进行信息交换的媒介,实现信息的内部形式与人类 可以接受形式之间的转换
在计算机出现早期,批处理界面(1946-1968)和命令行 界面(1969-1983)得到广泛的使用 目前,流行图像用户界面(Graphical User Interface, GUI),采用图形方式与用户进行交互的界面 未来的用户界面将更多的运用虚拟现实技术,使用户能 够摆脱键盘与鼠标的交互方式,而通过动作、语言,甚 至是脑电波来控制计算机
// 定义布局管理器的指定宽和高 youtParams params = new youtParams( youtParams.FILL_PARENT, youtParams.FILL_PARENT); layout.setOrientation(LinearLayout.VERTICAL);
<Button android:id="@+id/btn1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="gravity测试" android:gravity="right" /> <Button android:id="@+id/btn2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="layout_gravity测试" android:layout_gravity="right" />
界面常用控件

【例3-2】演示线性布局编写方法
2.界面布局
2.3 相对布局
相对布局RelativeLayout是采用相对于其他组件位置的 布局方式,该布局内的组件都和其他组件存在相对关系,通 常通过指定id关联其他组件,以右对齐、上对其、下对齐或 居中对齐等方式来排列组件。 相对布局是现在用的比较多的一种布局方式,属性较多, 下面介绍几种常用属性:
【例3-5】演示表格布局编程方法
2.界面布局
2.6 网格布局
网格布局GridLayout是android4.0以上版本出现的,网格 布局使用虚细线将布局划分为行、列和单元格,也支持一 个控件在行、列上都有交错排列。 它与LinearLayout布局一样,也分为水平和垂直两种方式, 默认是水平布局,一个控件挨着一个控件从左到右依次排 列,但是通过指定android:columnCount设置列数的属性 后,控件会自动换行进行排列。 对于GridLayout布局中的子控件,默认按照wrap_content 的方式设置其显示,这只需要在GridLayout布局中显式声 明即可。
3.4 Spinner和ListView
数据源
Adapter
列表 (Spinner及ListView)
Cursor
ArrayList
数据源、Adapter和列表间的关系图
3.4 Spinner和ListView
Adapter是一个接口,Spinner和ListView显示前 要使用setAdapter()方法,ListView本身继承 自ViewGroup,只设定它里面的View的排列规则, 不设定其是什么样的,而View是什么样的需要靠 ListAdapter里面的getView方法来确定,只要设 置不同的ListAdapter实例对象,就会生成不一样 的ListView。 【例3-9】使用ArrayAdapter演示Spinner和 ListView控件编程方法
第4章 Android用户界面
在onCreateOptionsMenu()方法中产生 )方法中产生Menu
menu.add(int菜单组编号, int菜单项编号, int菜单项显示次序, 菜单项 标题); SubMenu subMenu = menu.addSubMenu(标题); subMenu.add(..) 使用XML菜单资源。菜单充气者MenuInflater将xml菜单资源充入 menu。 inflater.inflate(resId,menu);
文件夹和普通文件都是文件。 普通文件中不能再放文件. 文件夹中可以放普通文件,也可以再放文件夹
Page 3
用户界面概述
组合模式(又叫部分与整体模式)--类图
Page 4
用户界面概述
View和ViewGroup树
Page 5
用户界面概述
UI组件概览---非类图
Page 6
菜单
选项菜单—Options Memu
对话框
AlertDialog实现方法(建造者模式)
实例化建造者AlertDialog.Builder 实例化建造者 利用builder设置对话框的各种属性 设置对话框的各种属性 利用
setTitle(标题) setMessage(消息) setCancelable(boolean b)—设置是否可以取消 setPositiveButton( )---设置”正面”按钮,及点击该按钮的事件处理 setNegativeButton( )---设置“反面”按钮,及点击该按钮的事件处理 多项--setItems(CharSequence[] items, DialogInterface.OnClickListener listener) 多项单选--setSingleChoiceItems (CharSequence[] items, int checkedItem, DialogInterface.OnClickListener listener)
Android个人中心界面
Android个⼈中⼼界⾯个⼈中⼼主要代码:1class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {2 @NonNull3 @Override4public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {5// View view = View.inflate(parent.getContext(), yout.adapter_recycler_home, null);6 View view = View.inflate(parent.getContext(), yout.item_favour, null);7 MyViewHolder myViewHolder = new MyViewHolder(view);8return myViewHolder;9 }1011 @Override12public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder2, int position) {13 GoodsBean goodsBean = allByUsername.get(position);14 MyViewHolder holder = (MyViewHolder) holder2;15 String goodsPath = goodsBean.getGoodsPath();16 System.out.println("goodsPath :" + goodsPath);17 Bitmap bitmap = BitmapFactory.decodeFile(goodsPath);18 holder.ivGoodsPic.setBackground(new BitmapDrawable(bitmap));19 GoodsName.setText("商品名称:" + goodsBean.getGoodsName());20 GoodsPrice.setText("商品价格:" + "¥" +goodsBean.getGoodsPrice());21 GoodsCategory.setText("商品分类:" + goodsBean.getGoodsCategory());22 GoodsPhone.setText("联系电话:" + goodsBean.getGoodsPhone());23 GoodsTime.setText("发布时间:" + goodsBean.getGoodsTime() +" ");24 holder.btnAddPurchase.setTag(position);25 holder.btnFavourCancel.setTag(position);26if(flag==1 || flag==2){27if(flag==1) {28 holder.btnAddPurchase.setVisibility(View.GONE);29 holder.btnFavourCancel.setVisibility(View.GONE);30 }31if(flag==2){32 String id = goodsBean.get_id();33 holder.btnAddPurchase.setTag(id);34 holder.btnFavourCancel.setVisibility(View.GONE);35 holder.btnAddPurchase.setOnClickListener(listener1);36 }37 }else{38 String id = goodsBean.get_id();39 holder.btnFavourCancel.setTag(id);40 holder.btnAddPurchase.setVisibility(View.GONE);41 holder.btnFavourCancel.setOnClickListener(listener);42 }43 }4445 @Override46public int getItemCount() {47return allByUsername == null ? 0 : allByUsername.size();48 }49 }5051private View.OnClickListener listener1= new View.OnClickListener(){52 @Override53public void onClick(View v) {54 String goodsId = (String) v.getTag();55 System.out.println("goodsId : " + goodsId);56int raw = ProductDao.getInstance().updateGoodsBuyed(goodsId);57if (raw > 0){58 UiUtils.toast("购买成功");59 }else {60 UiUtils.toast("购买失败");61 }62 }63 };6465private View.OnClickListener listener = new View.OnClickListener(){66 @Override67public void onClick(View v) {68 String goodsId = (String) v.getTag();69 System.out.println("goodsId : " + goodsId);70int raw = ProductDao.getInstance().updateGoodsBuyedDelete(goodsId);71if (raw == 0){72 UiUtils.toast("删除成功");73 allByUsername = ProductDao.getInstance().findAllGoodsBeanByUsername();74 releaseRecyclerView.setAdapter(new MyAdapter());75 }else {76 UiUtils.toast("删除失败");77 }78 }79 };808182static class MyViewHolder extends RecyclerView.ViewHolder {83private ImageView ivGoodsPic;84private TextView tvGoodsName;85private TextView tvGoodsPrice;86private TextView tvGoodsCategory;87private TextView tvGoodsPhone;88private TextView tvGoodsTime;89private Button btnAddPurchase;90private Button btnFavourCancel;919293public MyViewHolder(@NonNull View itemView) {94super(itemView);95 ivGoodsPic = itemView.findViewById(R.id.ivGoodsPic);96 tvGoodsName = itemView.findViewById(GoodsName);97 tvGoodsPrice = itemView.findViewById(GoodsPrice);98 tvGoodsCategory = itemView.findViewById(GoodsCategory);99 tvGoodsPhone = itemView.findViewById(GoodsPhone); 100 tvGoodsTime = itemView.findViewById(GoodsTime);101 btnFavourCancel = itemView.findViewById(_favour_cancel); 102 btnAddPurchase = itemView.findViewById(R.id.btnAddPurchase); 103 }104 }105106 }。
android用户界面之Notification教程实例汇总
android用户界面之Notification教程实例汇总用户界面是android开发中最基础的功能,也是与用户交互最直接的方式。
通过学习安卓开发这段时间,很容易找到关于android的各种UI常见元素的教程与实例。
比如说:WebView,Edittext,Button ,ListView,TextView, checkbox,layout, surfaceview,menu,progressBar,seekBar,Notification 等等。
现在特地总结了Android用户界面之Notification 的相关信息,分三个方面进行说明的,希望可以对学习 安卓开发 的朋友们有些帮助,也希望能不断补充新的学习内容。
一、Notification基础教程1.Notification实时显示系统内存信息/android-51690-1-1.html2.Android 通知Notification/android-51694-1-1.html3.Notification 使用详解(很全)/android-51688-1-1.html4.Android Push Notification实现信息推送使用/android-48363-1-1.html5.android 消息提醒(Toast,Notification)/android-12970-1-1.html6.第十九讲:Android Notification的使用入门/android-725-1-1.html7.Android Notification与Toast/android-6187-1-1.html8.Andriod:Toast、Notification、Alarm, Android中的通知实现 /android-4776-1-1.html9.NotificationManager and Notification学习笔记/android-267-1-1.html10Android 浅谈Notification/android-16289-1-1.html11.android开发(11) 消息栏通知(Notification)/android-5202-1-1.html12.解读Notification/android-19156-1-1.html二、Notification简单实例1.如何制作Notification程序/android-51689-1-1.html 2.实现自定义布局的Notification/android-19155-1-1.html 3.android之Notification的使用/android-17099-1-1.html 4.Android 给地震监视器添加Notification/android-16948-1-1.html 5.Android 高级Notification技巧/android-16949-1-1.html 6.在Android中使用Notification进行提示/android-20486-1-1.html三、Notification实例源码1.使用免费服务轻松实现push notification/android-51693-1-1.html 2.如何修改状态栏notification/android-5967-1-1.html。
Android 用户界面---菜单(Menus)
在很多类型的应用程序中,菜单是一个常用的用户界面组件。
要提供友好的和前后一致的用户体验,就应该使用Menu APIs把Activity的动作和其他选项展现给用户。
从Android3.0(API 级别11)开始,Android设备不再需要提供一个专用的Menu按钮,随着这种改变,Android应用程序将会从对传统的6项菜单面板的依赖中解脱出来,取而代之的是提供了一个用户展现常用用户动作的操作栏。
尽管针对一些菜单项的设计和用户体验已经改变,但是定义一组动作和选项的语意依然是基于Menu APIs的。
本指南展示了如何创建能够在Android所有版本上演示的三种基本类型的菜单和动作。
选项菜单和操作栏选项菜单(options menu)是针对Activity的主要菜单集合。
它是你放置应用程序中有全局影响的动作的地方,如“搜索”、“编写电子邮件”、和“设置”等功能。
如果你针对Android2.3或更低的版本来开发应用,那么用户要通过按Menu按钮来展现选项菜单面板。
在Android3.0或更高版本上,源于选项菜单的项目是通过操作栏(action bar)来展现的,它由屏幕上的动作项目和剩余的选项组合而成。
从Android3.0开始,Menu按钮被弃用了(有些设备根本就没有这个按钮),因此,你应该使用操作栏来提供对动作和其他选项的访问。
上下菜单和上下文动作模式一个上下文菜单是一个当用户在一个元素上执行long-click事件时才显示的浮动菜单。
它提供了影响选择内容或上下文框架的动作。
当给Android3.0和更高的版本开发应用程序时,你应该改用上下文动作模式(contextual action mode)来确保被选内容的动作。
这种模式把影响选择内容的动作项目显示在屏幕顶部的一个横条中,并允许用户选择多个项目。
弹出菜单一个弹出菜单在一个垂直列表中显示项目的列表,它靠在调用这个菜单的View对象旁边。
它对给相关指定内容提供动作的展现或给一个命令的第二部分提供选项是有好处的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7.11.1 简单 ListView控件
演示程序: ListViewDemoActivity:
main.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="/apk/res/android " android:id="@+id/relativeLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id = "@+id/txtHint" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background = "#ffffff" android:textColor ="#000000" android:textSize="14pt" android:layout_alignParentTop="true" android:text="Please Select a book" />
Android用户界面(4)
北京大学信息学院 郭炜 本文“菜单”部分取自可能是哈尔滨工程大学的网上 讲义
7.11 ListView控件
ListView是内部数据和界面分开的。内部数据和表项用不同 方式指定 用适配器指定ListView的内容和表项的显示方式。 用 setAdapter成员函数指定适配器 设置项目选中的监听器: listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { //arg0 就是 ListView,arg1是选中的那项 //arg2是项的序号( 从0开始算) arg3是项的 id //arg1是被选中的那项(可以是个ViewGroup) } }); } 修改表项内容的办法和 Spinner类似,只要修改数据源,然后调 用适配器的 notifyDataSetChanged 成员函数即可。
public class ListViewDemoActivity extends Activity { ListView listView; TextView txtResult; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(yout.main); List<String> data = new ArrayList<String>(); for( int i = 0;i < 20; ++ i) data.add("测试数据1" + Integer.toString(i)); listView = (ListView) findViewById(R.id.lvBook); txtResult = (TextView) findViewById(R.id.txtResult); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, yout.simple_list_item_1, data ); listView.setAdapter(adapter);
<ListView android:id="@+id/lvBook" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_above = "@+id/lyButtons" android:layout_below = "@+id/txtHint“> </ListView> <LinearLayout android:id="@+id/lyButtons" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity = "center|center_horizontal" android:layout_alignParentBottom = "true" android:orientation="horizontalroid:id="@+id/txtResult" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background = "#ffffff" android:textColor ="#000000" android:textSize="10pt" android:text="result" /> </LinearLayout> </RelativeLayout>
7.11.1 简单 ListView控件
List<String> data = new ArrayList<String>(); 用这样的data就可以作为 ListView中的数据来源 可以用 ArrayAdapter<String> adapter 这样的 adapter 对象作 为ListView的适配器 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, yout.simple_list_item_1, data ); yout.simple_list_item_1 是表项的类型 (P97) 表项可以是 TextView,CheckBox,RadioButton等。