<LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”
android:id=“@+id/ll_view”
android:layout_width=“match_parent”
android:layout_height=“match_parent”
android:background=“@color/color_666666”
android:orientation=“vertical”>
<TextView
android:id=“@+id/tv_xml”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_gravity=“center”
android:layout_marginTop=“@dimen/dimen_20”
android:background=“@color/color_188FFF”
android:padding=“@dimen/dimen_10”
android:text=“XML设置TextView”
android:textColor=“@color/white”
android:textSize=“@dimen/text_size_18” />
<Button
android:id=“@+id/btn_xml”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:layout_gravity=“center”
android:layout_marginTop=“@dimen/dimen_20”
android:background=“@color/color_188FFF”
android:padding=“@dimen/dimen_10”
android:text=“按钮”
android:textColor=“@color/white”
android:textSize=“@dimen/text_size_18” />
2.加载布局文件、关联控件
如果要使用上面的XML布局文件(activity_view.xml),通常需要在onCreate方法中使用setContentView方法指定XML布局文件的资源lD,并获取在activity_view.xml文件中定义的某个View,代码如下:
public class ViewActivity extends AppCompatActivity{
private Button btnXml;
private TextView tvXml;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//加载布局文件
setContentView(R.layout.activity_view);
//如果想获得在activity_view.xml文件中定义的某个View
//关联控件:R.id.tv_xml是tvXml的ID,确保这个ID在R.layout.activity_view中
tvXml = findViewById(R.id.tv_xml);
//关联控件:R.id.btn_xml是btnXml的ID,确保这个ID在R.layout.activity_view中
btnXml = findViewById(R.id.btn_xml);
}
}
3.在获得XML布局文件中的视图对象时需要注意下面几点:
-
先使用setContentView方法装载XML布局文件,再使用findViewByld方法,否则findViewByld方法会由于未找到控件而产生空指针异常,导致应用崩溃。
-
虽然所有的XML布局文件中的视图ID都在R.id类中生成了相应的变量,但使用findViewByld方法只能获得已经装载的XML布局文件中的视图对象。
-
例,activity_view.xml中TextView的对应R.id.tv_xml;
-
其他XML文件中有TextView的R.id.tv_shuaiciid,tv_shuaici不在activity_view.xml中如果使用 tvXml = findViewById(R.id.tv_shuaici);
-
结果应用崩溃。原因:在activity_view.xml中找不到ID为tv_shuaici的视图对象。
4.用代码控制视图
虽然使用XML布局文件可以非常方便地对控件进行布局,但若想控制这些控件的行为,仍然需要编写Java代码。在上面介绍了使用findViewByld方法获得指定的视图对象,当获得视图对象后,就可以使用代码来控制这些视图对象了。例如,下面的代码获得了一个TextView对象,并修改了TextView的文本。
TextView tvXml = findViewById(R.id.tv_xml);
//直接使用字符串来修改TextView的文本
tvXml.setText(“帅次”);
//使用字符串资源(res/values/strings.xml)
//其中R.string.str_tv_shuaici是字符串资源ID,系统会使用这个ID对应的字符串设置TextView的文本。
tvXml.setText(R.string.str_tv_shuaici);
「选择其中一样即可」,如果同时设置,最后一次设置为最终结果。
使用代码的方式来创建View对象
在更高级的Android应用中,往往需要动态添加视图。要实现这个功能,最重要的是获得当前的视图容器对象,这个容器对象所对应的类需要继承ViewGroup类。 将其他的视图添加到当前的容器视图中需要如下几步:
-
第1步,获得当前的容器视图对象;
-
第2步,获得或创建待添加的视图对象;
-
第3步,将相应的视图对象添加到容器视图中。
实例
–
1.获得当前的容器视图对象
//1、获取activity_view.xml中LinearLayout对象
//2、也可以给LinearLayout添加@+id/,然后通过findViewById关联控件也能获取LinearLayout对象
LinearLayout linearLayout =
(LinearLayout)getLayoutInflater().inflate(R.layout.activity_view,null);
//加载布局文件
setContentView(linearLayout);
2.获得或创建待添加的视图对象
EditText editText = new EditText(this);
editText.setHi 《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》无偿开源 徽信搜索公众号【编程进阶路】 nt(“请输入内容”);
3.将相应的视图对象添加到容器视图中
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//1、获取activity_view.xml中LinearLayout对象
//2、也可以给LinearLayout添加@+id/,然后通过findViewById关联控件也能获取LinearLayout对象
LinearLayout linearLayout =
(LinearLayout)getLayoutInflater().inflate(R.layout.activity_view,null);
//加载布局文件
setContentView(linearLayout);
EditText editText = new EditText(this);
editText.setHint(“请输入内容”);
linearLayout.addView(editText);
}
效果图如下:
总结
–
-
实际上不管使用那种方式,他们创建Android用户界面行为的本质是完全一样的。大部分时候,设置UI组件的XML属性还有对应的方法。
-
对于View类而言,它是所有UI组件的基类,因此它包含的XML属性和方法是所有组件都可以使用的。
自定义View
=======
为什么要自定义View
Android系统提供了一系列的原生控件,但这些原生控件并不能够满足我们的需求时,我们就需要自定义View了。
自定义View的基本方法