视图(View)组件
文章目录
View组件是android中所有UI组件的基类,即我们在android设备上所有可以看见的ui都和View组件有关。需要注意的是Android的界面不仅可以通过XML文件来开发,也可以通过java代码开发。
示例代码1 将用户输入在屏幕上的文字显示出来(使用java代码开发UI界面)
MainActicity.java
package com.kong.exerciseitems;
import androidx.annotation.ColorInt;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
//当第一次创建Activity时回调该方法
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
//创建一个线性布局
LinearLayout linearLayout=new LinearLayout(MainActivity.this);
linearLayout.setOrientation(LinearLayout.VERTICAL);
//创建一个文本框
final EditText editText=new EditText(MainActivity.this);
editText.setText("请输入内容:");
linearLayout.addView(editText);
//创建一个文本视图
final TextView text=new TextView(MainActivity.this);
//设置文字颜色
text.setTextColor(Color.rgb(128,128,128));
linearLayout.addView(text);
//创建一个按钮
Button button=new Button(MainActivity.this);
//设置按钮的上显示的文字
button.setText("确定");
//设置按钮大小
button.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT
));
//设置按钮颜色
button.setBackgroundColor(Color.rgb(255,0,0));
button.setTextColor(Color.rgb(0,255,0));
button.setOnClickListener(new View.OnClickListener() {
//通过匿名类实现点击监听事件
@Override
public void onClick(View v) {
text.setText(editText.getText().toString().subSequence(0,editText.length()));
Toast.makeText(MainActivity.this,"按钮被点击",Toast.LENGTH_SHORT).show();
}
});
//将按钮添加到布局中
linearLayout.addView(button);
//将屏幕内容设置为LinearLayout
setContentView(linearLayout);
}
}
示例程序2 简单的图片浏览器(通过XML和Java共同设计UI)
acticity_main_linearlayout.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:id="@+id/imageBrowser"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</ImageView>
</LinearLayout>
MainActicity.java
package com.kong.simplepicbrower;
import androidx.appcompat.app.AppCompatActivity;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import java.net.URI;
public class MainActivity extends AppCompatActivity {
int count=0;//计数器
//将图片直接放入Drawable文件夹下,不能含有中文名
int imageList[]={R.drawable.a1,R.drawable.a2,R.drawable.a3};
ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
//使用新定义的布局文件,文件名不能包含大写
setContentView(R.layout.acticity_main_linearlayout);
//通过Id寻找View
imageView=findViewById(R.id.imageBrowser);
imageView.setImageResource(imageList[count%imageList.length]);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//当点击图片时切换下一张图片
imageView.setImageResource(imageList[++count%imageList.length]);
}
});
}
}
附加(java练习题)
- 1、编写一个程序,实现从命令行参数输入一字符串,统计该字符串中字符“e”出现的次数。
import java.util.Scanner;
public class FindE {
public static void main(String[] args)
{
Scanner input=new Scanner(System.in);
System.out.print("请输入字符串:");
String str=input.next();
input.close();
int count=0;
for(int i=0;i<str.length();++i)
{
if(str.charAt(i)=='E'||str.charAt(i)=='e')
{
++count;
}
}
System.out.println("E的总数为:"+count);
}
}
- 2、生成十个0~100之间的随机数,放到数组中,然后排序输出。
//生成10个随机数然后排序
import java.util.Arrays;
import java.util.Random;
public class RandSort {
public static void main(String[] args)
{
int temp[]=createRandom();
Arrays.parallelSort(temp);
System.out.printf("生成的随机数排序结果为:"+Arrays.toString(temp));
}
public static int[] createRandom()
{
Random random=new Random();
int randomArray[]=new int[10];
for(int i=0;i<10;i++)
{
randomArray[i]=random.nextInt(100)+1;//产生一个1~100的随机数
}
return randomArray;
}
}
- 3、巴黎时间比北京时间晚7个小时,纽约时间比北京时间晚12个小时,试编写一程序,根据输入的北京时间输出相应的巴黎和纽约时间。
//根据北京时间计算巴黎和纽约时间
import java.util.Scanner;
import java.util.Date;
import java.util.Calendar;
public class calcTime {
public static void main(String args[])
{
//使用Date的无参数构造函数可以获取一个包含本地时间的对象
//Date localTime=new Date();
//System.out.print("本地时间:"+localTime);
calcTime out=new calcTime();
Scanner input=new Scanner(System.in);
int year, month, date, hourOfDay, minute, second;
System.out.println("请输入北京时间(year, month, date, hourOfDay, minute, second):");
year=input.nextInt();
month=input.nextInt();
date=input.nextInt();
hourOfDay=input.nextInt();
minute=input.nextInt();
second=input.nextInt();
Calendar niuyueTime=Calendar.getInstance();
niuyueTime.set(year, month, date, hourOfDay-12, minute, second);
System.out.println("纽约时间:");
out.showTime(niuyueTime);
Calendar baliTime=Calendar.getInstance();
baliTime.set(year, month, date, hourOfDay+7, minute, second);
System.out.println("巴黎时间:");
out.showTime(baliTime);
input.close();
}
public void showTime(Calendar calendar)
{
System.out.printf("%d,%d,%d,%d,%d,%d\n",calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH),
calendar.get(Calendar.DATE),
calendar.get(Calendar.HOUR_OF_DAY),
calendar.get(Calendar.MINUTE),
calendar.get(Calendar.SECOND));
}
}
- 4、解析一个邮箱地址是否合法,如果合法则打印出用户名部分和该邮箱所属的网站域名 如果邮箱地址不合法则显示不合法的原因
- 邮箱地址中不包含@
- 邮箱地址中含有多了@
- 邮箱地址中.出现在@的前面
- 用户名里有其他字符(非数字、.和@)
//检查邮箱地址是否合法
import java.util.Scanner;
public class CheckEmailAddress {
public static void main(String[] args)
{
String emailAddress;
Scanner input=new Scanner(System.in);
System.out.println("请输入需要判断的邮箱地址:");
emailAddress=input.next();
input.close();
if(checkEmailAddress(emailAddress))
{
System.out.println(emailAddress+":合法。");
}
else
{
System.out.println(emailAddress+":不合法。");
}
}
private static boolean checkEmailAddress(String eamilAddress)
{
boolean bRet=true;
//地址中不包含@
if(eamilAddress.indexOf('@')==-1)
{
bRet=false;
}
//@符号出现位置和最后一次出现的位置不相同
else if(eamilAddress.indexOf('@')!=eamilAddress.lastIndexOf('@'))
{
bRet=false;
}
//.出现在@符号之前
else if(eamilAddress.indexOf('.')<eamilAddress.indexOf('@'))
{
bRet=false;
}
for(char value: eamilAddress.toCharArray())
{
if(value=='@'||value=='.')
{
continue;
}
if(!((value>='0'&&value<='9')||(value>='a'&&value<='z')||(value>='A'&&value<='Z')))
{
bRet=false;
break;
}
}
return bRet;
}
}
- 5、分别在控制台输入字符串和子字符串,并计算字符串中子字符串出现的次数。
import java.util.Scanner;
public class JudgeStrSub {
public static void main(String[] args)
{
String mainStr,childStr;
System.out.println("请输入主串");
Scanner input=new Scanner(System.in);
mainStr=input.next();
System.out.println("请输入子串");
childStr=input.next();
input.close();
int count=0;
//indexof可以返回子串在主串中第一次出现的位置
int tmp=mainStr.indexOf(childStr, 0);
//当返回的下标为-1时,则说明从当前位置开始之后的主串中不存在子串。
while(tmp!=-1)
{
++count;
tmp=mainStr.indexOf(childStr, tmp+1);
}
System.out.println(childStr+"在"+mainStr+"中出现的次数:"+count);
}
}