icp网站建设,通辽网站建设公司,基金会网站建设,wordpress注册界面修改密码本章介绍了App开发常见的几类简单控件的用法#xff0c;主要包括#xff1a;显示文字的文本视图、容纳视图的常用布局、响应点击的按钮控件、显示图片的图像视图等。然后结合本章所涉及的知识#xff0c;完成一个实战项目“简单计算器”的设计与实现。 1.1 文本显示 本节介绍… 本章介绍了App开发常见的几类简单控件的用法主要包括显示文字的文本视图、容纳视图的常用布局、响应点击的按钮控件、显示图片的图像视图等。然后结合本章所涉及的知识完成一个实战项目“简单计算器”的设计与实现。 1.1 文本显示 本节介绍了如何在文本视图TextView上显示规定的文本包括怎样在XML文件和Java代码中设置文本内容尺寸的大小有哪些单位、又该怎样设置文本的大小颜色的色值是如何表达的、又该怎样设置文本的颜色。 1.1.1 设置文本的内容
在专栏文章的Android App开发基础3——App的设计规范 “ 3.3 使用Java代码书写程序逻辑”小节给出了设置文本内容的两种方式一种是在XML文件中通过属性android:text设置文本比如下面这样
TextViewandroid:idid/tv_helloandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text你好世界 /另一种是在Java代码中调用文本视图对象的setText方法设置文本比如下面这样
public class MainActivity extends AppCompatActivity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView tv_hello findViewById(R.id.tv_hello);tv_hello.setText(你好世界);}
}
在XML文件中设置文本的话把鼠标移到“你好世界”上方时Android Studio会弹出如图所示的提示框。 看到提示内容为“Hardcoded string “你好世界”, should use string resouce”意思说这几个字是硬编码的字符串建议使用来自string的资源。原来Android Studio不推荐在XML布局文件里直接写字符串因为可能有好几个页面都显示“你好世界”若想把这句话换成“你吃饭了吗”就得一个一个XML文件改过去无疑费时费力。故而Android Studio推荐把字符串放到专门的地方管理这个名为string的地方位于res/values目录下的strings.xml打开该文件发现它的初始内容如下所示
resourcesstring nameapp_nameSimpleControls/string
/resources看来strings.xml定义了一个名为“app_name”的字符串常量其值为“SimpleControls”。那么在此添加新的字符串定义字符串名为“hello_world”字符串值为“你好世界”添加之后的strings.xml内容如下所示:
resourcesstring nameapp_nameSimpleControls/stringstring namehello_world你好世界/string
/resources添加完新的字符串定义回到XML布局文件将android:text属性值改为“string/字符串名”这般也就是“string/hello”修改之后的TextView标签示例如下:
TextViewandroid:idid/tv_helloandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:textstring/hello_world/然后把鼠标移到“你好世界”上方此时Android Studio不再弹出任何提示了。 若要在Java代码中引用字符串资源则调用setText方法时填写形如“R.string.字符串名”的参数就本例而言填入“R.string.hello_world”修改之后的Java代码示例如下
// 获取名为tv_hello的文本视图
TextView tv_hello findViewById(R.id.tv_hello);
tv_hello.setText(R.string.hello_world); // 设置tv_hello的文字内容至此不管XML文件还是Java代码都从strings.xml引用字符串资源以后想把“你好世界”改为其他文字的话只需改动strings.xml一个地方即可。
1.1.2 设置文本的大小
TextView允许设置文本内容也允许设置文本大小在Java代码中调用setTextSize方法即可指定文本大小就像以下代码这样
// 从布局文件中获取名叫tv_sp的文本视图
TextView tv_sp findViewById(R.id.tv_sp);
tv_sp.setTextSize(30); // 设置tv_sp的文本大小这里的大小数值越大则看到的文本也越大大小数值越小则看到的文本也越小。在XML文件中则通过属性android:textSize指定文本大小可是如果给TextView标签添加“android:textSize“30””数字马上变成红色如图所示鼠标移过去还会提示错误“Cannot resolve symbol ‘30’”意思是无法解析“30”这个符号。 在Android studio中文本大小存在不同的字号单位XML文件要求在字号数字后面写明单位类型常见的字号单位主要有px、dp、sp 3种分别介绍如下。
1px px是手机屏幕的最小显示单位它与设备的显示屏有关。一般来说同样尺寸的屏幕比如6英寸手机如果看起来越清晰则表示像素密度越高以px计量的分辨率也越大。
2dp dp有时也写作dip指的是与设备无关的显示单位它只与屏幕的尺寸有关。一般来说同样尺寸的屏幕以dp计量的分辨率是相同的比如同样是6英寸手机无论它由哪个厂家生产其分辨率换算成dp单位都是一个大小。
3sp sp的原理跟dp差不多但它专门用来设置字体大小。手机在系统设置里可以调整字体的大小小、标准、大、超大。设置普通字体时同数值dp和sp的文字看起来一样大如果设置为大字体用dp设置的文字没有变化用sp设置的文字就变大了。
字体大小采用不同单位的话显示的文字大小各不相同。例如30px、30dp、30sp这3个字号在不同手机上的显示大小有所差异。有的手机像素密度较低一个dp相当于两个px此时30px等同于15dp有的手机像素密度较高一个dp相当于3个px此时30px等同于10dp。假设某个App的内部文本使用字号30px则该App安装到前一部手机的字体大小为15dp安装到后一部手机的字体大小为10dp显然后一部手机显示的文本会更小。
既然XML文件要求android:textSize必须指定字号单位为什么Java代码调用setTextSize只填数字不填单位呢其实查看SDK源码找到setTextSize方法的实现代码如下所示
public void setTextSize(float size) {setTextSize(TypedValue.COMPLEX_UNIT_SP, size);
}原来纯数字的setTextSize方法内部默认字号单位为spCOMPLEX_UNIT_SP这也从侧面印证了之前的说法sp才是Android推荐的字号单位。 1.1.3 设置文本的颜色
除了设置文字大小文字颜色也经常需要修改毕竟Android默认的灰色文字不够醒目。在Java代码中调用setTextColor方法即可设置文本颜色具体在Color类中定义了12种颜色详细的取值说明见下表:
比如以下代码便将文本视图的文字颜色改成了绿色
// 从布局文件中获取名叫tv_color的文本视图
TextView textViewfindViewById(R.id.tv_color);
// 将tv_color的文字颜色设置系统自带的绿色
textView.setTextColor(Color.GREEN);但是XML文件无法引用Color类的颜色常量为此Android制定了一套规范的编码标准将色值交由透明度alpha和RGB三原色红色red、绿色green、蓝色blue联合定义。该标准又有八位十六进制数与六位十六进制数两种表达方式例如八位编码FFEEDDCC中FF表示透明度EE表示红色的浓度DD表示绿色的浓度CC表示蓝色的浓度。透明度为FF表示完全不透明为00表示完全透明。RGB三色的数值越大表示颜色越浓也就越暗数值越小表示颜色越淡也就越亮。RGB亮到极致就是白色暗到极致就是黑色。
至于六位十六进制编码则有两种情况它在XML文件中默认不透明等价于透明度为FF而在代码中默认透明等价于透明度为00。以下代码给两个文本视图分别设置六位色值与八位色值注意添加0x前缀表示十六进制数
// Java中设置颜色
TextView tvColorEight findViewById(R.id.tv_color_eight);
// 文字颜色设置为不透明的绿色即正常的绿色
tvColorEight.setTextColor(0xff00ff00);
TextView tvColorSix findViewById(R.id.tv_color_six);
// 文字颜色设置为透明的绿色即看不见
tvColorSix.setTextColor(0x00ff00);XML中的布局代码 TextViewandroid:idid/tv_color_eightandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text不透明的绿色android:textSize16sp /TextViewandroid:idid/tv_color_sixandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text透明的绿色android:textSize16sp / 效果如图
XML中的布局代码 TextViewandroid:idid/tv_color_eightandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text不透明的绿色android:textSize16sp /TextViewandroid:idid/tv_color_sixandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text透明的绿色android:textSize16sp / 效果如图 运行测试App发现tv_color_six控件的文本不见了其实是变透明了而tv_color_eight控件的文本显示正常的绿色。
在XML文件中可通过属性android:textColor设置文字颜色但要给色值添加井号前缀“#”设定好文本颜色的TextView标签示例如下 TextViewandroid:idid/tv_color_sixandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text代码设置六位颜色android:textSize16spandroid:textColor#00ff00/就像字符串资源那样Android把颜色也当作一种资源打开res/values目录下的colors.xml发现里面已经定义了3种颜色 resourcescolor namecolorPrimary#008577/colorcolor namecolorPrimaryDark#00574B/colorcolor namecolorAccent#D81B60/color/resources那么先在resources节点内部补充如下的绿色常量定义 color namegreen#00ff00/color然后回到XML布局文件把android:textColor的属性值改为“color/颜色名称”也就是android:textColor“color/green”修改之后的标签TextView如下所示 TextViewandroid:idid/tv_valuesandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text代码设置六位文字颜色android:textColorcolor/greenandroid:textSize16sp /不仅文字颜色还有背景颜色也会用到上述的色值定义在XML文件中通过属性android:background设置控件的背景颜色。Java代码则有两种方式设置背景颜色倘若色值来源于Color类或十六进制数则调用setBackgroundColor方法设置背景倘若色值来源于colors.xml中的颜色资源则调用setBackgroundResource方法以“R.color.颜色名称”的格式设置背景。下面是两种方式的背景设定代码示例
// 从布局文件中获取名叫tv_color_background的文本视图
TextView tv_color_background findViewById(R.id.tv_color_background);
// 将tv_color_background的背景颜色设置为绿色
tv_color_background.setBackgroundColor(Color.GREEN); // 在代码中定义的色值
tv_color_background.setBackgroundResource(R.color.green); // 颜色来源于资源文件注意: 属性android:background和setBackgroundResource方法它俩用来设置控件的背景不单单是背景颜色还包括背景图片。在设置背景图片之前先将图片文件放到res/drawable目录以drawable开头的目录不仅仅是drawable目录然后把android:background的属性值改为“drawable/不含扩展名的图片名称”或者调用setBackgroundResource方法填入“R.drawable.不含扩展名的图片名称”。 本笔记参考于[B站动脑学院]仅作学习用途方便随时查看。 参考资料2022 最新 Android基础教程从开发入门到项目实战看它就够了