| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> 移动开发 -> 实验3 Android界面组件 -> 正文阅读 |
|
|
[移动开发]实验3 Android界面组件 |
?利用SimpleAdapter实现界面效果 首先,List View为列表视图,是一个视图组,它可以以滑动列表的方式展示项目。而列表项通过使用一个Adapter(适配器)来填充数据。适配器是数据和界面之间的桥梁。采用SimpleAdapter实现界面,因为其可以做一些简单的列表适配。 其次,SimpleAdapter的构造方法为:SimpleAdapter simpleAdapter? = new SimpleAdapter(this , listItems , R.layout.simple_item,new String[]{"personName","header","desc"},new int[]{R.id.name,R.id.header,R.id.desc}); listItems:是一个List<? extends Map<String,>>类型的集合对象,该集合中每个Map<String,?>对象生成一个列表项 R.layout.simple_item:指定一个界面布局的ID,其意为:使用/layout/simple_item.xml文件作为列表项组件 new String[]{"personName","header","desc"}:一个String[]类型的参数,参数决定提取Map<String,?>对象中那些key对应的value来生成列表项 new int[]{R.id.name,R.id.header,R.id.desc}:决定填充哪些组件 0.将图片插入
1.先定义界面布局文件(activity_main.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:orientation="horizontal">
<!--定义一个ListView-->
<!--divider:将控件之间隔开-->
<!--为了实现单击变色,使用ListView的listSelector属性-->
<ListView
android:id="@+id/mylist"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="#000"
android:dividerHeight="2dp"
android:listSelector="#600" />
</LinearLayout>
2.MainActivity中创建SimpleAdapter package com.example.androidlistview;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MainActivity extends AppCompatActivity
{
private String[] names = new String[]{"Lion","Tiger","Monkey","Dog","Cat","Elephant"};
private int[] imagesIds = new int[]{R.drawable.lion, R.drawable.tiger, R.drawable.monkey, R.drawable.dog, R.drawable.cat, R.drawable.elephant};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//创建一个List合集,List集合的元素是Map
List<Map<String, Object>> listItems = new ArrayList<>();
for (int i = 0; i < names.length;i++)
{
Map<String, Object> listItem = new HashMap<>();
listItem.put("textview", names[i]);
listItem.put("imageview", imagesIds[i]);
listItems.add(listItem);
}
//创建一个SimpleAdapter
SimpleAdapter simpleAdapter = new SimpleAdapter(this, listItems, R.layout.simple_item, new String[]{"textview", "imageview"}, new int[]{R.id.text, R.id.image});
ListView list = findViewById(R.id.mylist);
// 为ListView设置Adapter
list.setAdapter(simpleAdapter);
} } 3.在simple_item.xml中写入相应的布局文件 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!--定义一个TexView,用于作为列表项的一部分-->
<TextView
android:id="@+id/text"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:padding="20dp"
android:textSize="20sp"
android:textColor="#000" />
<!--定义一个ImageView,用作列表项的一部分-->
<ImageView
android:id="@+id/image"
android:layout_width="80dp"
android:layout_height="80dp"
android:padding="10dp"/>
</LinearLayout>
4.因为需要监听用户单击某个列表项时间,添加setOnItemClickListener(),而且使用Toast显示选中的列表项信息 Toast: Toast toast = Toast.makeText(MainActivity.this, names[position], Toast.LENGTH_SHORT); 第一个参数:当前的上下文环境。可用getApplicationContext()或者getContext()或this 第二个参数:要显示的字符串。也可是R.string中字符串ID 第三个参数:显示的时间长短。Toast默认的有两个LENGTH_LONG(长3.5秒)和LENGTH_SHORT(短2秒) (ps.选中某个时间列表项为:setOnItemSelectedListenter()) // 为ListView的单击事件绑定事件监听器 得到结果:
?
AlertDialog.Builder的提供setView()方法接受View组件,可以随心所欲的订制对话框中的内容
1.先定义登录界面布局
activity_main.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:orientation="vertical">
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/header_logo"/>
<EditText
android:id="@+id/username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="username"
android:textSize="18dp" />
<EditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="password"
android:textSize="18dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:divider="#808080"
android:dividerHeight="2dp"
android:layout_weight="1"
android:background="#ffffff"
android:text="Cancel"
android:textColor="#000000"
android:textSize="15dp" />
<Button
android:id="@+id/login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:divider="#808080"
android:dividerHeight="2dp"
android:layout_weight="1"
android:background="#ffffff"
android:text="Sign in"
android:textColor="#000000"
android:textSize="15dp" />
</LinearLayout>
</LinearLayout>
2.调用AlertDialog.Builder的setView方法让对话框显示该输入界面
public void customView(View source)
{
//加载布局文件
TableLayout loginForm = (TableLayout) getLayoutInflater().inflate(R.layout.activity_main,null);
//创建AlertDialog对象
//AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();
new AlertDialog.Builder(this)
.setView(loginForm)
.create().show();
}
得到结果: ?
1.在activity_main.xml中布局,TextView
<TextView
android:id="@+id/txt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="12dp"
android:textSize="18dp"
android:text="用于测试的内容"/>
2.新建文件夹menu,在其中新建menu_main.xml和context.xml menu_main.xml <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:title="字体大小">
<menu>
<!-- 定义一组单选菜单-->
<group android:checkableBehavior="single">
<item
android:id="@+id/font_10"
android:title="10号字体"/>
<item
android:id="@+id/font_16"
android:title="16号字体"/>
<item
android:id="@+id/font_20"
android:title="20号字体"/>
</group>
</menu>
</item>
<!-- 定义一个普通菜单项-->
<item android:title="普通菜单项">
</item>
<item android:title="字体颜色">
<menu>
<!-- 定义一组普通菜单项-->
<group>
<!-- 定义三个菜单项-->
<item
android:id="@+id/red_font"
android:title="红色"
/>
<item
android:id="@+id/black_font"
android:title="黑色"
/>
</group>
</menu>
</item>
</menu>
context.xml <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 定义一组单选菜单项 -->
<group android:checkableBehavior="single">
<!-- 定义两个菜单项 -->
<item
android:id="@+id/red"
android:title="红色"
android:alphabeticShortcut="r"/>
<item
android:id="@+id/green"
android:title="黑色"
android:alphabeticShortcut="g"/>
</group>
</menu>
3.在MainActibity.java中运用onCreateContextMenu方法和onCreateOptionsMenu方法加载菜单资源 @Override
public boolean onCreateOptionsMenu(Menu menu)
{
// 装填R.menu.menu_main对应的菜单,并添加到menu中
getMenuInflater().inflate(R.menu.menu_main, menu);
return super.onCreateOptionsMenu(menu);
}
// 创建上下文菜单时触发该方法
@Override
public void onCreateContextMenu(ContextMenu menu, View source, ContextMenu.ContextMenuInfo menuInfo)
{
// 装填R.menu.context对应的菜单,并添加到menu中
getMenuInflater().inflate(R.menu.context, menu);
menu.setHeaderTitle("请选择背景色");
}
@Override public boolean onOptionsItemSelected(MenuItem mi)
{
// 勾选该菜单项
if (mi.isCheckable())
{
mi.setChecked(true); // ②
}
// 判断点击的是哪个菜单项,并做出响应
switch (mi.getItemId())
{
case R.id.font_10: txt.setTextSize(10 * 2); break;
case R.id.font_16: txt.setTextSize(16 * 2); break;
case R.id.font_20: txt.setTextSize(20 * 2); break;
case R.id.red_font: txt.setTextColor(Color.RED); break;
case R.id.black_font: txt.setTextColor(Color.BLACK); break;
case R.id.plain_item:
//点击之后弹出Toast提示
Toast.makeText(MainActivity.this,
"您单击了普通菜单项", Toast.LENGTH_SHORT)
.show();
break;
}
return true;
}
运行结果: ?
|
|
|
| 移动开发 最新文章 |
| Vue3装载axios和element-ui |
| android adb cmd |
| 【xcode】Xcode常用快捷键与技巧 |
| Android开发中的线程池使用 |
| Java 和 Android 的 Base64 |
| Android 测试文字编码格式 |
| 微信小程序支付 |
| 安卓权限记录 |
| 知乎之自动养号 |
| 【Android Jetpack】DataStore |
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年11日历 | -2025/11/29 1:18:03- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |