1、EditText隐藏输入的密码
利用EditText作为密码输入是现在许多应用程序会用到的方式,下面是两种设置密码隐藏/可见的方式:
在布局文件中设置其password属性:
<EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:password="true"/>
在代码中这样使用:
//设置EditText内容为可见 et01.setTransformationMethod(HideReturnsTransformationMethod.getInstance()); //设置EditText内容为不可见 et01.setTransformationMethod(PasswordTransformationMethod.getInstance());
2、监听EditeText用户输入:setOnKeyListener事件
EditText Widget设计的初衷是为了等待User输入而准备的,那么在User输入的同时,就可以使用setOnKeyListener事件对用户在EditText中的按键进行监听并截获,不过这种方式只能监听硬盘事件,无法监听软盘;
还可以使用TextWatcher类,这种方式是可以监听软键盘和硬键盘的,我们只需要实现onTextChanged方法即可,另外TextWatcher还提供了beforeTextChanged和afterTextChanged方法,用于更加详细的输入监听处理。
下面的程序是将截获的内容显示在一个TextView中:
import android.app.Activity; import android.os.Bundle; importandroid.text.Editable; importandroid.text.TextWatcher; import android.util.Log; import android.view.Menu; importandroid.widget.EditText; importandroid.widget.TextView; public class MainActivityextends Activity { TextView textView01; EditText editText01; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView01 = (TextView)findViewById(R.id.textView01); editText01 = (EditText)findViewById(R.id.editText); editText01.addTextChangedListener(new TextWatcher() { public void onTextChanged(CharSequence s, intstart, int before, int count) { Log.i("输入", s +"/" + start + "/" + before + "/" + count); textView01.setText(editText01.getText()); } public void beforeTextChanged(CharSequence s,int start, int count, int after) { Log.i("输入", s +"/" + start + "/" + count); } public void afterTextChanged(Editable s) { Log.i("输入", s +""); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action barif it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
QQ: 2506314894
市面上的手机助手软件很多,实现的功能基本都一样,花了很长时间这个手机助手最终小有成效,实现了市面上那些助手的所有的功能。手机助手最基本功能
1: 自动识别手机
2:智能安装手机驱动
3:PC 端和手机端的连接。 这里面涉及到ADB 的一些连接问题。
4:PC 端和手机端的信息交换。
分别简单说一下以上的各个步骤
1) 自动识别
如果需要识别市面上的手机,有些童鞋认为依靠ADB 就可以识别,但是据我所知,第一个阶段的识别跟ADB 貌似没有多大的关系,需要有一个完整的数据库,PC 端收到USB的消息之后,检测USB 的各种消息,然后将USB 的信息发到服务器,由服务器返回识别到的手机信息。所以这个阶段 数据库的收集是关键。
2) 智能安装驱动
每个手机厂家都会有适合的手机驱动,而且可能不止一个驱动,比如32位系统和64位系统,WIN7,XP,WIN8 等都有可能不同,所以这一步需要搜集手机的驱动。当识别到一个手机的时候带上手机的信息向服务器询问驱动的下载地址。然后下载驱动。驱动下载回来之后那就是安装的过程。安装驱动也有一些复杂,驱动分为exe,msi,inf 三种格式,前面两种的很容易搞定,最难搞定的是inf格式的驱动,微软提供了一个dpinst.exe安装工具,但是貌似这个极度的不靠谱,需要自己编写程序安装驱动。
3) PC端和手机端连接
前两步完成之后,就需要连接手机了,连接手机ADB 这个是必须的,关于如何使用ADB 可以去网上找教程。这里需要提到一点,所有的助手都没有使用谷歌自动的adb程序,关于具体原因可以查看我的一篇专门关于adb的帖子。
4) PC 端和手机端的信息交换
到了这一步那基本就大功告成了,已经和手机建立了连接,手机助手所有的功能都不是问题,比如获取手机的信息,传输视频音乐,通讯录等等。
在整个的开发过程中主要是PC端的技术问题需要解决,手机端基本没有什么难题,更多的关键技术都在PC端和数据的收集。
经过这么长时间的研究和运营,我已经收集了基本上所有的手机信息以及驱动信息,并且在持续的更新中。
在我的资源共享里面可以下载到手机助手的试用版。由于服务器没有维护,所以内嵌的网页已经不能使用了。正常是可以一键安装的。
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/icon_home_button_img"/>
<item android:drawable="@drawable/icon_home_shape_overlay"/> </layer-list>
icon_home_shape_overlay如下
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#60000000"/>
<stroke android:width="3dp" color="#ff000000"/>
<corners android:radius="10dp" />
</shape>
或者直接使用一种效果
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#99FFFFFF"/>
<corners android:radius="30px"/>
<padding android:left="0dp" android:top="0dp" android:right="0dp" android:bottom="0dp" />
</shape>
然后 android:background="@drawable/my_shape_file"
2.图片本身加上圆角
Bitmap myCoolBitmap = ... ; // <-- Your bitmap you want rounded
int w = myCoolBitmap.getWidth(), h = myCoolBitmap.getHeight();
Bitmap rounder = Bitmap.createBitmap(w,h,Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(rounder);
Paint xferPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
xferPaint.setColor(Color.RED);
canvas.drawRoundRect(new RectF(0,0,w,h), 20.0f, 20.0f, xferPaint);
xferPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
canvas.drawBitmap(myCoolBitmap, 0,0, null);
canvas.drawBitmap(rounder, 0, 0, xferPaint);
或者
public static Bitmap getRoundedCornerBitmap(Bitmap bitmap) {
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
bitmap.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final int color = 0xff424242;
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
final RectF rectF = new RectF(rect);
final float roundPx = 12;
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);
return output;
}