1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 移动应用开发之路 04 Android Studio 5种控件介绍 实战详解

移动应用开发之路 04 Android Studio 5种控件介绍 实战详解

时间:2018-12-17 20:28:13

相关推荐

移动应用开发之路 04 Android Studio 5种控件介绍 实战详解

学校开了一门移动应用开发课程,我一开始兴趣盎然,但是看到使用的环境是 Java 8 的时候心就凉了一半,在询问老师的意见之后决定使用现在比较常用的Android Studio完成学习,特此记录自学之路。

目录

1. 控件2. 通用属性2.1. 通用属性介绍2.2. 通用属性实例 3. TextView3.1. 属性介绍3.2. 实战演练3.2.1. 小说界面实例3.2.2. 单行跑马灯实例 4. EditText4.1. 属性介绍4.2. 登录界面 5. Button6. ImageView6.1. 属性介绍6.2. 实例 7. ProgressBar7.1. 属性介绍7.2. 实例

1. 控件

安卓的控件还是比较丰富的,有文本控件、图片控件、对话框、按钮、进度条等控件。上述控件在安卓中分别为:

TextViewImageViewEditViewButtonProgressBar

2. 通用属性

2.1. 通用属性介绍

一些通用属性整理

2.2. 通用属性实例

做一个用户登录界面,丑是丑了点,但是功能都用到了。

uiviews_test.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/bg"android:gravity="center_horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Sign Up"android:textSize="40sp"android:textColor="#dddddd"android:layout_marginTop="40dp"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="It's a love story\nBaby just say yes"android:textSize="24sp"android:textColor="#dddddd"android:gravity="center_horizontal"android:layout_marginTop="30dp"/><ImageViewandroid:layout_width="70dp"android:layout_height="70dp"android:src="@mipmap/ic_launcher"android:layout_margin="30dp"/><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="30dp"android:layout_marginRight="30dp"android:layout_marginTop="10dp"/><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="30dp"android:layout_marginRight="30dp"android:layout_marginTop="20dp"/><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="30dp"android:layout_marginRight="30dp"android:layout_marginTop="20dp"/><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="30dp"android:layout_marginRight="30dp"android:layout_marginTop="20dp"/><ImageButtonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Register"android:layout_marginLeft="30dp"android:layout_marginRight="30dp"android:layout_marginTop="30dp"android:src="@drawable/button"/></LinearLayout>

效果如下

3. TextView

3.1. 属性介绍

一些常用的属性

3.2. 实战演练

这边放两个实战演练,分别针对单行和多行文字的情况。

3.2.1. 小说界面实例

先创一个TextActivity.java

使用滚动条布局,显示之前存好的文字。

配置文件AndroidManifest.xml如下:

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="/apk/res/android"xmlns:tools="/tools"package="com.example.myapplication"><applicationandroid:allowBackup="true"android:dataExtractionRules="@xml/data_extraction_rules"android:fullBackupContent="@xml/backup_rules"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.MyApplication"tools:targetApi="31"><activityandroid:name=".MainActivity"android:exported="false" /><activityandroid:name=".TextActivity"android:exported="true"><intent-filter><!-- 启动界面 --><action android:name="android.intent.action.MAIN" /><!-- 在应用列表形成图标 --><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

activity_text.xml

<?xml version="1.0" encoding="utf-8"?><ScrollView xmlns:android="/apk/res/android"xmlns:app="/apk/res-auto"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".TextActivity"><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:text="@string/love_story"android:textSize="22sp"android:textColor="#222222"android:lineSpacingExtra="10sp"android:lineSpacingMultiplier="1.2"/></ScrollView>

效果如下:

关于滚动条布局,有一点需要注意。滚动条布局种不允许出现两个TextView,程序会崩溃。当然,如果你硬要加俩,那要在俩TextView外套一个其他布局。

3.2.2. 单行跑马灯实例

TextView也支持单行显示文字,我们在此演示单行显示love story,并用完成跑马灯效果。

activity_text2.xml

<?xml version="1.0" encoding="utf-8"?><ScrollView xmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><!-- android:ellipsize="marquee" 跑马灯效果--><!-- android:focusable="true"可以获取焦点--><!-- android:focusableInTouchMode="true"在碰触时也可以获取焦点--><!-- android:marqueeRepeatLimit="marquee_forever"一直执行跑马灯--><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:text="@string/love_story"android:textSize="22sp"android:textColor="#222222"android:singleLine="true"android:ellipsize="marquee"android:focusable="true"android:focusableInTouchMode="true"android:marqueeRepeatLimit="marquee_forever"android:paddingLeft="4dp"android:paddingRight="4dp"/></ScrollView>

效果如下:

4. EditText

4.1. 属性介绍

一些常用的属性

4.2. 登录界面

我们完成一个登录界面,用到输入框的多个属性。

uiviews_test.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/bg"android:gravity="center_horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Sign Up"android:textSize="40sp"android:textColor="#dddddd"android:layout_marginTop="40dp"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="It's a love story\nBaby just say yes"android:textSize="24sp"android:textColor="#dddddd"android:gravity="center"android:layout_marginTop="30dp"/><ImageViewandroid:layout_width="100dp"android:layout_height="100dp"android:src="@mipmap/ic_launcher"android:layout_margin="30dp"/><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="30dp"android:layout_marginRight="30dp"android:gravity="center"android:textColorHint="#000000"android:hint="User Name"android:textSize="20sp"android:inputType="text"/><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="30dp"android:layout_marginRight="30dp"android:layout_marginTop="20dp"android:hint="Email Address"android:textSize="20sp"android:gravity="center"android:textColorHint="#000000"android:inputType="numberSigned|numberDecimal"/><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="30dp"android:layout_marginRight="30dp"android:layout_marginTop="20dp"android:gravity="center"android:textColorHint="#000000"android:hint="Phone"android:textSize="20sp"android:inputType="phone"/><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="30dp"android:layout_marginRight="30dp"android:layout_marginTop="20dp"android:hint="Password"android:textSize="20sp"android:gravity="center_horizontal"android:textColorHint="#000000"android:inputType="textPassword"android:maxLength="15"/><ImageButtonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Register"android:layout_marginLeft="30dp"android:layout_marginRight="30dp"android:layout_marginTop="30dp"android:src="@drawable/button"/></LinearLayout>

效果如下:

5. Button

使用button控件时需要注册点击事件,一般有四种方式:

自定义内部类(java实现)匿名内部类当前Activity去实现事件接口在xml布局文件中添加点击事件属性

思想就是我们有这么一个接口,然后想要实现它,那要么就是自定义实现,要么在控件内实现,要么就是整个类直接调用接口;不然就只能在xml中实现了。直接说比较抽象,直接上代码。

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="/apk/res/android"xmlns:tools="/tools"package="com.example.myapplication"><applicationandroid:allowBackup="true"android:dataExtractionRules="@xml/data_extraction_rules"android:fullBackupContent="@xml/backup_rules"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.MyApplication"tools:targetApi="31"><activityandroid:name=".MainActivity"android:exported="false" /><activityandroid:name=".TextActivity"android:exported="false" /><activityandroid:name=".ButtonActivity"android:exported="true"><intent-filter><!-- 启动界面 --><action android:name="android.intent.action.MAIN" /><!-- 在应用列表形成图标 --><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

activity_button.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"xmlns:app="/apk/res-auto"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".ButtonActivity"><Buttonandroid:id="@+id/btn1"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="自定义内部类"/><Buttonandroid:id="@+id/btn2"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="匿名内部类"/><Buttonandroid:id="@+id/btn3"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Activity实现接口"/><Buttonandroid:id="@+id/btn4"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="xml文件绑定"android:onClick="btn4Click"/></LinearLayout>

ButtonActivity.java

package com.example.myapplication;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;public class ButtonActivity extends AppCompatActivity implements View.OnClickListener {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_button);// 根据id找到btn1Button btn1 = findViewById(R.id.btn1);//实例化点击事件MyClassListener mcl = new MyClassListener();// 点击触发事件btn1.setOnClickListener(mcl);Button btn2 = findViewById(R.id.btn2);// 2. 匿名类btn2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {// 在控制台输出语句Log.e("TAG","匿名类完成,挺方便的");}});Button btn3 = findViewById(R.id.btn3);btn3.setOnClickListener(this);}// 3. 直接在当前activity实现接口@Overridepublic void onClick(View view) {Log.e("TAG","用本类实现activity");}// 1. 自定义内部类class MyClassListener implements View.OnClickListener{@Overridepublic void onClick(View v){// 在控制台输出语句Log.e("TAG","自定义内部类完成,一般用于多个按钮功能相似的情况");}}// 4. xml绑定。方法一定是public,名字一定一样。// v代表的是被点击的控件对象,可以是按钮也可以是文本之类的。// 不用写setOnClickListener了public void btn4Click(View v){Log.e("TAG","xml绑定事件");}}

点击后输出结果如下:

6. ImageView

个人感觉图像的操作没啥,基本上就是放大缩小旋转,再高级的直接用PS去修改图片源就好了。

6.1. 属性介绍

这边提一嘴mipmap文件夹和drawable文件夹的区别和联系。

联系:两者都是用来存图片文件的。区别:mipmap其实也是一种技术,简单来说,图片放到mipmap文件夹中,缩放时不容易掉帧。个人建议直接放mipmap文件夹。

6.2. 实例

一般图片的一些操作都涉及到动画,不太适合演示给初学者,这边演示下前景与背景。其实没什么特别大的作用,就是来体验一下什么叫前景什么叫背景。

imageview_front_back.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@mipmap/bg"android:gravity="center_horizontal"><ImageButtonandroid:layout_width="wrap_content"android:layout_height="400dp"android:layout_margin="5dp"android:background="#ff0000"android:src="@mipmap/button"/></LinearLayout>

效果如下,丑是真的丑。

7. ProgressBar

7.1. 属性介绍

一些属性。

7.2. 实例

放了几种操作属性的实例,并完成了通过Java线程设置操纵进度条进度实例。

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="/apk/res/android"xmlns:tools="/tools"package="com.example.myapplication"><applicationandroid:allowBackup="true"android:dataExtractionRules="@xml/data_extraction_rules"android:fullBackupContent="@xml/backup_rules"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.MyApplication"tools:targetApi="31"><activityandroid:name=".MainActivity"android:exported="false" /><activityandroid:name=".ButtonActivity"android:exported="false" /><activityandroid:name=".TextActivity"android:exported="false" /><activityandroid:name=".ProgressBarActivity"android:exported="true"><intent-filter><!-- 启动界面 --><action android:name="android.intent.action.MAIN" /><!-- 在应用列表形成图标 --><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

activity_progress_bar.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"xmlns:app="/apk/res-auto"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".ProgressBarActivity"><ProgressBarandroid:layout_width="match_parent"android:layout_height="wrap_content"/><ProgressBarandroid:layout_width="match_parent"android:layout_height="wrap_content"style="?android:attr/progressBarStyleHorizontal"android:progress="30"android:max="60"/><ProgressBarandroid:layout_width="match_parent"android:layout_height="wrap_content"style="?android:attr/progressBarStyleHorizontal"android:indeterminate="true"/><ProgressBarandroid:id="@+id/progress"android:layout_width="match_parent"android:layout_height="wrap_content"style="?android:attr/progressBarStyleHorizontal" /></LinearLayout>

ProgressBarActivity.java

package com.example.myapplication;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.widget.ProgressBar;public class ProgressBarActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_progress_bar);ProgressBar progress = findViewById(R.id.progress);progress.setProgress(80);// 4.0的安卓版本之后是不能在线程中操控控件的,除了进度条new Thread() {public void run(){for (int i = 1; i <= 100; i++) {progress.setProgress(i);try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}}}}.start();}}

效果如下:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。