Android中最简单,最常见的一个控件TextView,用来显示文本信息。今天从这个控件来说起,谈谈Android中控件显示方式相关的内容。
一、Android中有两种方法可以显示一个控件。
1、直接在Activity类代码中创建并显示,这个和J2SE中Swing组建的用法是一样的。
TextView tv = new TextView(this);
tv.setText("http://blog.csdn.net/xn4545945");
setContentView(tv);
setContentView(R.layout.main);
// 通过SpannableStringBuilder类来给字符串设置颜色样式。
String str = "xn4545945的技术博客!";
SpannableStringBuilder s = new SpannableStringBuilder(str);
s.setSpan(new ForegroundColorSpan(Color.RED), 0, 9,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
s.setSpan(new ForegroundColorSpan(Color.CYAN), 9, 14,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
s.setSpan(new ForegroundColorSpan(Color.GRAY), 14, 15,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
tv1.setText(s);
在src/res/layout/中有个main.xml文件,setContentView(R.layout.main)中的R.layout.main就是指的这个main.xml文件。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<!-- 用来设置部分颜色 -->
<TextView
android:id="@+id/xn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/xn" />
<!-- 用来设置跑马灯效果 -->
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"
android:text="@string/marquee" />
</LinearLayout>
注意,虽然两种方法都能创建并显示、设置并显示控件,但是我们可以看到,默认新建一个Activity的时候,就有如下代码
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
可见,Android推荐的是用xml布局文件来创建并显示控件。
这种方法和第一种方法相比优点很多。其中最重要的就是实现了视图与代码分离,使美工人员可以专心xml文件的布局,使编写逻辑控制部分的人员可以专心编写,而不必担心控件是如何显示的。他不像第一种方法那样,将用于显示控件的代码与用于控制操作的代码混在一起。这其实和MVC设计模式中分层的思想是一样的。如果学习过Flex的同学也许会觉得很熟悉,Flex中的spark组件的出现就是为了实现创建控件的代码与设置控件样式的代码分离,使其更加灵活,方便操作。
需要提醒一下的是setContentView(...)只能出现一次,以最后一次出现的为准。也就是说,当你第二次调用这个方法的时候,他就会将第一次调用的结果给覆盖掉,这样Activity中就只显示第二次设置的控件。
二、任意设置控件的样式
可能你需要将一个控件设置成五边形,十边形,但是在布局文件的属性里面又没有找到进行这样设置的方法。
其是Android提供了一种更灵活的设置属性---android:background=""
这种方法也是通过指定一个xml文件,来对控件的样式进行设置。
下面提供一个简单的例子:<EditText
android:id="@+id/et1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="hahahaahahahhahah"
android:maxLength="4"
android:drawableLeft="@drawable/log"
android:background="@drawable/shape"/><!--引用任意drawable文件夹下的shape.xml-->
shape.xml
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#FF00FF"/><!-- 设置颜色 -->
<corners android:radius="14dip"/><!-- 设置弧度 -->
</shape>
转载请注明出处 http://blog.csdn.net/xn4545945
个人微博:http://weibo.com/xuneng007