Android学习之旅(3)---视图(View)组件

视图(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);
    }

}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GHGYYcb4-1575297930964)(./显示字符.png)]

示例程序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]);
            }
        });
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xn0Z6hwh-1575297930965)(./SimplePicBrower.png)]

附加(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、解析一个邮箱地址是否合法,如果合法则打印出用户名部分和该邮箱所属的网站域名 如果邮箱地址不合法则显示不合法的原因
    1. 邮箱地址中不包含@
    2. 邮箱地址中含有多了@
    3. 邮箱地址中.出现在@的前面
    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);
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值