首先我们应该明确自己要实现的界面及相关功能;界面样式如下图所示:
我们可以看到,这里有一个新的知识点,就是最后面“请输入信息”那里的数据传输窗口;即EditText组件;
EditText组件:基本上是用户与Android应用程序之间数据传输的窗口,比如一个登陆界面,需要输入账号密码,然后获取用户输入的内容,并进行校对判断。EditText组件是TextView的子类,所以其大部分属性和TextView相同。
下面是我们这个编辑器的EditText的代码部分:`
<EditText
android:id="@+id/content"//定义文本框的id名
android:layout_width="wrap_content"//设置文本框的宽度
android:layout_height="wrap_content"//设置文本框的高度
android:hint="请输入信息"//设置显示信息
/>`
在文本编辑器中,我们依然采用嵌套式的布局方式;可以根据自己的需求进行设置;这里就不再赘述了;
在这里我们给每一行设置监听事件时采用不同的方法,如下图所示:
内部监听类:即在MainActivity.java文件中定义按钮,然后在创建监听器对象,然后并绑定监听器对象,并且在MainActivity.java文件中设置单击事件。
//定义按钮
private Button btnBlue = null;
private Button btnRed = null;//赋值为null后面可以直接引用的
private Button btnGreen = null;
//通过findViewById查找id,以便于后面的使用。
btnRed = (Button) findViewById(R.id.btnRed);
btnGreen = (Button) findViewById(R.id.btnGreen);
btnBlue = (Button) findViewById(R.id.btnBlue);
//创建监听器对象:
ColorListener myColorListener = new ColorListener();//颜色的监听器对象
//绑定监听器:
btnRed.setOnClickListener(myColorListener);
btnGreen.setOnClickListener(myColorListener);
btnBlue.setOnClickListener(myColorListener);
//内部类形式定义改变颜色监听事件,监听按钮上的单击事件
public class ColorListener implements View.OnClickListener{//声明监视器类
public void onClick(View v) {//v即是事件源;重写onClick方法,中进行颜色改变
// if(v.getId()== R.id.btnRed){
// test.setTextColor(Color.RED);//调用test.steTextColor方法进行颜色更改;设置返回颜色为红色
// }
// if (v.getId() == R.id.btnGreen){
// test.setTextColor(Color.GREEN);
// }
// if (v.getId() == R.id.btnBlue){
// test.setTextColor(Color.BLUE);
// }
//简化代码:
switch (v.getId()){
case R.id.btnRed:
test.setTextColor(Color.RED);
break;
case R.id.btnGreen:
test.setTextColor(Color.GREEN);
break;
case R.id.btnBlue:
test.setTextColor(Color.BLUE);
break;
default:
break;
}
}
}
第二行为外部类形式:
在MainActivity.java文件中定义按钮,找到id,并且创建监听器,绑定监听器,但是在与MainActivity.java文件平行的文件SizeListener.java文件中设置单击事件。
//定义按钮:
private Button btnBig = null;
private Button btnSmall = null;
private Button btnDefault1 = null;
//通过findviewbyid查找id
btnBig = (Button) findViewById(R.id.btnBig);
btnSmall =(Button) findViewById(R.id.btnSmall);
btnDefault1 =(Button)findViewById(R.id.btnDefault1);
//创建监视器对象
SizeListener mySizeListener = new SizeListener(test);
//绑定监视器对象
btnBig.setOnClickListener(mySizeListener);
btnSmall.setOnClickListener(mySizeListener);
btnDefault1.setOnClickListener(mySizeListener);
//在SizeListener.java中设置单击事件。
package com.example.third;
import android.graphics.Typeface;
import android.util.TypedValue;
import android.view.View;
import android.widget.TextView;
public class SizeListener implements View.OnClickListener {
private TextView test =null;
public SizeListener(TextView tv){
test = tv;
}
public void onClick(View v){///重定义onClick方法
float size = test.getTextSize();
System.out.println(size);
switch (v.getId()){//检测ID并进行操作
case R.id.btnBig:
size = size+2;
break;
case R.id.btnSmall:
size = size-2;
break;
case R.id.btnDefault1://默认则不变;恢复初始大小
size = 30;
}
test.setTextSize(TypedValue.COMPLEX_UNIT_PX,size);
}
}
在这里需要注意一下:
getTextSize返回值是以像素(px)为单位的,而setTextSize()是以sp为单位的,两者单位不一致才造成这样的结果。
这里可以用setTextSize()的另外一种形式,可以指定单位:
setTextSize(int unit, int size)
TypedValue.COMPLEX_UNIT_PX : Pixels
TypedValue.COMPLEX_UNIT_SP : Scaled Pixels
TypedValue.COMPLEX_UNIT_DIP : Device Independent Pixels
第三行则是类自身作为时间监听器:
将MainActivity类定义为:(不建议对MainActivity类进行别的定义;它一般只用于用户界面显示和功能定义)
public class MainActivity extends AppCompatActivity implements View.OnClickListener
//绑定监听器:
btnBold.setOnClickListener(this);//将MainActivity对象作为监视器对象绑定
btnTilt.setOnClickListener(this);
btnDefault2.setOnClickListener(this);
//设置单击事件:
// 用0表示默认字体;1表示斜体;2表示粗体;3表示粗斜体
// 在Typeface中,定义了常用的字体类型和字体样式:
// 字体类型
// Typeface.DEFAULT:默认字体,常规字体类型
// Typeface.DEFAULT_BOLD:黑体字体类型
// Typeface.MONOSPACE:等宽字体类型
// Typeface.SANS_SERIF:sans serif字体类型
// 字体样式
// Typeface.BOLD //粗体
// Typeface.BOLD_ITALIC //粗斜体
// Typeface.ITALIC //斜体
// Typeface.NORMAL //常规
public void onClick(View v){//点击之后的逻辑上的处理
Typeface tf = test.getTypeface();
switch (v.getId()){
case R.id.btnBold:
if(flag==1||flag==3){
test.setTypeface(Typeface.MONOSPACE,Typeface.BOLD_ITALIC);
flag = 3;
}else {
test.setTypeface(Typeface.MONOSPACE,Typeface.BOLD);
flag = 2;
}
break;
case R.id.btnTilt:
if (flag==2||flag==3){
test.setTypeface(Typeface.MONOSPACE,Typeface.BOLD_ITALIC);
flag = 3;
}else {
test.setTypeface(Typeface.MONOSPACE,Typeface.ITALIC);
flag = 1;
}
break;
case R.id.btnDefault2: {
test.setTypeface(Typeface.MONOSPACE, Typeface.NORMAL);
flag = 0;
break;
}
}
}//包含定义类和方法
第四行的内部匿名类:
//定义EditText content
private EditText content = null;
//查找id
content = (EditText)findViewById(R.id.content);
//创建,绑定监听器及设置单击事件;
content.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
test.setText(content.getText().toString());//调用getText方法,并改称成字符串,在最上面的测试框显示
content.setText("");
return false;
}
});
到此,我们的简单文本编辑器就做好了;我们下个笔记再会吧。