当前位置:首页 » 安卓系统 » android自定义视图

android自定义视图

发布时间: 2022-08-01 04:48:06

A. android的自定义View的实现原理哪位能给我个思路呢。谢谢。

如果说要按类型来划分的话,自定义View的实现方式大概可以分为三种,自绘控件、组合控件、以及继承控件。那么下面我们就来依次学习一下,每种方式分别是如何自定义View的。

一、自绘控件

自绘控件的意思就是,这个View上所展现的内容全部都是我们自己绘制出来的。绘制的代码是写在onDraw()方法中的,而这部分内容我们已经在Android视图绘制流程完全解析,带你一步步深入了解View(二)中学习过了。

下面我们准备来自定义一个计数器View,这个View可以响应用户的点击事件,并自动记录一共点击了多少次。新建一个CounterView继承自View,代码如下所示:

<?xmlversion="1.0"encoding="utf-8"?>
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="#ffcb05">

<Button
android:id="@+id/button_left"
android:layout_width="60dp"
android:layout_height="40dp"
android:layout_centerVertical="true"
android:layout_marginLeft="5dp"
android:background="@drawable/back_button"
android:text="Back"
android:textColor="#fff"/>

<TextView
android:id="@+id/title_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="ThisisTitle"
android:textColor="#fff"
android:textSize="20sp"/>

</RelativeLayout>

在这个布局文件中,我们首先定义了一个RelativeLayout作为背景布局,然后在这个布局里定义了一个Button和一个TextView,Button就是标题栏中的返回按钮,TextView就是标题栏中的显示的文字。

接下来创建一个TitleView继承自FrameLayout,代码如下所示:

{

privateButtonleftButton;

privateTextViewtitleText;

publicTitleView(Contextcontext,AttributeSetattrs){
super(context,attrs);
LayoutInflater.from(context).inflate(R.layout.title,this);
titleText=(TextView)findViewById(R.id.title_text);
leftButton=(Button)findViewById(R.id.button_left);
leftButton.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
((Activity)getContext()).finish();
}
});
}

publicvoidsetTitleText(Stringtext){
titleText.setText(text);
}

publicvoidsetLeftButtonText(Stringtext){
leftButton.setText(text);
}

(OnClickListenerl){
leftButton.setOnClickListener(l);
}

}

TitleView中的代码非常简单,在TitleView的构建方法中,我们调用了LayoutInflater的inflate()方法来加载刚刚定义的title.xml布局,这部分内容我们已经在Android LayoutInflater原理分析,带你一步步深入了解View(一)这篇文章中学习过了。

接下来调用findViewById()方法获取到了返回按钮的实例,然后在它的onClick事件中调用finish()方法来关闭当前的Activity,也就相当于实现返回功能了。

另外,为了让TitleView有更强地扩展性,我们还提供了setTitleText()、setLeftButtonText()、setLeftButtonListener()等方法,分别用于设置标题栏上的文字、返回按钮上的文字、以及返回按钮的点击事件。

到了这里,一个自定义的标题栏就完成了,那么下面又到了如何引用这个自定义View的部分,其实方法基本都是相同的,在布局文件中添加如下代码:

<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">

<com.example.customview.TitleView
android:id="@+id/title_view"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</com.example.customview.TitleView>

</RelativeLayout>

这样就成功将一个标题栏控件引入到布局文件中了,运行一下程序。

现在点击一下Back按钮,就可以关闭当前的Activity了。如果你想要修改标题栏上显示的内容,或者返回按钮的默认事件,只需要在Activity中通过findViewById()方法得到TitleView的实例,然后调用setTitleText()、setLeftButtonText()、setLeftButtonListener()等方法进行设置就OK了。

B. android自定义view要怎么使用

视图,凡事能被用户看到的小控件都是一种view,也可以自定义view

C. Android问题:自定义视图的时候,onMeasure()这个方法有什么用

描述View本身大小的多少!

自定义View的时候重载onMeasure(),onLayout(),onDraw()三个函数构建了自定义View的外观形象。再加上onTouchEvent()等重载视图的行为,可以构建任何我们需要的可感知到的自定义View。

我们知道,不管是自定义View还是系统提供的TextView这些,它们都必须放置在LinearLayout等一些ViewGroup中,因此理论上我们可以很好的理解onMeasure(),onLayout(),onDraw()这三个函数:1.View本身大小多少,这由onMeasure()决定;2.View在ViewGroup中的位置如何,这由onLayout()决定;3.绘制View,onDraw()定义了如何绘制这个View。

D. 如何使用Android自定义复合视图

Android框架提供了很多的视图和布局,但有些情况下开发者需要创建自己的视图。有时候是扩展内置的类来增加功能,就像在文本框中支持自定义字体和字符间距。其他情况下,因为内置的视图不能提供所需的功能,就像径向刻度盘。
现在讨论的是自定义复合视图。视图由多个其他的视图组成,内置的或自定义的都可以,用来封装复杂的交互和功能。
在一个成熟且完整的Fragment完全满足我需求的情况下,我使用了复合视图,因为我想要一个可重用、可测试的组件。上面的例子很好的说明了这种情况。由于代码属于一个客户项目,所以我在这里创建了一个简单的项目展示如何创建和使用自定义视图。

E. android中的View是做什么的

View类是Android的一个超类,这个类几乎包含了所有的屏幕类型。每一个View都有一个用于绘图的画布,这个画布可以进行任意扩展。在游戏开发中叶可以自定义视图(View),这个画布的功能更能满足我们在游戏开发中的需要。在Android中,任何一个View类都只需重写onDraw 方法来实现界面显示,自定义的视图可以是复杂的3D实现,也可以是非常简单的文本形式等。

F. 如何将Android视图和自定义视图融合在一起

第二种中,中间的先只加外框,再通过line_panel获取,再用第一种方式在程序中添加你的lineview呢?

G. android 自定义view 的高度,宽度怎么设置

Android中View是显示控件,需要用一个layout布局来装载,layout尺寸大写的设置如下:
1. 尽量使用wrap_content、match_parent、weight 来规定layout的大小。
2. 要确保布局的灵活性并适应各种尺寸的屏幕,应使用 “wrap_content” 和 “match_parent” 控制某些视图组件的宽度和高度。
3. 使用 “wrap_content”,系统就会将视图的宽度或高度设置成所需的最小尺寸以适应视图中的内容,而 “match_parent”(在低于 API 级别 8 的级别中称为“fill_parent”)则会展开组件以匹配其父视图的尺寸。
4. 如果使用 “wrap_content” 和 “match_parent” 尺寸值而不是硬编码的尺寸,视图就会相应地仅使用自身所需的空间或展开以填满可用空间。此方法可让布局正确适应各种屏幕尺寸和屏幕方向。
5. 如果某些地方必须要规定控件的大小,那么要使用dp 或者 dip单位。

H. 什么是Android自定义视图

Android框架提供了很多的视图和布局,但有些情况下开发者需要创建自己的视图。有时候是扩展内置的类来增加功能,就像在文本框中支持自定义字体和字符间距。其他情况下,因为内置的视图不能提供所需的功能,就像径向刻度盘。
现在讨论的是自定义复合视图。视图由多个其他的视图组成,内置的或自定义的都可以,用来封装复杂的交互和功能。

I. android 自定义view怎么做能提高效率

越少越好

为了加速视图,从那些调用频繁的活动中减少不必要的代码。在OnDraw()方法中开始绘制,它会给你最大的
效益。特别低,你也应该减少在onDraw()方法中的内存分配,因为任何内存分配都可能导致内存回收,这将会

引起不连贯。 在初始化或者动画之间分配对象。绝不要在动画运行时分配内存。

另一方面需要减少onDraw()方法中的开销,只在需要时才调用onDraw()方法。通常invalidate()方法会调用

onDraw()方法,因此减少对invalidate()的不必要调用。如果可能,调用它的重载版本即带有参数的invalidate()

方法而不是无参的invalidate()方法。该带参数的方法invalidate()能使draw过程更有效,以及减少对落在该矩形

区域(参数指定的区域)外视图的不必要重绘 。

J. android 继承viewGroup自定义了一个视图,那个自定义的视图在activity的oncrate方法里面添加子。。

添加的子View,如果用hierarchyviewer工具可以看到,而你看不到,那么可能原因有:

  1. 是你添加子View的时候里面已经有View了,并被盖住了。可以先调用removeAllViews()试下。

  2. oncreate能看到,onresume不能看到,调用setContentView()方法试下,应该是没有刷新当前界面

热点内容
安卓版软件如何设置 发布:2025-01-20 18:58:53 浏览:57
java中级项目案例 发布:2025-01-20 18:58:52 浏览:912
sql日志查看工具 发布:2025-01-20 18:57:12 浏览:242
数据库删除表格 发布:2025-01-20 18:51:22 浏览:439
c语言head 发布:2025-01-20 18:41:36 浏览:736
xboxone绝地求生怎么设置服务器 发布:2025-01-20 18:22:12 浏览:176
编译字母表 发布:2025-01-20 18:20:38 浏览:243
c语言输入日期计算天数 发布:2025-01-20 18:11:57 浏览:949
sql获取表的列名 发布:2025-01-20 18:11:54 浏览:861
不要做编程 发布:2025-01-20 18:11:02 浏览:155