UI组件属性介绍
最常见的是layout_width 和 layout_height:
值为 wrap_content 是指包裹所有字就好,根据文字多少而定 其他组件可以修改宽和高
修改方式:
android:width=“100dp”
android:height=“100dp”
值为 fill_parent 表示与父窗口一样大 设置这个以后,其他的属性不能修改宽和高
还有其他的代码以及意思:
代码 | 作用 |
---|---|
android:ems | 设置每行的汉字个数,2代表2个汉字,即四个字符 |
android:background | 设置背景颜色,如:"@android:color/holo_blue_bright" |
android:gravity | 设置文本位置,如设置成center文本将居中显示 |
android:textSize | 字体大小,如:“40sp” |
android:textColor | 字体颜色,如:"#00ff00" |
android:lines | 控制行数 |
android:singleLine="true" | 显示为单行,多出来的字母不显示,用。。。代替 |
如果我们要使某行文字产生走马灯的滚动效果,可以用如下代码:
<TextView
android:id="@+id/textView2"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_marginStart="152dp"
android:layout_marginLeft="152dp"
android:layout_marginTop="308dp"
android:background="@android:color/holo_blue_bright"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"
android:text="12345678901234567890"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
注:这段文字必须设置为单行,然后当字数超过显示的上限时就会出现走马灯效果。(在获取焦点时)
UI组件的应用
ImageView的应用(插入图片)
imageView 是一个可以显示图片的 View组件。
而实现方法也非常简单,找到该组件并且拖动到合适的位置即可。
我们要把放入的图片提前存入res下的drawable文件夹,然后拖动以后,在 android:src=""
中指定我们需要显示的图片。
如下图所示
这时,我们运行已经可以看到我们要的图片显示到指定的位置了。
下面我们用代码实现:点击图片左右两边来实现图片的切换吧!
public class MainActivity extends AppCompatActivity {
private int[] a=new int[]{R.drawable.a1,R.drawable.a2,R.drawable.a3
};
private int count=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ImageView imageView =findViewById(R.id.imageView);
final int width=this.getWindowManager().getDefaultDisplay().getWidth();
//这个点击事件不能确定点击的位置,所以换一个点击事件
// imageView.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// ImageView view =(ImageView)v;
// if(count==3){
// count=0;
// }
// view.setImageResource(a[count++]);
//
// }
// });
imageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int x=(int) event.getX();
ImageView view =(ImageView)v;
if(x>=(width/2)){
if(count==2){
count=-1;
}
view.setImageResource(a[++count]);
}else{
if(count==0){
count=3;
}
view.setImageResource(a[--count]);
}
return false;
}
});
}
}
如果要实现点击图片左边切换上一张,点击右边切换下一张
首先要获得点击的x坐标
然后是获得屏幕的宽度,通过比较来确定到底是该切换上一张还是下一张。
注释中的代码由于获取不到点击位置,所以不管点击哪里都会切换下一张,而更换setOnTouchListener以后,我们便能获取到点击的位置了。(在前几讲中提到过)
EditText的应用(插入文本框)
依然是直接找到需要的文本框进行拖动。
Plain Text 和 Password 都是常用的输入框,大家各取所需即可。
文章开头的很多属性在这里都可以用到。
例如:
输入文字长度的限制
设置ems=“10” 也就是显示长度为10时,超过数量会自动换行。
但是添加singleLine=“true” 后,达到宽度后会自动向后滚动。
当我们定义maxLength=“10” 后,输入字符最多为10个。
输入文字提示的设置
当我们定义android:hint=“请输入数字” 后,文本框为空将自动提示后面的话。
当我们定义android:textColorHint="#ff0000" 我们可以对提示信息的颜色进行修改。
输入文字内容的限制1
不仅如此,我们还能对输入的内容进行限制。
android:digits=“1234.±” 表示只允许我们输入引号中的内容。
android:numeric=“signed” 表示只允许输入数字,后面的参数有三个可供选择,integer只允许输入正整数、signed可以放入负数、decimal表示可以输入小数。
输入文字内容的限制2
刚才的简单代码只能实现一些简单的内容限制,如果我们需要更加精细的限制,还需要通过一些监听器来实现:
EditText editText2=findViewById(R.id.editText2);
editText2.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
String string=s.toString();
if(string.indexOf("4")!=-1){
s.clear();
Toast.makeText(getApplicationContext(),"不能输入4",Toast.LENGTH_SHORT).show();
}
}
});
生成了三个方法,分别表示在修改文本之前,修改时,修改后。
上述代码是指通过监视器判断是否出现了4,如果出现4,我们就清空输入的内容,并且弹出提示:不能输入4。
当然,在这里我们的clear方法是清空输入,也可以用delete方法删除固定的几个。
输入文字内容的限制3
下面我们介绍更简单更友好的过滤器方式:
EditText editText1=findViewById(R.id.editText3);
editText1.setFilters(new InputFilter[]{
//InputFilter.LengthFilter等同于 maxlength 对长度进行控制
new InputFilter.LengthFilter(5),
//把所有小写字母变成大写
new InputFilter.AllCaps(),
//自己定义
new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
if("1".equals(source.toString())){
return "一";
}else if("2".equals(source.toString())){
return "二";
}else
return null;
}
}
});
过滤器中可以用系统提供的方法,例如:限制长度、控制大小写。我们也可以自己定义,上面的代码部分写的比较清楚。source表示刚输入的参数。
获取焦点问题
正常情况下,系统默认第一个组件获取焦点,但我们也可以通过代码让某个子元素优先自动获得焦点:
可以输入<requestFocus />
如下图所示:
<EditText
android:id="@+id/editText2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="96dp"
android:layout_marginLeft="96dp"
android:layout_marginTop="72dp"
android:ems="10"
android:inputType="textPassword"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editText">
<requestFocus />
</EditText>
好了,对于文字图片的插入方式以及各种有用的小限制就说这么多了。
看到这里啦,别忘了点个赞呐!!!
参考自:尚学堂课