尽管 findViewById 方法在这个MainActivity类中没有声明,但其实在父类 AppCompatActivity 声明过了,setContentView 也是这样,它也是在 AppCompatActivity 类中声明的。
リフレクションを使って文字列からリソースIDを取得する JAVA反射 Java Reflection(反射机制)详解 Java 反射 使用总结 关于Android中根据ID名动态获取资源的两个方法 Android利用资源名称获取其ID(一)—>getIdentifier()
iOS开发中,UITextField和UITextView是最常用的文本接受类和文本展示类的控件。UITextField和UITextView都输入文本,也都可以监听文本的改变。不同的是,UITextField继承自UIControl这个抽象类。UITextView继承自UIScrollView这个实体类。这就导致了UITextView可以多行展示内容,并且还可以像UIScrollView一样滚动。而UITextField只能单独的展示一行内容。从这个角度,UITextView在功能上是优于UITextField的。 但是,众所周知,UITextField中有一个placeholder属性,可以设置UITextField的占位文字,起到提示用户输入相关信息的作用。可是,UITextView就没那么幸运了,apple没有给UITextView提供一个类似于placeholder这样的属性来供开发者使用。而开发中,我们经常会遇到既要占位文字,又要可以多行展示并且可以滚动的控件,单纯的UITextField或者UITextView都不能满足这种产品上的需求。比如,现在市面上的app大多都有一个用户反馈的入口,如下图(一)所示。下面我就把自己能够想到的方法汇总一下,让更多的开发者知道,原来有这么多方法可以实现UITextView的占位文字。
情景,正常TextView中设置文本内容中包含中英文时会造成自动换行的问题,影响界面显示效果,如图:
这些方法都是View类的,所以像TextView这样看似不是按钮的组件也可以使用这些监听。
在使用TextView的时候,我们经常需要在TextView中进行图文混排,比如在QQ中聊天的消息中的表情,底部tab图标等。
本文实例讲述了Android开发自定义TextView省略号样式的方法。分享给大家供大家参考,具体如下:
转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/18964835
@property(nonatomic,assign) id<UITextViewDelegate> delegate;
ListView的运行效率是比较低的,因为在getView()中每次都会将整个布局重新加载一遍,当ListView快速滚动的时候就会成为性能瓶颈。 调用View中的findViewById()方法获取一次控件的实例,这也是一个很耗时的操作,可以进行优化。 方法一:convertView参数 这个参数用于将之前加载好的布局进行缓存,以便之后进行重用。 @Override public View getView(int position, View convertView, View
String[] arr={“凯撒”,”凯撒广场”,”凯撒大帝”}; ArrayAdapter<String adapter= new ArrayAdapter<String (this, R.layout.textview, arr);
老规矩,先上张图 o,这篇好像是分析篇,没有效果图。不管了,位置占着,老规矩不能坏,下面开始正文。
我们常用的linearlayout,等都属于流布局,在流布局中如何移动控件呢? 我决定做个尝试。虽然可以使用绝对布局,但我不倾向使用这个布局。那么看看我的方式吧。
超文本:http://www.baidu.com 这么一个效果:一行文本当中 前面显示黑色颜色的“超文本:”,后面显示红色颜色的“http://www.baidu.com” 并且要求红色字体的部分可
在TextView中预定义了一些类似HTML标签(不区分大小写),通过这些标签,我们可以使TextView控件显示不同的颜色、大小、字体的文字。 常见的标签如下:
经常做,经常忘,记下来,以后好直接拷贝。 开始使用如下方法做限制 - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { if ([text isEqualToString:@""] && range.length > 0) { //删除字符肯定是安全的 return YES; }
String text1=”<font color=’red’ <i 你好啊,陌生人</i </font <br/ “; text1+=”<a href=’http://www.baidu.com’ 百度</a <br / “;
写在前面的话: 在正常项目流程中,我们很多情况下会碰到点击显示更多文本,这样可以利于页面变化加载,点击显示更多可能会非常常用,现在博主利用自己的闲暇时间来一点一点完成一个自定义控件,这个控件可以满足大多数情况的需求。
文字,是我们传达信息的一种常见方式。在安卓应用上显示文字,我们通常使用TextView。 之前我们已经知道如何获取到layout中的TextView,也知道setText()方法可以修改显示的文字。
android中的一些耗时操作,例如网络请求,如果不能及时响应,就会导致主线程被阻塞,出现ANR,非常影响用户体验,所以一些耗时的操作,我们会想办法放在子线程中去完成。 android的UI操作并不是线程安全的,所以多个线程并发操作UI组件的时候,则可能导致线程安全问题。为了解决这个问题,android只允许UI线程修改UI组件。 public class MainActivity extends AppCompatActivity { TextView textView; But
在Android项目中经常有碰到这样的问题,在子线程中完成耗时操作之后要更新UI,下面就自己经历的一些项目总结一下更新的方法。话不多说了,来一起看看详细的介绍吧
Android 提供了创建菜单的方式,一种是在 Java 代码中创建,一种是使用XML 文件定义。上面的实例都是 Java 创建菜单,在 Java 存在如下大学。
Binding adapters 可以作为一个设置某个值的框架来使用,databinding 库可以允许指定具体的方法来进行相关值的设置,在该方法中可以做一些处理逻辑,Binding adapters 会最终给你想要的结果,那么当我们在布局文件中使用 databinding 绑定数据时是如何调用对应的属性方法呢?
1.viewstub就是动态加载试图;也就是在我们的app启动绘制页面的时候,他不会绘制到view树中;当在代码中执行inflate操作后,她才会被添加到试图中。其实ViewStub就是一个宽高都为0的一个View,它默认是不可见的,只有通过调用setVisibility函数或者Inflate函数才 会将其要装载的目标布局给加载出来,从而达到延迟加载的效果,这个要被加载的布局通过android:layout属性来设置。最终目的是把app加载页面的速度提高了,使用户体验更好。
开发中,接口回调是我们经常用到的。 接口回调的意思即,注册之后并不立马执行,而在某个时机触发执行。 举个例子: A有一个问题不会,他去问B,B暂时解决不出来,B说,等我(B)解决了再告诉你(A)此时A可以继续先做别的事情。 那么就只有当B解决完问题后告诉A问题解决了,A才可以能解决这个问题。 代码中比如最常用的: 一个Activity中给按钮一个接口回调方法,只有用户点击了这个按钮,告诉按钮被点击了,才会执行按钮接口回调的方法 Button btn = new Button(this); b
项目需求: TextView显示一段文字,格式为:白雪公主(姓名,字数不确定)向您发来了2(消息个数,不确定)条消息 这段文字中名字和数字的长度是不确定的,还要求名字和数字各自有各自的颜色。 一开始我想的是用(转) SpannableString与SpannableStringBuilder来实现,因为它可以实现一段文字显示不同的颜色 但是貌似它只能固定哪些位置的文字显示什么样式,于是乎放弃。 然后就想到了用 Html.fromHtml(String str) 来实现。 看方法名很简单,就是可以显示字符串
地址 CSDN地址:http://blog.csdn.net/xiangyong_1521/article/details/78137394 当需要动态更改的TextView的内容字体的大小,比如设定的TextView的只有一行,宽度只有200dp,内容超过这个之后就缩小字体显示,只能能将字体都显示完全;也就是动态更改的的TextView的字体大小,当TextView的的的内容比较多时缩小显示,当TextView的中的内容比较少时正常显示 目录 图片展示 方法一:重写的TextView 方法二:使用框架An
string.xml英文 <?xml version="1.0" encoding="utf-8"?> <resources> <string name="TextView1">ONE</st
Adapter的作用就是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View。
在android3.0之前给我们提供了两种实现动画效果的方式,逐帧动画(frame-by-frame animation)和补间动画(tweened animation)。逐帧动画的工作原理很简单,其实就是将一个完整的动画拆分成一张张单独的图片,然后再将它们连贯起来进行播放,类似于动画片的工作原理。补间动画则是可以对View进行一系列的动画操作,包括淡入淡出、缩放、平移、旋转四种。
这里介绍两种方法,一种是Spannable,一种是Html.fromHtml(通过html标签来改变),实际中看您使用哪种方便选择使用即可
1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程. 使用的优点: l 简单,快捷 l 过程可控 使用的缺点: l 在使用多个异步操作和并需要进行Ui变更时,就变得复杂起来. 2 )Handler异步实现的原理和适用的优缺点 在Handler 异步实现时,涉及到 Handler, Looper,
ContextMenu代表上下文菜单,需要重写onCreateContextMenu()方法,方法的参数是触发菜单的组件。
CountDownTimer类比较简单,总共就一个构造和4个方法。内部是通过handler实现
如果我们想获取TextView内容的行数,TextView没有提供现成的api供我们使用,需要我们自己获取。
上一篇已经讲了如何实现textView中粗字体效果,里面主要重写了onDraw方法。
package com.example.testqqclient; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.net.Socket; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity implements Runnable { private TextView textview1, textview2; private EditText edittext; private Button button; private PrintWriter writer; private BufferedReader reader; Socket socket; private Handler handler; private String write = ""; @Override protected void onStart() { // TODO 自动生成的方法存根 super.onStart(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textview1 = (TextView) findViewById(R.id.textView1); textview2 = (TextView) findViewById(R.id.textView2); edittext = (EditText) findViewById(R.id.edittext); button = (Button) findViewById(R.id.button1); Thread t = new Thread(this); t.start(); handler = new Handler() { @Override public void handleMessage(Message msg) { // TODO 自动生成的方法存根 if (msg.what == 0x11) { textview2.setText("老人端发来的:" + msg.getData().getString("reader") + "\n"); } super.handleMessage(msg); } }; button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO 自动生成的方法存根 write += edittext.getText().toString() + "\n"; textview1.setText("本人自己写的:" + write); writer.print(edittext.getText().toString() + "\n"); writer.flush(); edittext.setText(""); } }); } @Override public void run() { try { socket = new Socket("localhost", 8100);
AbsoluteLayout绝对布局已经被弃用,但是相关API依然有效,其又被称为坐标布局,在iOS开发支持Autolayout之前,所有的布局模式都可以理解为绝对布局。但是iPhone设备的屏幕尺寸有限,使用绝对不觉并不会出现太多难以解决的问题,但是对于Android设备就不同了,Android设备的屏幕尺寸和分辨率都无规范,使用坐标绝对布局的缺陷就十分明显。
最近要做些物联网类的应用,所以就必须要把这个搞懂,才能做一些实用的物联网设备的控制。点击获取WIFI热点信息最终效果如下:
(f.bottom - f.top)/ 2 = View的一半高度(文字底部到View中线的距离) getHeight()是View的一半高度的位置的y坐标; dy = (f.bottom - f.top)/ 2 - f.bottom (基线与View中线间的距离)
github地址:https://github.com/shuaijia/NoteText
在很多编程语言中,线程都是一个重要的组成部分,多线程的支持可以给程序员更加灵活的程序功能实现代码编写方式,线程一般用于处理一些比较耗时的任务(下载文件、复制或者移动文件。。。)。那么Android作为一个最热门的移动操作系统,当然支持多线程编程(严格来说应该是java支持多线程编程,Android使用的是java编程语言)。下面来看一下怎么去使用Android多线程:
3.activity中的代码 这里面用到了万能ViewHolder,不了解可以去这里 了解详情 同时也用到了万能适配器,不了解可以去这里 了解详情
调用四个TextView对象的setOnClickListener()方法,设置点击事件,参数:this
作为开发人员,在我们的日常开发中,为了构建更好的应用程序,我们需要考虑很多事情以保证应用运行在正轨上,其中之一是要确保我们的应用程序不会崩溃。应用崩溃的一个常见原因是内存泄漏。这方面的问题可以以各种形式表现出来。在大多数情况下,我们看到内存使用率稳步上升,直到应用程序不能分配更多的资源,并不可避免地崩溃。在Java中这往往导致一个OutOfMemoryException异常被抛出。在某些罕见的情况下,泄露的类甚至可以逗留很长时间来接收已注册的回调,这会导致一些非常奇怪的错误,并往往抛出臭名昭著的IllegalStateException异常。
在 Module 下的 build.gradle 中导入 EventBus 依赖 ;
GridLayout是Android4.0引入的网格布局,使用它可以减少布局嵌套。也算是常用,但一直没仔细看过,今天研究一下
领取专属 10元无门槛券
手把手带您无忧上云